chmod とは|パーミッション変更コマンドの使い方と数値一覧

コマンドリファレンス

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 (読み取り) = 4
  • w (書き込み) = 2
  • x (実行) = 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 755rwxr-xr-x読み書き実行読み・実行読み・実行実行ファイル・公開ディレクトリ
chmod 644rw-r–r–読み書き読み取り読み取り一般ファイル・設定ファイル
chmod 700rwx——全権限なしなし秘密鍵・個人スクリプト
chmod 600rw——-読み書きなしなしSSH秘密鍵・パスワードファイル
chmod 400r——–読み取りなしなしAWS PEMキー・変更禁止ファイル
chmod 664rw-rw-r–読み書き読み書き読み取りグループ共同編集ファイル
chmod 775rwxrwxr-x全権限全権限読み・実行グループ共同開発ディレクトリ
chmod 777rwxrwxrwx全権限全権限全権限※非推奨(セキュリティリスク大)

実行例

ファイルに実行権限を付与

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 はすべてのユーザーに全権限を与えるため、本番環境での使用は避けてください。

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント