サーバーにファイルをアップロードしたら「Permission denied(権限がありません)」と言われた、シェルスクリプトを実行しようとしたら動かない——こうした場面で必要になるのが chmod コマンドです。chmod は、ファイルやディレクトリのパーミッション(アクセス権限)を変更するコマンドです。誰が読み・書き・実行できるかを設定でき、Web サーバーの運用では欠かせません。この記事では、パーミッションの読み方から、755 のような数字での指定、+x のような記号での指定、つまずきやすい点までを初心者の方にも分かるように解説します。
目次
パーミッションとは
Linux では、すべてのファイルとディレクトリに「誰が何をできるか」という権限が設定されています。権限は対象の種類と操作の種類の組み合わせで決まります。対象は3つ、操作も3つです。
| 対象 | 意味 |
|---|---|
| 所有者(user) | ファイルの持ち主 |
| グループ(group) | 所有グループに属するユーザー |
| その他(other) | 上記以外のすべてのユーザー |
| 操作 | 記号 | 意味 |
|---|---|---|
| 読み取り | r(read) | 内容を見る |
| 書き込み | w(write) | 内容を変更する |
| 実行 | x(execute) | プログラムとして実行する/ディレクトリに入る |
ls -l でパーミッションを確認する
現在のパーミッションは ls -l コマンドで確認できます。行の先頭に表示される -rwxr-xr-x のような10文字が、そのファイルの権限を表しています。
ls -l
# -rwxr-xr-x 1 user group 1024 May 10 12:00 script.sh
先頭の -rwxr-xr-x は、左から順に意味が決まっています。最初の1文字はファイルの種類(- は通常ファイル、d はディレクトリ)です。残りの9文字を3文字ずつ区切ると、所有者・グループ・その他の権限になります。
| 区切り | 意味 |
|---|---|
rwx(2〜4文字目) | 所有者の権限(読み・書き・実行すべて可) |
r-x(5〜7文字目) | グループの権限(読み・実行のみ) |
r-x(8〜10文字目) | その他の権限(読み・実行のみ) |
- はその権限がないことを表します。つまり r-x は「読みと実行はできるが、書き込みはできない」という意味です。
数字でパーミッションを指定する
chmod でよく使われるのが、755 や 644 のような3桁の数字での指定です。これは、読み・書き・実行それぞれに数字を割り当て、合計した値で表します。
| 権限 | 数字 |
|---|---|
| 読み取り(r) | 4 |
| 書き込み(w) | 2 |
| 実行(x) | 1 |
たとえば「読み・書き・実行すべて可」なら 4 + 2 + 1 = 7、「読みと実行のみ」なら 4 + 1 = 5 です。これを所有者・グループ・その他の順に3桁並べます。755 なら、所有者は 7(すべて可)、グループとその他は 5(読みと実行)という意味になります。
# 所有者は全権限、他は読み・実行のみ(rwxr-xr-x)
chmod 755 script.sh
# 所有者は読み書き、他は読みのみ(rw-r--r--)
chmod 644 index.html
Web サイトでは、ファイルは 644、ディレクトリは 755 が基本の設定としてよく使われます。ディレクトリに x(実行)が必要なのは、中に入る(アクセスする)ために実行権限が使われるためです。
記号でパーミッションを指定する
数字のほかに、記号を使って一部の権限だけを足し引きする書き方もあります。対象(u=所有者、g=グループ、o=その他、a=全部)と、操作(+=追加、-=削除、==指定だけにする)、権限(r/w/x)を組み合わせます。
# 所有者に実行権限を追加する
chmod u+x script.sh
# 全員に実行権限を追加する
chmod +x script.sh
# その他ユーザーの書き込み権限を削除する
chmod o-w secret.txt
# グループとその他から書き込みを外す
chmod go-w config.php
記号での指定は、現在の権限を活かしたまま一部だけ変えたいときに便利です。とくに、シェルスクリプトに実行権限を付ける chmod +x はよく使うので覚えておくとよいでしょう。一方、権限をまとめて決め直したいときは数字での指定が手軽です。
ディレクトリ内をまとめて変更する -R
-R(recursive=再帰的)オプションを付けると、指定したディレクトリの中身もすべてまとめて変更できます。多数のファイルを一度に設定したいときに便利です。
# uploads ディレクトリ以下をまとめて変更
chmod -R 755 uploads
-R は強力なぶん注意も必要です。ファイルとディレクトリに同じ権限を一括で付けてしまうため、たとえば chmod -R 755 をかけると、本来 644 でよいファイルにまで実行権限が付きます。範囲が広いときは、対象を確認してから慎重に実行しましょう。
権限の設定でつまずきやすい点
777 は安易に使わない
うまく動かないとき、つい chmod 777(全員が読み・書き・実行できる)にしてしまいがちですが、これは誰でもファイルを書き換えられる危険な状態です。とくに公開サーバーでは、不正なファイルを置かれる原因になりかねません。問題が権限なのかを切り分けるための一時的な確認にとどめ、原因が分かったら 755 や 644 など必要最小限の権限に戻してください。
Permission denied と出て変更できない
パーミッションを変更できるのは、原則としてそのファイルの所有者か管理者(root)だけです。自分が所有していないファイルに chmod を実行すると「Operation not permitted」などと表示されます。この場合は所有者を確認し、必要に応じて sudo を付けて実行するか、所有権の変更(chown)を検討します。
実行できるのにディレクトリに入れない
ディレクトリでは x(実行)が「中に入る権限」を意味します。読み取り権限(r)だけでは中のファイル一覧は見えても移動できません。ディレクトリにアクセスさせたいときは、読み取りだけでなく実行権限も付ける必要がある、と覚えておきましょう。
まとめ
chmod は、ファイルやディレクトリのアクセス権限を変更する基本コマンドです。要点を整理します。
- 権限は「所有者・グループ・その他」×「読み(r)・書き(w)・実行(x)」で決まる。
- 数字指定は r=4・w=2・x=1 の合計。
755=rwxr-xr-x、644=rw-r–r–。 - 記号指定は
u+xやgo-wのように一部だけ足し引きできる。 - Web では「ファイル644・ディレクトリ755」が基本。
chmod +xで実行権限を付与。 -Rで再帰的に変更できるが777の多用は危険。必要最小限にとどめる。
まずは ls -l で現在の権限を読めるようになることが第一歩です。そのうえで、644 と 755 という基本のパターンを押さえておけば、サーバー運用でのパーミッション設定にはほぼ対応できます。