【Linux】chmodコマンドとパーミッションの読み方|755・644の意味・+xで実行権限

Linuxでは、すべてのファイルとディレクトリにパーミッション(権限)が設定されていて、「誰が読めるか・書けるか・実行できるか」が決まっています。「スクリプトを実行したらPermission deniedと言われた」「chmod 755って何の数字?」——こうした疑問は、パーミッションの仕組みが分かれば一気に解決します。権限を変更するコマンドがchmodです。

つまずきやすいのは、755644という数値の意味と、rwxr-xr-xという表示の読み方です。どちらも「所有者・グループ・その他」の3者に対する「読み・書き・実行」の組み合わせで、仕組みはシンプルです。この記事では、実機のLinux(WSLのDebian)で実際に権限を変えながら、chmodとパーミッションを整理します。

先に結論

  • パーミッションはls -lで確認。rwxr-xr-x所有者/グループ/その他の3組です。
  • r=読み(4)、w=書き(2)、x=実行(1)。足し算した数字が数値指定です。
  • 755=rwxr-xr-x(自分は全部・他は読みと実行)、644=rw-r–r–が定番です。
  • スクリプトを実行可能にするのはchmod +x ファイルです。
  • 実行権限がないとPermission deniedになります。
  • ディレクトリごと変えるには-R(再帰)を付けます。

権限を確認するls -lを含む基本はよく使うLinuxコマンドまとめ、特定のファイルを探して一括変更するならfindコマンド(-exec)、出力の絞り込みはgrepコマンドもあわせて参考になります。

スポンサーリンク

パーミッションの読み方(ls -l)

ファイルの権限はls -lで確認できます。先頭に表示される-rwxr-xr-xのような10文字が権限の情報です。最初の1文字がファイル種別、残り9文字が3文字×3組に分かれています。

ls -l の見方
ls -l run.sh
# -rwxr-xr-x 1 user group 25 Jul  2 12:00 run.sh

# 先頭10文字の内訳:
#  -          ファイル種別(- はファイル、d はディレクトリ)
#  rwx        所有者(user)の権限   … 読み・書き・実行すべて可
#  r-x        グループ(group)の権限 … 読みと実行のみ
#  r-x        その他(others)の権限  … 読みと実行のみ

# r = read(読み) / w = write(書き) / x = execute(実行)
# - は「その権限が無い」

実機でも、ファイルを作った直後は-rw-r--r--(所有者は読み書き・他は読みのみ)と表示されました。9文字を「所有者」「グループ」「その他」の3文字ずつに区切って読むのがコツです。それぞれr(読み)・w(書き)・x(実行)の3種類で、-はその権限が無いことを表します。この読み方さえ分かれば、rwxr-xr-xが「自分は全部できて、他の人は読みと実行だけ」だと即座に分かります。

数値指定の意味(755・644)

chmod 755の数字は、r=4・w=2・x=1の足し算です。3桁がそれぞれ「所有者・グループ・その他」に対応します。

数値の計算方法
# r=4  w=2  x=1 を足し算する
# 7 = 4+2+1 = rwx(全部)
# 6 = 4+2   = rw-(読み書き)
# 5 = 4+1   = r-x(読みと実行)
# 4 = 4     = r--(読みのみ)
# 0 =       = ---(権限なし)

chmod 755 run.sh    # rwxr-xr-x(スクリプト・公開ディレクトリの定番)
chmod 644 memo.txt  # rw-r--r--(通常のファイルの定番)
chmod 600 id_rsa    # rw-------(秘密鍵など自分だけ)
755と644と600を覚えれば大半は足りる

実機で確認したところ、chmod 755-rwxr-xr-xchmod 644-rw-r--r--chmod 600-rw-------と、指定どおりに変わりました。数値は「所有者・グループ・その他」の順に、r=4・w=2・x=1を足した値を並べたものです。実務でよく使うのは3つで、755(スクリプトや公開ディレクトリ)、644(通常のファイル)、600(秘密鍵や設定など自分専用)です。WordPressなどのWeb公開でも、ディレクトリ755・ファイル644が基本とされます。777(誰でも読み書き実行)は「動かない時の応急処置」として紹介されがちですが、誰でも書き換えられてしまうセキュリティ上の危険な状態なので、安易に使わないでください。

記号での指定(+x・u+x・go-r)

数値のほかに、記号で「今の権限に足す・引く」指定もできます。+x(実行権限を足す)が代表で、「誰に」をu(所有者)・g(グループ)・o(その他)・a(全員)で指定できます。

記号での指定
# 実行権限を足す(スクリプトを実行可能にする定番)
chmod +x run.sh

# 所有者にだけ実行権限を足す
chmod u+x run.sh

# グループとその他から読み取り権限を外す
chmod go-r secret.txt

# 組み合わせ(カンマ区切り)
chmod u+x,go-r run.sh

実機でも、chmod u+x,go-rを実行すると-rwx------(所有者に実行を足し、グループ・その他から読みを外した状態)になりました。記号指定は「u/g/o/a(誰に)」+「+/-(足す/外す)」+「r/w/x(何を)」の組み合わせです。数値指定が「全体を一括で設定」なのに対し、記号指定は「今の状態に対して一部だけ変更」できるのが利点です。chmod +xだけは丸暗記でよいほど頻出します。

実行権限がないとPermission denied

パーミッションの効果を実際に見てみます。実行権限(x)が無いスクリプトは、実行しようとするとPermission deniedになります。

実行権限の効果
# スクリプトを作成(作成直後は rw-r--r-- で x が無い)
echo '#!/bin/bash
echo hello' > run.sh

./run.sh
# bash: ./run.sh: Permission denied  ← 実行権限が無い

# 実行権限を付けると動く
chmod +x run.sh
./run.sh
# hello
Permission deniedの多くは実行権限の不足

実機で確認したところ、作成直後のスクリプト(-rw-r--r--・実行権限なし)を./run.shで実行するとPermission deniedになり、chmod +x run.shを実行したあとはhelloと正常に動きました。「ダウンロードしたスクリプトが動かない」「自作のシェルスクリプトが実行できない」というときは、まずls -lxが付いているかを確認してください。また、読み取り権限の効果も非rootユーザーで確認しました。chmod 600(所有者のみ読み書き)にしたrootのファイルを別のユーザーがcatするとPermission deniedになり、644に変えると読めるようになりました。なお、rootユーザーは読み書きの権限チェックをほぼ受けないため、rootで作業していると権限ミスに気づきにくい点にも注意してください(実行権限だけは、xが1つも無いとrootでも拒否されます)。

ディレクトリの権限と-R(再帰)

ディレクトリの場合、xは「実行」ではなく「中に入れるか(cdできるか)」を意味します。rは一覧表示(ls)、wはファイルの作成・削除です。ディレクトリごとまとめて変更するには-Rを付けます。

ディレクトリと -R
# ディレクトリの権限の意味
# r … 中のファイル一覧を見られる(ls)
# w … 中にファイルを作成・削除できる
# x … 中に入れる(cd)・中のファイルにアクセスできる

# ディレクトリ以下すべてを再帰的に変更
chmod -R 700 private_dir

# ファイルとディレクトリを分けて設定したいときは find と組み合わせる
find . -type d -exec chmod 755 {} \;   # ディレクトリは755
find . -type f -exec chmod 644 {} \;   # ファイルは644

実機でも、chmod -R 700 dを実行すると、サブディレクトリの中のファイルまで-rwx------に変わりました。-Rはディレクトリ以下のすべてに同じ権限を適用します。ただし、ファイルとディレクトリで適切な権限は違う(ディレクトリにはxが必要、ファイルには通常不要)ため、Web公開用などではfind-type-execを組み合わせて「ディレクトリは755・ファイルは644」と分けて設定するのが定番です。

数値とrwxの対応一覧

よく使うパーミッションをまとめます。

数値 表示 用途の目安
755 rwxr-xr-x スクリプト・公開ディレクトリ
644 rw-r--r-- 通常のファイル(HTML・画像など)
700 rwx------ 自分専用のディレクトリ
600 rw------- 秘密鍵・パスワード入り設定
777 rwxrwxrwx 誰でも全部(危険・原則使わない)

よくある失敗

スクリプトがPermission deniedで動かない

実行権限がありません。chmod +x スクリプトを実行します。

数値の桁の意味を取り違える

3桁は左から「所有者・グループ・その他」です。754なら他人は読みのみです。

とりあえず777にする

誰でも書き換えられる危険な状態です。755644など必要最小限にします。

ディレクトリからxを外して入れなくなる

ディレクトリのxは「中に入る」権限です。外すとcdもファイルアクセスもできません。

-Rでファイルにも755を付けてしまう

ファイルに実行権限は通常不要です。find -type f/dで分けて設定します。

よくある質問

Qchmod 755とはどういう意味ですか?
Ar=4・w=2・x=1の足し算で、3桁が「所有者・グループ・その他」に対応します。755は所有者が7(rwx=全部)、グループとその他が5(r-x=読みと実行)で、表示はrwxr-xr-xです。スクリプトや公開ディレクトリの定番の設定です。
QPermission deniedと表示されて実行できません。
A実行権限(x)が無いことがほとんどです。ls -lで確認し、chmod +x ファイル名で実行権限を付けてください。実機でも、xの無いスクリプトはPermission deniedになり、chmod +x後に正常に動くことを確認しています。
Q644と755はどう使い分けますか?
A通常のファイル(テキスト・HTML・画像など)は644(rw-r–r–)、実行するスクリプトや、中に入る必要のあるディレクトリは755(rwxr-xr-x)が基本です。Web公開でも「ディレクトリ755・ファイル644」が定番の組み合わせです。
Qディレクトリのxは何の権限ですか?
Aディレクトリのxは「中に入れるか(cdできるか)・中のファイルにアクセスできるか」を表します。rは一覧表示(ls)、wは中のファイルの作成・削除です。ディレクトリからxを外すと、中のファイルにアクセスできなくなるので注意してください。
Qフォルダごと権限を変えるには?
Achmod -R 数値 ディレクトリで、中のすべてに再帰的に適用されます。ただしファイルとディレクトリで適切な権限は違うため、find . -type d -exec chmod 755 {} \;find . -type f -exec chmod 644 {} \;のように分けて設定するのが確実です。

まとめ

  • 権限はls -lで確認。rwxr-xr-x所有者/グループ/その他の3組です。
  • 数値はr=4・w=2・x=1の足し算755644600が定番です。
  • スクリプトの実行可にはchmod +xxが無いとPermission deniedです。
  • ディレクトリのxは「中に入る」権限。-Rで再帰変更できます。
  • 777は危険。必要最小限の権限にするのが基本です。

パーミッションは、Linuxのセキュリティの土台です。「r=4・w=2・x=1」「3桁は所有者・グループ・その他」というルールさえ覚えれば、755644も自分で計算できます。Permission deniedに出会ったら、まずls -lで権限を確認する習慣をつけましょう。