chmod 755と644の違いとrwxの読み方

ls -l で出てくる rwxr-xr-x と、chmod 755 の「755」。この2つが同じものを指していると、しばらく腹落ちしていませんでした。

数字は数字、記号は記号として別々に暗記していたので、毎回「どっちがどっちだっけ」と調べ直していたんです。

一度「数字は rwx の足し算」だと分かってからは調べる回数が激減しました。同じところで詰まる人向けに、その整理を残しておきます。

パーミッションは「3者 × 3権限」の表

Linux のファイル権限は、所有者(user)グループ(group)その他(other) の3者それぞれに、読み取り(r)書き込み(w)実行(x) を割り当てる仕組みです。

ls -l を打つと、行の先頭にこの権限が並びます。

$ ls -l
-rwxr-xr-x 1 kamome staff 1024 Jul  4 10:00 deploy.sh
drwxr-xr-x 2 kamome staff 4096 Jul  4 10:00 logs

先頭の1文字はファイル種別で、- が通常ファイル、d がディレクトリを表します。

残りの9文字を3文字ずつ区切ると、左から順に所有者・グループ・その他の権限。

たとえば rwxr-xr-x なら、所有者は rwx(全部)、グループは r-x(読みと実行)、その他も r-x、という読み方です。

数字は r=4 / w=2 / x=1 の足し算

chmod 755の図解:rwxr-xr-xを所有者・グループ・その他の3つに区切り、r=4・w=2・x=1の足し算で7・5・5になることを示す

ここで chmod 755 の数字が効いてくるのです。

各権限には重みがあって、r=4w=2x=1 と決まっています。

1桁ぶん(1者ぶん)の権限を、この3つの足し算で表すわけです。

rwx = 4+2+1 = 7
rw- = 4+2   = 6
r-x = 4  +1 = 5
r-- = 4     = 4

だから 755 は「所有者7(rwx)/グループ5(r-x)/その他5(r-x)」となり、rwxr-xr-x と一致します。

644 なら「6(rw-)/4(r–)/4(r–)」で、rw-r--r-- になりました。

よく使う値をいくつか覚えておくと、ほとんどの場面はこれで足ります。

  • 755:スクリプトやディレクトリ(本人は全権、他者は読み+実行)
  • 644:通常ファイル(本人は読み書き、他者は読みだけ)
  • 600:他人に一切見せたくないファイル(鍵ファイルなど)
  • 700:本人専用のディレクトリ

記号でも指定できる(u/g/o/a と +/-/=)

数字とは別に、記号で「差分だけ」変える書き方もあります。

対象は u(所有者)・g(グループ)・o(その他)・a(全員)、操作は +(追加)・-(削除)・=(その通りにセット)です。

chmod u+x deploy.sh    # 所有者に実行権を追加
chmod go-w report.txt  # グループとその他から書き込みを外す
chmod a+r public.html  # 全員に読み取りを付与

数字が9個の権限をまとめて上書きするのに対して、記号は今の状態を活かしつつ一部だけ足し引きします。

「実行権だけ足したい」といった場面では、記号のほうが事故りにくいです。

-R(再帰)には落とし穴がある

ディレクトリ以下をまとめて変えたいとき、chmod -R を使いたくなります。

ところが chmod -R 755 ./project のように打つと、中の通常ファイルにまで実行権(x)が付いてしまうんです。

ファイルは644、ディレクトリは755にしたい、というのが普通なので、両者を分けて指定するのが安全でした。

# ディレクトリだけ 755
find ./project -type d -exec chmod 755 {} +
# ファイルだけ 644
find ./project -type f -exec chmod 644 {} +

chmod -R 777 は「全員に全権限」なので、公開ディレクトリでは特に避けたいところです。

権限で迷ったら、まず「本当にその他(other)に書き込みが必要か」を疑うと、たいていの事故は防げます。

最後に

chmod の数字は、r=4w=2x=1 の足し算だと分かってしまえば怖くありません。

755と644さえ体に入れておけば、あとは必要なときに足し算するだけ。

以上です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA