パーミッションとは、ファイルやディレクトリに対する権限。権限には「読み取り権」「書き込み権」「実行権」の3種類
・読み
ーファイル
ファイル内容を参照(cat,moreなど)
ーディレクトリ
ディレクトリの内容を参照(ls,findなど)
・書き
ーファイル
ファイルに書き込み(viなど)
ーディレクトリ
ディレクトリ内に真摯ファイルを作成。既存ファイルの名前変更や削除(touch,mv,rmなど)
・実行
ーファイル
ファイルを実行
ーディレクトリ
ディレクトリ内のファイルへのアクセス。ディレクトリへの移動(cd)
ファイルやディレクトリを新規作成した際の、デフォルトのパーミッションを設定するにはumaskコマンドを利用します。
umask [マスク値]
umaskコマンドではマスク値というものを設定して、新規に作成するファイルとディレクトリのデフォルトのパーミッションを決定します。マスク値はユーザ毎に指定できます。通常「/etc/bashrc」などに設定されており、シェルの起動時にシステムのデフォルト値に戻ります。
マスク値が0の場合に使用されるデフォルトのパーミッションは、ファイルが「666」、ディレクトリが「777」です。これらの値から、指定したマスク値を引いた値が新たなデフォルトのパーミッションとして設定されます。
666 - マスク値 = ファイルのデフォルトのパーミッション
777 - マスク値 = ディレクトリのデフォルトのパーミッション
パーミッションの表記は各桁が独立して、左から所有ユーザ、所有グループ、その他のユーザを表します。ですのでumask値を引く際も各桁ごとに引きます。
なお、ファイルのデフォルトのパーミッションは「666」で実行権が無いので、umask値に関わらず実行権は設定されません。
また、特殊なパーミッションとして、以下の3つがあります。
・SUID
実行ファイルに設定する事で、そのプログラムをどのユーザが実行しても、プログラムの所有ユーザの権限で実行されます。
設定はchmodコマンドで、通常のパーミッションの値に4000を加えた値を設定するか、所有ユーザに「s」という権限を追加します(u+s)。
これが設定された代表的なプログラムに「passwd」コマンドがあります。
・SGID
実行ファイルに設定する事で、そのプログラムをどのユーザが実行しても、プログラムの所有グループの権限で実行されます。
設定はchmodコマンドで、通常のパーミッションの値に2000を加えた値を設定するか、所有グループに「s」という権限を追加します(g+s)。
・スティッキービット
ディレクトリに設定する事で、そのディレクトリに対して書き込み権限を持つユーザでも、自分が所有する以外のファイルを削除できなくなります。
設定方法はchmodコマンドで、通常のパーミッションの値に1000を加えた値を設定するか、その他ユーザに「t」という権限を追加します(o+t)。
これが設定された代表的なディレクトリに「/tmp」ディレクトリがあります。
ファイルやディレクトリのパーミッションを変更するにはchmodコマンドを利用します。
chmodコマンドの書式は以下のとおりです。
chmod [-R] パーミッション ファイルまたはディレクトリ
「-R」オプションを使用すると、指定したディレクトリおよびその配下にあるファイルのパーミッションを変更することが出来ます。
パーミッションの指定には数値か記号のどちらかを用います。
・数値の場合
chmod -R 755 dir
・記号の場合
・対象
u 所有者
g 所有グループ
o その他のユーザ
a 全てのユーザ
・操作
+権限を追加
- 権限を削除
= 権限を指定
・権限
r 読み取り権
w書き込み権
x実行権
s SUIDまたはSGID
t スティッキービット
対象、操作、権限の順に指定します。また「,」を使用して繰り返すことも出来ます。
指定したファイルまたはディレクトリの所有ユーザや所有グループを変更するにはchownコマンドを利用します。所有ユーザを変更できるのはrootユーザのみです。
また、所有グループのみを変更可能なchgrpコマンドもあります。ユーザが所属しているグループであれば、一般ユーザでも変更できます。
・所有ユーザのみを変更する場合
chown [-R] ユーザ名 ファイルまたはディレクトリ
・所有ユーザと所有グループを同時に変更する場合
chown [-R] ユーザ名:グループ名 ファイルまたはディレクトリ
・所有グループのみを変更する場合
chown [-R] :グループ名 ファイルまたはディレクトリ
chgrp [-R] グループ名 ファイルまたはディレクトリ
「-R」オプションを使用すると、指定したディレクトリ、およびその配下にあるファイルの所有ユーザやグループを再帰的に変更できます。
なお、「:」の部分は「.」としても同じです。