権限の変更 chmod

権限の変更 chmod とは

chmodコマンドで、ファイルやディレクトリの権限を変更する方法を理解し、実践します。本レッスンでは、権限の変更 chmod の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

なぜ重要か

chmod は「change mode」の略で、ファイルやディレクトリのパーミッションを変更するコマンドです。デプロイした SSH 鍵ファイルが Permissions are too open でエラーになる、シェルスクリプトが Permission denied で実行できない、Web サーバーがアップロードフォルダに書き込めない。こうした現場でほぼ毎日打つコマンドです。前のレッスンで読み方を学んだ 10 文字を、自分で書き換えられるようになるのがゴールです。

構文

ターミナル

chmod [モード] ファイル

モードの指定方法には 8 進数記号 の 2 通りがあります。

8 進数モード

3 桁の数字で所有者・グループ・その他をまとめて指定します。各桁は r=4 / w=2 / x=1 の和。

モード意味用途
755rwxr-xr-x実行ファイル、ディレクトリの定番
644rw-r--r--通常ファイル(テキスト、画像等)
600rw-------SSH 秘密鍵、秘密の設定ファイル
700rwx------自分専用ディレクトリ
777rwxrwxrwx全開放(基本的に避ける)

記号モード

誰に対して [+ - =] 何を [r w x] するかを指定します。

対象記号
所有者 (user)u
グループ (group)g
その他 (other)o
全員 (all)a

ターミナル

chmod u+x script.sh # 所有者に実行権限を追加 chmod g-w report.txt # グループから書き込み権限を削除 chmod o=r data.csv # その他は読み取りのみに固定 chmod a+r README.md # 全員に読み取り権限を付与

chmod の処理イメージ

diagram (will load when visible)

実例

ターミナル

$ touch app.sh $ ls -l app.sh -rw-r--r-- 1 user user 0 May 20 12:00 app.sh $ chmod 755 app.sh $ ls -l app.sh -rwxr-xr-x 1 user user 0 May 20 12:00 app.sh

8 進数 755 を指定したことで、所有者は rwx、グループとその他は rx になりました。これで ./app.sh として実行できます。

ディレクトリへの再帰適用

ターミナル

chmod -R 755 /srv/app

-R でディレクトリ配下のファイルすべてに同じ権限を再帰適用します。ただしファイルとディレクトリで必要な権限は違うので、無差別に 755 を適用するのは推奨されません。ファイルだけ 644、ディレクトリだけ 755 にしたい場合は find と組み合わせます。

ターミナル

find /srv/app -type f -exec chmod 644 {} \; find /srv/app -type d -exec chmod 755 {} \;

SSH 秘密鍵 ~/.ssh/id_rsa は必ず 600 にしてください。644 以上の権限だと「他人に見られる場所に鍵を置いている」と判断されて SSH 接続が拒否されます。

umask の存在

新しく作るファイルのデフォルト権限は umask で決まります。一般的なシステムでは 022 で、結果として通常ファイルは 644、ディレクトリは 755 で作られます。umask を変えると新規ファイルの権限も連動して変わります。

chmod は「現状を直接書き換える」コマンドです。元に戻すには、元の値を覚えておくか、stat で記録しておく必要があります。本番では変更前に getfaclstat で記録するのが安全です。

演習でよく出る数値の暗記

初学者がつまずきやすいのは「結局 644 とか 755 って何なんだっけ」という記憶です。実は数字の意味を毎回計算するより、よく使うパターンだけ丸暗記してしまうのが現場では速いです。

数値内訳典型用途
400r--------設定ファイルの読み取り専用、所有者だけ
600rw-------SSH 秘密鍵、.env ファイル
644rw-r--r--HTML / CSS / JS など Web 配信ファイル
664rw-rw-r--グループ共有編集する設定ファイル
700rwx------個人用作業ディレクトリ
750rwxr-x---グループだけが入れるディレクトリ
755rwxr-xr-x実行ファイル、公開ディレクトリ
770rwxrwx---グループ共有書き込み可ディレクトリ

失敗からの復元

ターミナル

# 権限変更前に記録(やっておくと事故時の救済になる) stat -c '%a %n' file.txt > /tmp/perms.log # やらかしたら getfacl でバックアップを取る習慣を getfacl -R /etc > /tmp/etc-acl-backup.txt

chmod -R 777 / のような事故を起こすと、SSH 鍵の権限が緩むので SSH が拒否される、systemd が起動失敗するなど復旧不能になります。本番では find で対象を絞ってからの -exec か、ansible / chef のような構成管理ツールで確実に書く方が安全です。

まとめ

  • chmod で権限変更、8 進数記号 の 2 通り
  • ファイル 644、ディレクトリ 755、SSH 鍵 600 が定番
  • -R で再帰、find -exec で型別の使い分け
  • chmod 777 は緊急時以外封印
  • 主要パターンは丸暗記しておくと現場で速い
  • 大規模変更前は stat でバックアップを取る習慣を持つ

次のレッスン

次は 所有者の変更 chown で、chmodコマンドで、ファイルやディレクトリの権限を変更する方法を理解し、実践します を学びます。

事前確認 — 進む前に次の 3 つができることを確認しましょう。

  1. chmod コマンド の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. chmod コマンド とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

課題

  1. chmod で 755 に変更する
  2. chmod で 644 に再変更する
  3. stat -c '%a' で権限の数値を確認する

ヒント

script.sh
script.sh
学習モード
script.sh
ターミナル出力