\r\n\r\n
Linuxのchmodコマンドを使用して、ファイルへのアクセス、ディレクトリの検索、スクリプトの実行を許可するユーザーを制御します。Linuxのファイルパーミッションを変更するこのコマンドは、最初は複雑に見えるかもしれませんが、その仕組みがわかれば、実はとても簡単なことなのです。
Linuxでは、ファイルやディレクトリに対して誰が何をできるかは、パーミッション・セットで制御されます。パーミッションは3セットあります。1セットはファイルの所有者用、もう1セットはファイルグループのメンバー用、最後の1セットはそれ以外の人用です。
パーミッションは、ファイルやディレクトリに対して実行可能なアクションを制御します。ファイルの読み取り、変更、実行(スクリプトやプログラムの場合)を許可または禁止します。ディレクトリの場合、パーミッションは、誰がディレクトリにcdを入れることができるか、誰がディレクトリにファイルを作成または変更することができるかを制御します。
chmodコマンドで各パーミッションを設定することができます。ファイルやディレクトリにどのようなパーミッションが設定されているかを確認するには、lsを使用することができます。
l(ロング・フォーマット)オプションを使って、lsにファイルやディレクトリのファイル・パーミッションを一覧表示させることができるのです。
ls -l各行の最初の文字で、リストアップされるエントリーの種類を識別します。ダッシュ(-)であれば、ファイルです。dの文字であれば、ディレクトリです。
次の9文字は、3組のパーミッションの設定を示す。
パーミッションの各グループには、3人のキャラクターがいます。これらの文字は、ある許可の有無を示しています。ダッシュ(-)か文字です。文字がダッシュの場合は、許可が下りていないことになります。文字がr、w、xの場合、許可されたことになる。
この文字は、その略です。
例えば、こんな感じです。
スクリーンショットでは、最初の行がdで始まっています。この行は、"archive "というディレクトリを参照しています。ディレクトリのオーナーは "dave "で、ディレクトリが属するグループの名前も "dave"
次の3文字は、このディレクトリのユーザーパーミッションです。これは、オーナーがフルパーミッションであることを示す。r、w、xの文字はすべて存在する。これは、ユーザーdaveがこのディレクトリに対して読み取り、書き込み、実行の権限を持っていることを意味します。
2つ目の3文字はグループ権限で、r-xです。これらの文字は、daveグループのメンバーがこのディレクトリに対して読み取り権限と実行権限を持っていることを表しています。つまり、ディレクトリ内のファイルとその内容をリストアップし、そのディレクトリにcd(実行)することができるのです。書き込み権限がないため、ファイルの作成、編集、削除はできません。
最後の3文字のセットもr-xです。これらの権限は、最初の2つの権限セットで制御されていない人に適用されます。これらの人々(「その他」と呼ばれる)は、このディレクトリに対して読み取りと実行のアクセス権を持っています。
つまり、グループのメンバーなどには読み取り権限と実行権限があり、所有者であるdaveというユーザーには書き込み権限もある。
その他のファイル(mh.shカンパニースクリプトファイルを除く)については、daveおよびdaveグループのメンバーはファイルに対する読み取りおよび書き込み属性を持ち、その他のメンバーは読み取りアクセス権のみを持っています。
特殊なケースであるmh.shカンパニースクリプトファイルでは、オーナーdaveとグループメンバーには読み取り、書き込み、実行の権限があり、その他のメンバーには読み取りと実行の権限のみがあります。
chmod を使ってパーミッションを設定するには、次のように指示する必要があります。
これらの値を表す指標として、u+xのような短い「permissi***文」を作成します。ここで、「u」は「ユーザー」(誰)、「+」は追加(何を)、「x」は実行許可(何を)を意味します。"+"は追加(何を)、"x "は実行許可(何を)を意味します。
使える「who」の値は、以下の通り。
いずれも使用しない場合、chmodは "a "を使用した場合と同じように動作します。
使える "what "の値は以下の通り。
使える「which」の値は以下の通り。
例えば、誰もがフルアクセスできるファイルがあるとします。
ls -l new_ file.txtユーザーdaveには読み取りと書き込みの権限を与え、グループとその他のユーザーには読み取り権限のみを与えたいと思います。
chmod u=rw,og=r new_file.txt演算子"="を使用すると、既存の権限をすべて削除してから、指定した権限を設定することになります。
このファイルの新しいパーミッションを確認してみましょう。
ls -l new_file.txt予想通り、既存のパーミッションは削除され、新しいパーミッションが設定されました。
既存の権限設定を削除せずに、権限を追加するのはどうでしょうか?それも簡単にできますよ。
例えば、編集されたスクリプトファイルがあったとして、それをすべてのユーザーが実行できるようにする必要があるのですが、現在のパーミッションは次のようになっています。
ls -l new_script.sh以下のコマンドで、それぞれに実行権を追加することができます。
chmod a+x new_script.sh権限を見てみると、既存の権限はそのままに、実行権限が全員に付与されていることがわかります。
ls -l new_script.sh次のコマンドは、"a+x "ステートメントの "a "がなくても同じように動作します。
chmod +x new_script.sh複数のファイルに同時に権限を適用することも可能です。
カレントディレクトリには、以下のファイルがあります。
ls -l拡張子が".page "のファイルから "other "ユーザーの読み取り権限を削除したいとします。以下のコマンドで実現できます。
chmod o-r *.pageその意味するところを確認してみましょう。
ls -lこのように、「other」カテゴリのユーザーの場合、「.page」ファイルから読み取りアクセスが削除されましたが、他のファイルには影響がありません。
サブディレクトリ内のファイルも含めたい場合は、-R(recursive)オプションを使用することができます。
chmod -R o-r *.pagechmodのもうひとつの使い方は、オーナーやグループなど、付与したい権限を3桁の数字で指定する方法です。一番左の数字は、所有者の許可を示しています。真ん中の数字は、グループメンバーの権限を示しています。一番右の数字は、他の数字に対するパーミッション(許可)を示します。
使用できる数字と、その数字が表すものは以下の通りです。
3つの許可はそれぞれ2進数のビットで表現され、10進数に相当する。つまり、5は2進数で101となり、読み取りと実行を意味します。2は2進数で010となり、書き込み許可を意味します。
この方法では、希望する権限を設定することができます。既存の権限にこれらを追加することはありません。したがって、読み取り権限と書き込み権限がすでに存在する場合は、7(111)を使用して実行権限を追加する必要があります。1(001)を使用すると、読み取りと書き込みのパーミッションが削除され、実行パーミッションが追加されます。
他のユーザーカテゴリーの「.page」ファイルに読み取り権限を追加してみましょう。また、ユーザーやグループの権限も設定しなければならないので、既存の権限に設定する必要があります。これらのユーザーは、すでに読み取りと書き込みの権限、すなわち6(110)を持っています。others」に読み取り権限とアクセス権限を持たせたいので、4(100)に設定する必要があります。
次のコマンドを実行すると、この操作が完了します。
chmod 664 *.pageこれにより、ユーザー、グループメンバー、その他に必要な権限が設定されます。ユーザーとグループメンバーの権限は元の権限にリセットされ、他のユーザーとグループメンバーの読み取り権限は元に戻されました。
ls -lchmodのマニュアルページを読むと、SETUIDやSETGIDビット、削除制限や「スティッキー」ビットに関連した高度なオプションがいくつか紹介されています。
chmodが必要な場合の99%は、ここで説明するオプションでカバーできます。