Linux chmodコマンド入門
ファイルのアクセス権限を変更する
chmodコマンドでファイルの読み取り・書き込み・実行権限を変更する方法を数値モードとシンボリックモードで解説します。
こんな人向けの記事です
- Linuxのファイル権限の仕組みを理解したい方
- スクリプトに実行権限を付与する方法を知りたい方
- Webサーバーやアプリの権限設定を適切に行いたい方
Step 1権限の基本概念
Linuxのファイル権限は「所有者」「グループ」「その他」の3つのカテゴリに対して「読み取り(r)」「書き込み(w)」「実行(x)」の3種類があります。
ターミナル
# 権限を確認
ls -l file.txt
# 出力例: -rw-r--r-- 1 user group 1024 Mar 14 file.txt
# ↑↑↑↑↑↑↑↑↑
# │├┤├┤├┤
# │ │ │ └── その他: r-- (読み取りのみ)
# │ │ └──── グループ: r-- (読み取りのみ)
# │ └────── 所有者: rw- (読み書き)
# └──────── ファイルタイプ: - (通常ファイル)
| 記号 | 数値 | 説明 |
|---|---|---|
r | 4 | 読み取り(ファイル内容の閲覧) |
w | 2 | 書き込み(ファイル内容の変更) |
x | 1 | 実行(プログラムとして実行) |
- | 0 | 権限なし |
Step 2数値モード(8進数)で変更する
3桁の数字で「所有者」「グループ」「その他」の権限をまとめて指定します。各桁はr(4)+w(2)+x(1)の合計値です。
ターミナル
# 基本的な数値モード
chmod 755 script.sh # rwxr-xr-x(所有者:全権限、他:読み+実行)
chmod 644 file.txt # rw-r--r--(所有者:読み書き、他:読みのみ)
chmod 600 secret.key # rw-------(所有者のみ読み書き)
chmod 777 public.txt # rwxrwxrwx(全員に全権限)
chmod 700 private_dir/ # rwx------(所有者のみ全権限)
# よく使う権限パターン
# 755: 実行可能スクリプト
# 644: 一般的なファイル
# 600: 秘密鍵・設定ファイル
# 700: プライベートディレクトリ
数値の計算方法: r=4, w=2, x=1の合計。例えば755は所有者7(4+2+1=rwx)、グループ5(4+0+1=r-x)、その他5(4+0+1=r-x)です。
Step 3シンボリックモードで変更する
記号を使って直感的に権限を変更する方法です。部分的な変更に適しています。
ターミナル
# 実行権限を追加
chmod +x script.sh # 全員に実行権限を追加
chmod u+x script.sh # 所有者のみ実行権限を追加
# 書き込み権限を削除
chmod go-w file.txt # グループとその他から書き込み削除
# 権限を設定(=で上書き)
chmod u=rwx,go=rx script.sh # 所有者:rwx、他:rx
# 対象の指定
# u: 所有者(user) g: グループ(group)
# o: その他(other) a: 全員(all)
| 操作 | 説明 | 例 |
|---|---|---|
+ | 権限を追加 | chmod +x file |
- | 権限を削除 | chmod -w file |
= | 権限を設定(上書き) | chmod u=rwx file |
u | 所有者 | chmod u+x file |
g | グループ | chmod g+w file |
o | その他 | chmod o-x file |
a | 全員 | chmod a+r file |
Step 4よく使うオプション一覧
chmodコマンドの主要なオプションを紹介します。
ターミナル
# ディレクトリ内を再帰的に変更
chmod -R 755 /var/www/html/
# 変更内容を詳細表示
chmod -v 644 file.txt
# 変更があった場合のみ表示
chmod -c 755 script.sh
| オプション | 説明 |
|---|---|
-R | ディレクトリ内を再帰的に変更 |
-v | 変更内容を詳細表示 |
-c | 変更があった場合のみ表示 |
--reference=FILE | 参照ファイルと同じ権限に設定 |
Step 5実践的な使用例
Webサーバー設定やスクリプト管理での実践例を紹介します。
ターミナル
# シェルスクリプトに実行権限を付与
chmod +x deploy.sh
# SSH鍵の権限設定(必須)
chmod 600 ~/.ssh/id_rsa # 秘密鍵
chmod 644 ~/.ssh/id_rsa.pub # 公開鍵
chmod 700 ~/.ssh/ # .sshディレクトリ
# Webサーバーの権限設定
chmod -R 755 /var/www/html/ # ドキュメントルート
chmod 644 /var/www/html/*.html # HTMLファイル
# ディレクトリとファイルで異なる権限を設定
find /var/www -type d -exec chmod 755 {} +
find /var/www -type f -exec chmod 644 {} +
# 設定ファイルの保護
chmod 600 .env
chmod 600 config/database.yml
注意: chmod 777は全員に全権限を与えるため、セキュリティリスクが高くなります。本番環境では必要最小限の権限を設定しましょう。SSH鍵は600以外の権限だとSSH接続が拒否されます。