概要
Linuxにおけるセキュリティ管理の基本となるコマンドで、ファイルやディレクトリに対する「誰が(所有者・グループ・その他)」「何をできるか(読み・書き・実行)」というアクセス権限(パーミッション)を設定します。
Webサーバーの公開設定や、シェルスクリプトを実行可能にする際など、日常的なサーバー操作で頻繁に使用します。
仕様(引数・オプション)
構文
chmod [オプション] 権限モード ファイル名
主な引数・オプション
| オプション | 説明 |
-R | 指定したディレクトリ以下の全ファイル・ディレクトリを再帰的に変更します(Recursive)。 |
-f | エラーメッセージ(権限不足で変更できない等)を表示しません(force)。 |
-c | 実際に変更が行われた場合のみ、詳細を表示します(changes)。 |
--reference=<ファイル> | 指定したファイルと同じ権限を適用します。 |
ファイルタイプ記号(ls -l の先頭文字)
権限を変更する前に、ls -l で表示される先頭の文字が何を表しているか理解しておくと便利です。
| 記号 | ファイルタイプ | 説明 |
- | 通常ファイル | テキストファイルやバイナリファイルなど。 |
d | ディレクトリ | フォルダ。 |
l | シンボリックリンク | 別のファイルへのショートカット。 |
c | キャラクターデバイス | 入出力機器(端末、マウスなど)。 |
s | ソケット | プロセス間通信用のファイル。 |
アクセス権限の記号
| 記号 | 読み方 | 意味(ファイル) | 意味(ディレクトリ) |
r | Read | 内容を読み取れる | ファイル一覧を表示できる(ls可能) |
w | Write | 内容を変更・上書きできる | ファイルを作成・削除できる |
x | Execute | プログラムとして実行できる | ディレクトリ内に移動できる(cd可能) |
権限の数値表記(モードビット)
権限は3桁の8進数(例: 755, 644)で指定することが一般的です。以下の数値を足し合わせて計算します。
| 記号表記 | 2進数 | 数値(8進数) | 意味 |
--- | 000 | 0 | 権限なし |
--x | 001 | 1 | 実行のみ |
-w- | 010 | 2 | 書き込みのみ |
-wx | 011 | 3 | 書き込み + 実行 |
r-- | 100 | 4 | 読み取りのみ |
r-x | 101 | 5 | 読み取り + 実行 |
rw- | 110 | 6 | 読み取り + 書き込み |
rwx | 111 | 7 | 全権限(フルアクセス) |
基本の使い方
権限を指定してファイルを変更する最も基本的な例です。
コマンド
# 所有者(6=rw) グループ(4=r) その他(4=r) に設定
chmod 644 sample.txt
# 確認
ls -l sample.txt
実行結果
-rw-r--r-- 1 user user 0 Jan 20 10:00 sample.txt
実践コマンド
自分だけが読み書きできるようにする(機密ファイル)
他のユーザーからのアクセスを完全に遮断し、所有者のみが読み書きできるようにします。SSHの秘密鍵設定などで必須です。
# 所有者のみ読み書き可能(4+2=6)、その他は不可(0)
chmod 600 secret_key.pem
# さらに厳しく、読み取り専用にする場合(400)
chmod 400 private_memo.txt
-rw------- 1 user user 1024 Jan 20 10:05 secret_key.pem
-r-------- 1 user user 512 Jan 20 10:05 private_memo.txt
シェルスクリプトに実行権限を付与する
作成したスクリプトを実行するには、x(実行権限)を与える必要があります。数値指定(755)と記号指定(+x)の2パターンがあります。
# パターン1: 数値で指定(所有者は全権限、他は読み・実行のみ)
chmod 755 deploy_script.sh
# パターン2: 記号で指定(現在の権限に実行権限を追加)
chmod +x deploy_script.sh
# 実行
./deploy_script.sh
-rwxr-xr-x 1 user user 128 Jan 20 10:10 deploy_script.sh
グループ単位で権限を追加・変更する
特定のグループメンバーに対して、読み取りと実行権限を付与する場合などに使用します。記号表記(u=user, g=group, o=other)を使うと直感的です。
# グループ(g)に、読み取り(r)と実行(x)権限を追加(+)
chmod g+rx /var/www/cgi-bin/app.cgi
# グループ(g)とその他(o)から、書き込み権限(w)を削除(-)
chmod go-w shared_doc.txt
ディレクトリごと再帰的に変更する
Web公開ディレクトリなど、フォルダの中身も含めて一括で設定を変更する場合に使用します。
# htmlディレクトリ以下の全ファイルに対し、グループに読み取り権限(r)を追加
chmod -R g+r /var/www/html/
カスタムポイント
- 数値か記号か: 設定全体を「正解の状態」に固定したい場合は数値(例:
755)が便利です。現状の権限を維持しつつ「実行権限だけ足したい」場合は記号(例:+x)が安全です。 - ディレクトリの権限: ディレクトリの中を見る(
ls)には読み取り権限rが必要ですが、中に入る(cd)には実行権限xが必要です。通常、ディレクトリには755や700を設定します。
注意点
- chmod -R 777 の禁止:権限トラブルの解決策として「とりあえず777(誰でも読み書き実行可能)」にするのは極めて危険です。Webサイトの改ざんや、システム乗っ取りの直接的な原因となります。必要最小限の権限(例: 755や644)を心がけてください。
- 所有権の問題:自分以外のユーザーが所有しているファイルの権限は変更できません。その場合は sudo を使用する必要があります。
- 実行権限の適用範囲:-R オプションで chmod -R 755 dir/ とすると、中のテキストファイルまで「実行可能」になってしまいます。ファイルは644、ディレクトリは755にするのが一般的です(応用参照)。
応用
ディレクトリとファイルで異なる権限を一括設定する
find コマンドと組み合わせることで、「ディレクトリは755、ファイルは644」という適切な権限設定を再帰的に行います。最も実用的なテクニックです。
# ディレクトリのみ 755 に設定
find /var/www/html -type d -exec chmod 755 {} \;
# ファイルのみ 644 に設定
find /var/www/html -type f -exec chmod 644 {} \;
まとめ
chmodコマンドは、Linux環境におけるデータの安全性とプログラムの動作を制御する極めて重要なツールです。適切なパーミッション設定は、不正アクセスを防ぐ盾となる一方で、設定を誤ればシステムエラーやセキュリティホールの原因となります。サーバー構築やスクリプト作成の際は、数値表記(755, 644)と記号表記(+x, g+w)のそれぞれの特性を理解し、対象となるファイルやディレクトリの用途に合わせて最小限の権限を付与するよう心がけることが重要です。
