- 追加された行はこの色です。
- 削除された行はこの色です。
UNIX系OSの大切な概念に,パーミッション(アクセス権限)というものがあります.これはファイルの「所有者」,「グループ」,「その他」という三つの属性のユーザごとに,「読み込み」,「書き込み」,「実行」をそれぞれ別々に指定するというものです.このように細かな設定ができることが,セキュリティの強化に一役かっています.パーミッションを変更するためのコマンドが,chmod(change mode)です.
* パーミッションの表記法 [#y7f295fa]
最初に,パーミッションの表記法を知っておく必要があります.パーミッションはつぎのようにアルファベット1文字で表されます.
最初に,パーミッションの表記法を知っておく必要があります.
** アルファベットでの表記 [#p8397780]
パーミッションはつぎのようにアルファベット1文字で表されます.
|~意味|~シンボル|
|読み込み|r|
|書き込み|w|
|実行|x|
|権限なし|-|
ファイルリストを表示するコマンドlsに「-l」オプションを付けて
$ ls -l
とすると,つぎのようにパーミッション情報が最初の10文字に表示されます.
-rw-r--r-- 1 foo foo 8245 Sep 3 23:05 chmod.html
-rw-r--r-- 1 foo foo 6832 Sep 3 22:39 compress.html
-rw-r--r-- 1 foo foo 6276 Aug 10 00:25 file.html
lrwxrwxrwx 1 foo foo 13 Sep 4 00:08 index.html -> ../index.html
-rw-r--r-- 1 foo foo 3436 Aug 10 00:25 nkf.html
drwxr-xr-x 2 foo foo 4096 Sep 3 23:58 src/
ここで先頭の1文字はファイルの種類,続く9文字は3文字ごとに「所有者」,「グループ」,「その他」のユーザ別パーミッションを表しています.ファイルの種類とは「ファイル」,「ディレクトリ」,「シンボリックリンク」の3種類で,その表記は
|~意味|~シンボル|
|ファイル|-|
|ディレクトリ|d|
|シンボリックリンク|l|
となっています.たとえば,上の出力の一行目のファイルchmod.htmlは
ファイルの種類 所有者 グループ その他
-
ファイル rw-
読み込み,書き込み可能 r--
読み込み可能 r--
読み込み可能
|~ファイルの種類|~所有者|~グループ|~その他|
|-|rw-|r--|r--|
|ファイル|読み込み,書き込み可能|読み込み可能|読み込み可能|
というパーミッションだと分かります.同様に一番下の行のsrcというやつは
ファイルの種類 所有者 グループ その他
d
ディレクトリ rwx
読み込み,書き込み,実行可能 r-x
読み込み,実行可能 r-x
読み込み,実行可能
|~ファイルの種類|~所有者|~グループ|~その他|
|d|rwx|r-x|r-x|
|ディレクトリ|読み込み,書き込み,実行可能|読み込み,実行可能|読み込み,実行可能|
であると読み取ることができます.ディレクトリにおいて「実行可能」とは,「そのディレクトリに移動できる」を意味します.
数値での表記
** 数値での表記 [#bc15c698]
パーミッションは数値で表すこともできます. CGIを設置したことがある人なら,「なになにのパーミッションは755にしてください」などの説明を読んだことがあるでしょう.この3桁の数字がパーミッションを表しています.
読み込み,書き込み,実行には以下の数値が割り当てられています.
意味 シンボル 数値
読み込み r 4
書き込み w 2
実行 x 1
権限なし - 0
|~意味|~シンボル|~数値|
|読み込み|r|4|
|書き込み|w|2|
|実行|x|1|
|権限なし|-|0|
数値で表記する場合は,各ユーザごとにこれらの数値を足し合わせます.たとえば所有者の権限が rw- なら,4+2+0 で 6 となり,そして3桁の数字の3桁目が 6 と確定されます.2桁目はグループのパーミッション, 1桁目はその他のパーミッションです.したがって,
所有者 グループ その他
rw-
読み込み,書き込み可能 r--
読み込み可能 r--
読み込み可能
|~所有者|~グループ|~その他|
|rw-|r--|r--|
|読み込み,書き込み可能|読み込み可能|読み込み可能|
は
所有者 グループ その他
rw- = 4+2+0 = 6
読み込み,書き込み可能 r-- = 4+0+0 = 4
読み込み可能 r-- = 4+0+0 = 4
読み込み可能
|~所有者|~グループ|~その他|
|rw- = 4+2+0 = 6|r-- = 4+0+0 = 4|r-- = 4+0+0 = 4|
|読み込み,書き込み可能|読み込み可能|読み込み可能|
すなわち 644 という数値表記になります.
パーミッションの変更
数値による操作
* パーミッションの変更 [#k4b82e06]
** 数値による操作 [#gf71ded5]
あるファイルのパーミッションを644に変更する場合,chmod コマンドは
$ chmod 644 ファイル名
$ chmod 644 ファイル名
のように使います.数値の部分でお好みのパーミッションを指定します.
$ chmod 644 ファイル名1 ファイル名2
$ chmod 644 ファイル名1 ファイル名2
のように複数のファイルを一度に指定することもできます.
シンボルによる操作
** シンボルによる操作 [#u5a33a84]
また,数値の代わりにシンボルを使うこともできます.ユーザのシンボルは
意味 シンボル
所有者 u
グループ g
その他 o
|~意味|~シンボル|
|所有者|u|
|グループ|g|
|その他|o|
となっています.たとえば所有者(u)に実行権限(x)を付加する(+)場合は
$ chmod u+x ファイル名
$ chmod u+x ファイル名
などとし,所有者(u)に実行権限(x)を付加し,かつグループ(g)とその他(o)ユーザには全ての権限(rwx)を与えない(-)ようにするには
$ chmod u+x,go-rwx ファイル名
$ chmod u+x,go-rwx ファイル名
などとします.
再帰的に適用
** 再帰的に適用 [#n0872ee6]
chmodコマンドに「-R」オプションを付けると,あるディレクトリ(サブディレクトリ含む)にあるすべてのファイル,ディレクトリ,シンボリックリンクを対象に操作することができます.たとえば
$ chmod -R 700 ディレクトリ名
$ chmod -R 700 ディレクトリ名
などのように使います.
Windowsとの連携例
* Windowsとの連携例 [#fbd44e8f]
Windowsにはパーミッションという概念がありません.ですから,Windowsのファイルシステムはパーミッションの情報を保持できません.いったんFATやNTFSなどのファイルシステムに Linuxでつくったファイルやディレクトリを保存してしまうと,再びLinux側に移してもパーミッション情報が失われ,すべて775になってしまいます.
すべてのファイルに実行権限が付くことになり,これでは困ります.パーミッションの再設定を行うわけですが,一つずつchmodコマンドを打っていたのでは大変です.カレントディレクトリ以下のすべてのファイルのパーミッションを644に変更するには,つぎのようにfindと組み合わせてchmodを使います.
$ find ./ -type f | xargs chmod 644
$ find ./ -type f | xargs chmod 644
これは,まず「find ./ -type f」でカレントディレクトリ以下のファイル名をすべて探し,その結果をパイプで「xargs」に渡して検索結果の一覧を作成し,「chmod 644」に渡して変更を適用させています.「chmod -R」を使わずに「-type f」でファイルに限定しているのは,「chmod -R」ではディレクトリまで644にしてしまい,そのディレクトリに移動できなくなるからです.
また,ファイルが少ない場合や拡張子が限定されている場合は
$ chmod 644 *.png *.html
$ chmod 644 *.png *.html
などのようにワイルドカードを利用するといいでしょう.