chmod(change mode)とは、Linux・macOS などの Unix 系 OS でファイルやディレクトリのアクセス権限(パーミッション)を変更するコマンドです。「誰が・何を・できるか」を制御し、システムのセキュリティと運用管理の要となります。
実務では、シェルスクリプトへの実行権限付与や、Webサーバーのファイル権限設定など、日常的に使用されます。
chmod とは:パーミッションの仕組み
Linux のパーミッションは 所有者(user)・グループ(group)・その他(others) の3区分で管理され、それぞれに 読み取り(r=4)・書き込み(w=2)・実行(x=1) の権限が設定されています。
$ ls -l script.sh
-rwxr-xr-x 1 user group 1234 Jun 8 10:00 script.sh
|||└──── その他: r-x(読み取り・実行)
||└───── グループ: r-x(読み取り・実行)
|└────── 所有者: rwx(読み取り・書き込み・実行)
└─────── ファイル種別: -(通常ファイル)、d(ディレクトリ)
構文(Syntax)
chmod [オプション] モード ファイル...
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
| (なし) | 権限を変更 | chmod 644 file.txt |
-R | ディレクトリ以下を再帰的に変更 | chmod -R 755 /var/www/html |
-c | 変更があった場合のみ報告 | chmod -c 644 file.txt |
-v | 詳細な情報を表示 | chmod -v 755 script.sh |
--reference=FILE | 参照ファイルと同じ権限に設定 | chmod --reference=ref.txt target.txt |
モードの指定方法
数値(8進数)指定
r(読み取り) = 4w(書き込み) = 2x(実行) = 1
所有者 / グループ / その他 の順で指定。
例: chmod 754 file.txt
- 所有者:
7(rwx = 4+2+1) - グループ:
5(r-x = 4+1) - その他:
4(r– = 4)
記号指定
u: 所有者g: グループo: その他a: 全員
演算子:
+: 権限を追加-: 権限を削除=: 権限を上書き
例:
chmod u+x script.sh→ 所有者に実行権限を付与chmod go-r file.txt→ グループ・その他から読み取り権限を削除chmod a=r file.txt→ 全員の権限を読み取り専用に設定
頻出パターン早見表
実務で頻繁に使う chmod の数値パターンを一覧にまとめました。迷ったときはこの表をすぐに参照してください。
| コマンド | パーミッション | 所有者 | グループ | その他 | 主な用途 |
|---|---|---|---|---|---|
chmod 755 | rwxr-xr-x | 読み書き実行 | 読み・実行 | 読み・実行 | 実行ファイル・公開ディレクトリ |
chmod 644 | rw-r–r– | 読み書き | 読み取り | 読み取り | 一般ファイル・設定ファイル |
chmod 700 | rwx—— | 全権限 | なし | なし | 秘密鍵・個人スクリプト |
chmod 600 | rw——- | 読み書き | なし | なし | SSH秘密鍵・パスワードファイル |
chmod 400 | r——– | 読み取り | なし | なし | AWS PEMキー・変更禁止ファイル |
chmod 664 | rw-rw-r– | 読み書き | 読み書き | 読み取り | グループ共同編集ファイル |
chmod 775 | rwxrwxr-x | 全権限 | 全権限 | 読み・実行 | グループ共同開発ディレクトリ |
chmod 777 | rwxrwxrwx | 全権限 | 全権限 | 全権限 | ※非推奨(セキュリティリスク大) |
実行例
ファイルに実行権限を付与
chmod +x script.sh
数値で権限を変更
chmod 644 file.txt
(所有者: 読み書き、グループとその他: 読み取りのみ)
ディレクトリ配下を一括変更
chmod -R 755 /var/www/html
(所有者: 読み書き実行、グループとその他: 読み実行)
所有者にのみ実行権限を付与
chmod u+x script.sh
参照ファイルと同じ権限を適用
chmod --reference=ref.txt target.txt
エラー例(存在しないファイル)
chmod 644 missing.txt
出力例:
chmod: cannot access 'missing.txt': No such file or directory
よくある実務ケース
シェルスクリプトへの実行権限付与
作成したシェルスクリプトは初期状態では実行権限がありません。chmod +x で実行可能にしてから実行します。
# スクリプトを作成
cat > deploy.sh << 'EOF'
#!/bin/bash
echo "Deploying..."
EOF
# 実行権限を付与(所有者・グループ・その他すべてに)
chmod +x deploy.sh
# 所有者にのみ実行権限を与えたい場合
chmod 700 deploy.sh
# 実行
./deploy.sh
実行権限がない状態で実行しようとすると Permission denied エラーが発生します。
Webサーバーのパーミッション設定
Nginx / Apache でのWebサーバー運用では、セキュリティを維持しながら適切な権限を設定することが重要です。一般的な推奨設定は以下の通りです。
# ディレクトリ: 755(所有者は全権限、グループ・その他は読み・実行)
chmod -R 755 /var/www/html
# HTMLファイル: 644(所有者は読み書き、グループ・その他は読み取り)
find /var/www/html -type f -name "*.html" -exec chmod 644 {} \;
# PHPファイル: 644
find /var/www/html -type f -name "*.php" -exec chmod 644 {} \;
# ファイルとディレクトリを分けて一括設定する場合
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
Webサーバーのプロセスユーザー(www-data / nginx など)がファイルを読めるように、グループ権限の読み取り(r)は必ず付けておきます。設定ファイルや .env など秘密情報を含むファイルは chmod 600 で保護してください。
SSHキーのパーミッション設定
SSH 秘密鍵は権限が広すぎると接続が拒否されます。適切な権限を設定しておきましょう。
# .ssh ディレクトリ: 700(所有者のみアクセス可)
chmod 700 ~/.ssh
# SSH秘密鍵: 600(所有者のみ読み書き)
chmod 600 ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_ed25519
# SSH公開鍵: 644
chmod 644 ~/.ssh/id_rsa.pub
# authorized_keys: 600
chmod 600 ~/.ssh/authorized_keys
パーミッションが緩い場合、SSH接続時に WARNING: UNPROTECTED PRIVATE KEY FILE! と警告が表示され、接続に失敗します。
設定ファイルのセキュリティ保護
パスワードや API キーを含む設定ファイルは、所有者のみ読み書き可能にしてセキュリティを確保します。
# 設定ファイル(パスワード・APIキー含む): 600
chmod 600 .env
chmod 600 config/database.yml
# 読み取り専用にして誤編集を防ぐ: 400
chmod 400 /etc/important-config.conf
# AWS PEMキー(EC2接続用): 400
chmod 400 my-key-pair.pem
ls -l でパーミッションを確認する
chmod で変更した結果は ls -l コマンドで確認できます。
$ ls -l
-rw-r--r-- 1 user group 100 Jun 8 10:00 config.txt # 644
-rwxr-xr-x 1 user group 200 Jun 8 10:00 deploy.sh # 755
-rw------- 1 user group 1679 Jun 8 10:00 id_rsa # 600
drwxr-xr-x 2 user group 4096 Jun 8 10:00 public_html/ # 755(ディレクトリ)
先頭の文字(- または d)はファイル種別(-: 通常ファイル、d: ディレクトリ)を示し、続く9文字がパーミッションを3文字ずつ所有者・グループ・その他の順で表しています。
関連コマンド
chown: ファイルやディレクトリの所有者・グループを変更chgrp: グループ所有権を変更ls -l: ファイルのパーミッションを確認
備考
- 実行権限を付与しないとシェルスクリプトやバイナリは直接実行できません。
- ディレクトリの場合、
x権限は「ディレクトリに移動できる(cd できる)」ことを意味します。 chmod -Rを不用意に使うとセキュリティ事故につながる可能性があるため注意が必要です。chmod 777はすべてのユーザーに全権限を与えるため、本番環境での使用は避けてください。
参考
- manページ: man7.org chmod(1)
- GNU Coreutils: https://www.gnu.org/software/coreutils/

コメント