権限の変更 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 の和。
| モード | 意味 | 用途 |
|---|---|---|
755 | rwxr-xr-x | 実行ファイル、ディレクトリの定番 |
644 | rw-r--r-- | 通常ファイル(テキスト、画像等) |
600 | rw------- | SSH 秘密鍵、秘密の設定ファイル |
700 | rwx------ | 自分専用ディレクトリ |
777 | rwxrwxrwx | 全開放(基本的に避ける) |
記号モード
誰に対して [+ - =] 何を [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 の処理イメージ
実例
ターミナル
$ 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.sh8 進数 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で記録しておく必要があります。本番では変更前にgetfaclやstatで記録するのが安全です。
演習でよく出る数値の暗記
初学者がつまずきやすいのは「結局 644 とか 755 って何なんだっけ」という記憶です。実は数字の意味を毎回計算するより、よく使うパターンだけ丸暗記してしまうのが現場では速いです。
| 数値 | 内訳 | 典型用途 |
|---|---|---|
400 | r-------- | 設定ファイルの読み取り専用、所有者だけ |
600 | rw------- | SSH 秘密鍵、.env ファイル |
644 | rw-r--r-- | HTML / CSS / JS など Web 配信ファイル |
664 | rw-rw-r-- | グループ共有編集する設定ファイル |
700 | rwx------ | 個人用作業ディレクトリ |
750 | rwxr-x--- | グループだけが入れるディレクトリ |
755 | rwxr-xr-x | 実行ファイル、公開ディレクトリ |
770 | rwxrwx--- | グループ共有書き込み可ディレクトリ |
失敗からの復元
ターミナル
# 権限変更前に記録(やっておくと事故時の救済になる)
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 つができることを確認しましょう。
- chmod コマンド の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. chmod コマンド とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン
課題
- chmod で 755 に変更する
- chmod で 644 に再変更する
- stat -c '%a' で権限の数値を確認する