よく使うLinuxコマンド

chmod - 一般に使うコマンド

ファイル・ディレクトリのアクセスパーミッションを変更します

■よく使う形(例)

# ls -l

※index.cgiというプログラムに、すべてのオーナーに対しての実行権限を与える。(誰でも実行可能)

# chmod 755 index.cgi

上記のコマンドは下記の記述でも同じ
# chmod a+x

(1)まずはアクセスパーミッションの意味

◎記号の意味

属性
- 通常のファイル
d ディレクトリ
l シンボリックリンク
 
アクセス権限
r 読み込み可能
w 書き込み可能
x 実行可能
- 不可能

上記の例だと、所有者www は、読み書き・実行のすべての権限を持つが、所有者以外のユーザーはディレクトリへの書き込みができない(読み込みと実行は可)ことがわかる。

さて、このディレクトリに対し、所有者以外は読み書きを可能として、実行は不可にするためには、chmodコマンドを使用する。

(2)chmodコマンド
所有者以外は読み書きを可能として、実行は不可にするためには、下記のように記述する。

# chmod 766 directry →アクセス権限をrwxrw-rw-にする。

または

# chmod a+w,g-x,o-x directry

 a+w  →すべてのユーザーに書き込み権限を与える。
 g-x  →グループユーザーの実行権限を取り除く。
 o-x  →その他ユーザーの実行権限を取り除く。

どちらも実行した結果は
drxxrw-rw- 2  www  staff   4096 Jun 22 21:34 directory
となるが、数字表記の方が結果的に分かりやすいので、筆者は数字指定の方だけ使っている。

(3)数字表記
数字表記は覚えてしまうと何でもないのだか、最初はちょっとと戸惑うかも..。
でも、覚えるととても簡単。

rwxr-xr-xという形を単に2進数に置き換える(コンピューターは何でも2進数)と、111 101 101となります。
(権限があるrwxのいずれかであれば「1」、権限がない - の場合は「0」となります。

今度はそれぞれ(所有者・グループ・その他)の3ビットずつを8進数で表すと 755となります。

この数値をchmodコマンドに与えると、rwxr-xr-xになるというわけです。

例(あんまりこんな例はありませんが)

rwx rw- r--
2進数 111 110 111
8進数 7 6 4
chmod 764

■主なオプション

オプション 機能説明
-R ディレクトリ下のファイルやディレクトリを再帰的に変更(サブディレクトリの内容も変更)
※その他、オプションは多数ありますが、専門のコマンドリファレンスやmanコマンド等でご確認下さい。

■ちょっと特殊な使い方

(1)他人の権限でプログラムを実行させる

●セットユーザーID
プログラムを実行した場合、通常は実行したユーザの権限でプログラムが実行されますが、セットユーザーID(SUID)が設定されたファイルの場合、どのユーザーが実行しても、 所有者権限で実行されます。
セットユーザーIDを設定する場合は、数値表記で「4000」を通常のアクセス権限設定に付加して設定を行います。

# chmod 4755 index.cgi →# chmod u+sでも可
と設定すると

-rwsr-xr-x 1 www   staff    8396 Mar 25 23:13 index.cgi

ただし、他人の権限でプログラムを動作させることが可能ということになるので、設定には細心の注意が必要。

●セットグループID
セットユーザーIDとよく似ていて、セットグループID(SGID)の場合は所有グループの権限で実行されます。
セットグループIDを設定する場合は、数値表記で「2000」を通常のアクセス権限設定に付加して設定を行います。

# chmod 2755 index.cgi →# chmod g+sでも可

-rwxr-sr-x 1 www   staff    8396 Mar 25 23:13 index.cgi

これもSUIDと同じく、他人の権限でプログラムを動作させることが可能ということになるので、設定には細心の注意が必要。

(2)共有ディレクトリの権限を限定する
全ユーザーから自由に書き込み可能にしてする反面、削除するときはその所有ユーザーしか削除できないようにするときに利用する。

●スティッキービット
スティッキービットがあると、例え書き込み権限があっても、自分以外の所有者のファイルを削除したり、ファイルの名前を変更したりすることができません。
ディレクトリにスティッキービットを設定するには数値表記で「1000」を通常のアクセス権限設定に付加して設定を行います。

# chmod 1766 dirctory →# chmod o+tでも可

drxxrw-rwt 2  www  staff   4096 Jun 22 21:34 directory