本文へスキップ
BecomeCoder
ブログ一覧Wikiコース一覧

chmod 755の意味とは|Linuxパーミッションの読み方とPermission denied対処

#Linux#パーミッション#chmod#権限#初心者

結論:chmod 755 は「所有者に読み・書き・実行(7)、グループとその他に読み・実行(5)」という意味です。数字は r=4 w=2 x=1 の足し算でできています。 そして Permission denied は、id(自分は誰か)と ls -l(対象は誰のもので、どんな許可が付いているか)の2つを突き合わせれば、ほとんどの場合その場で原因が特定できます。

パーミッションは「3人 × 3つの許可」の表

Linuxのファイルには、誰が・何をしていいかが必ず記録されています。ls -l を実行すると、各行の先頭に -rw-r--r-- のような10文字が出てきます。これがパーミッション(権限)です。

-  rw-  r--  r--
│   │    │    └ その他の人(other)
│   │    └───── グループ(group)
│   └────────── 所有者(user)
└────────────── 種類(- はファイル、d はディレクトリ)

先頭1文字は種類で、- なら通常のファイル、d ならディレクトリです。残りの9文字を3文字ずつ区切ると、所有者/グループ/その他という3つの立場に対応します。それぞれの3文字は次の意味です。

つまり -rw-r--r-- は「ファイルで、所有者は読み書きでき、グループとその他は読むだけ」。-rwxr-xr-x は「所有者は何でも、他の人は読みと実行だけ」という表です。

この「3人」が誰を指すかは、ユーザーとグループの仕組みを知っていると腹落ちします。サーバーは複数人・複数プログラムで共有するものなので、user(あなた)、www-data(Webサーバーが使うユーザー)のように立場が分かれています。この前提は 「ユーザー・グループ・root ― サーバーは複数人で使う」 で図解しています。

実際に ls -l の出力を読んでみるところは 「ls -l ― 権限を読む」 で、ブラウザ内のシミュレートシェルにそのまま打ち込んで確認できます。環境構築もサーバーの契約も不要で、無料・登録不要です。

数字表記(755・644)はどう作られるか

rwx の文字表記と並んで、chmod 755 のような数字(8進数)表記が使われます。これは暗号ではなく、単純な足し算です。

許可数字
r(読み)4
w(書き)2
x(実行)1

3つの立場それぞれについて、許可したいものを足して1桁にします。それを「所有者・グループ・その他」の順に3桁並べたのが 755 です。

同じ計算で 644 を分解すると、6 = 4+2 = rw-、4 = r--、4 = r-- となり、-rw-r--r-- になります。よく見る2つはこう覚えると実務では十分です。

数字を覚えるより、r=4 / w=2 / x=1 の足し算だけ覚えるほうが応用が利きます。chmod +x(実行権だけ足す)と chmod 644(まとめて指定する)の両方の書き方は 「chmod ― 権限を変える」 で、ls -l の表示が変わる瞬間を見ながら試せます。権限を変えて、その場で結果を確認できるので、数字の意味が記憶に残ります。

ディレクトリの x は「実行」ではなく「通り抜け」

ここが初心者のいちばんの混乱ポイントです。ディレクトリにも rwx が付きますが、意味がファイルとは違います。

だからディレクトリは 755 が基本です。x が無いディレクトリは、中身のファイルにいくら r が付いていても辿り着けません。「ファイル自体は読める権限なのに開けない」というときは、途中のディレクトリの x を疑ってください。

逆に、ディレクトリの w は思ったより強力です。ファイルを消せるかどうかはファイル自身の権限ではなく、そのファイルが置かれているディレクトリの w で決まります。読み取り専用のファイルでも、置き場所に書き込み権があれば削除できてしまう——これは知らないと事故のもとです。

Permission denied が出たときの確認手順

エラーメッセージが出たら、闇雲に sudo を付ける前に、次の順で確認します。4ステップで9割は原因が分かります。

1. 自分が誰かを確認する

whoami
id

id は uid=1000(user) gid=1000(user) groups=1000(user),27(sudo) のように、自分のユーザー名と所属グループを教えてくれます。「自分は sudo グループに入っているのか」もここで分かります。

2. 対象の権限と持ち主を確認する

ls -l 対象のファイル

10文字のパーミッションに加えて、所有者名とグループ名が表示されます。ステップ1と見比べて、自分がその3つの立場のどれに当たるかを確定させます。所有者でもグループの一員でもなければ、あなたに適用されるのは一番右のブロック(その他)です。

3. スクリプトなら実行権(x)があるか見る

./script.sh と打って 許可がありません と言われる場合、原因はほぼこれです。作ったばかりのファイルには実行権が付いていません。

chmod +x script.sh
ls -l script.sh
./script.sh

なお sh script.sh なら実行権がなくても動きます。前者はファイル自身をプログラムとして起動しているのに対し、後者は sh というプログラムがファイルを読んでいるだけだからです。この違いは 「シバンと実行権限 ― ./script.sh で動かす」 で、わざとエラーを出してから直す流れとして体験できます。

4. 本当に管理者権限が必要な操作かを考える

/etc 以下の設定ファイルやサービスの操作は、そもそも一般ユーザーには許されていません。この場合だけ sudo を使います。su(root に切り替わってそのまま居座る)と sudo(その1コマンドだけ管理者として実行する)の違いと使い分けは 「su と sudo ― 管理者権限を安全に借りる」 で、プロンプトが $ から # に変わる様子を見ながら確認できます。サーバー運用側の視点では 「sudoと権限 ― 管理者権限を安全に借りる」 でも扱っています。

この4ステップを踏まずに sudo を連打すると、「権限で弾かれた本当の理由」が見えないまま、あとで別の形で問題が再発します。エラーメッセージの読み方全般については エラーメッセージの読み方 もあわせてどうぞ。

chmod 777 を安易に使うべきでない理由

検索すると「とりあえず chmod 777 で動く」という書き込みが見つかります。実際、777 は「全員に読み書き実行を許可」なので、たいていの Permission denied は消えます。しかし、これは鍵を壊してドアを開けっぱなしにする行為です。

具体的に何が問題か。

正しい対処は、必要最小限の権限だけを与えることです(最小権限の原則)。多くの場合は次のどちらかで解決します。

「動けばいい」で 777 を選ぶ癖がつくと、チーム開発や本番サーバーで確実に指摘されます。逆に、ls -l と id で理由を説明できる人は、それだけで信頼されます。

権限が分かると、自動化まで一直線

パーミッションの理解は、シェルスクリプトの世界への入場券でもあります。「スクリプトを書く → chmod +x する → ./script.sh で動かす → cron に登録して定期実行する」という流れの、最初の関門が権限だからです。

書いたスクリプトを動かす具体的な手順は シェルスクリプトコース の第1章で扱っています。エディタと端末が並んだ2画面構成で、権限を付ける操作もその場で試せます。

次に読む

← ブログ一覧に戻る