chmod / chown / chgrp
『chmod / chown / chgrp』は Linux のファイル権限と所有者を管理するコマンドです。『chmod』でパーミッション(読み取り・書き込み・実行)を変更し、『chown』でファイルの所有ユーザーを、『chgrp』で所有グループを変更します。Webアプリのデプロイ時にはファイルの権限設定ミスがセキュリティホールや動作不良の原因になるため、正しい設定パターンを覚えておくことが重要です。
構文
数値モード(Octal mode)では、所有者・グループ・その他の順に rwx を数値で指定します。r=4、w=2、x=1 の合計値で権限を表します。644(rw-r--r--)は一般的な設定ファイル、755(rwxr-xr-x)は実行ファイル・ディレクトリによく使われます。
chmod {3桁の8進数} {ファイル/ディレクトリ}
シンボリックモード(Symbolic mode)では、対象(u=所有者 / g=グループ / o=その他 / a=全員)と演算子(+=追加 / -=削除 / ==置き換え)を組み合わせて権限を変更します。
chmod {対象}{演算子}{権限} {ファイル}
ディレクトリ以下のすべてのファイルとサブディレクトリに権限を一括適用します。
chmod -R {モード} {ディレクトリ}
ファイルの所有ユーザーを変更します(root 権限が必要です)。コロン区切りでグループも同時に変更できます。
sudo chown {ユーザー} {ファイル}
sudo chown {ユーザー}:{グループ} {ファイル}
ディレクトリ以下を再帰的に所有者変更します。Webサーバーへの権限委譲時によく使います。
sudo chown -R {ユーザー}:{グループ} {ディレクトリ}
ファイルの所有グループだけを変更します。-R でディレクトリ以下に再帰的に適用できます。
sudo chgrp {グループ} {ファイル}
sudo chgrp -R {グループ} {ディレクトリ}
構文一覧
| 操作 | コマンド | 説明 |
|---|---|---|
| パーミッションを数値で設定 | chmod {3桁} {ファイル} | r=4・w=2・x=1 の合計値で所有者・グループ・その他の順に指定します。 |
| パーミッションをシンボルで追加 | chmod {対象}+{権限} {ファイル} | 『u』(所有者)、『g』(グループ)、『o』(その他)、『a』(全員)と『r』、『w』、『x』を組み合わせて権限を追加します。 |
| パーミッションをシンボルで削除 | chmod {対象}-{権限} {ファイル} | 指定した対象から権限を削除します。 |
| パーミッションをシンボルで置換 | chmod {対象}={権限} {ファイル} | 指定した対象の権限を指定したものだけに置き換えます。 |
| ディレクトリ以下を再帰的に変更 | chmod -R {モード} {ディレクトリ} | ディレクトリ以下のすべてのファイル・サブディレクトリに一括適用します。 |
| 所有ユーザーを変更 | chown {ユーザー} {ファイル} | ファイルの所有ユーザーを変更します。root 権限が必要です。 |
| 所有ユーザーとグループを変更 | chown {ユーザー}:{グループ} {ファイル} | 所有ユーザーとグループを同時に変更します。 |
| 所有者をディレクトリ以下に一括適用 | chown -R {ユーザー}:{グループ} {ディレクトリ} | ディレクトリ以下を再帰的に所有者変更します。Webサーバーへの権限委譲時によく使います。 |
| 所有グループを変更 | chgrp {グループ} {ファイル} | ファイルの所有グループだけを変更します。 |
| 所有グループを再帰的に変更 | chgrp -R {グループ} {ディレクトリ} | ディレクトリ以下のグループを一括変更します。 |
| 現在のパーミッション確認 | ls -l {ファイル} | ファイルのパーミッション・所有者・グループを表示します。 |
| パーミッションを数値で確認 | stat -c "%a %n" {ファイル} | パーミッションを8進数で確認します。『chmod』で設定した値の確認に便利です。 |
使用例
ファイルのパーミッションを確認する
ファイル一覧とパーミッションを確認します。
$ ls -l /var/www/html/app/ 合計 24 -rw-r--r-- 1 www-data www-data 1024 Mar 25 12:00 config.php -rwxr-xr-x 1 www-data www-data 2048 Mar 25 12:00 deploy.sh drwxr-xr-x 2 www-data www-data 4096 Mar 25 12:00 storage -rw------- 1 root root 512 Mar 25 12:00 .env
パーミッションを8進数で確認します。設定値の検証に便利です。
$ stat -c "%a %n" /var/www/html/app/config.php 644 /var/www/html/app/config.php
Webアプリの典型的な権限設定をする
アプリ全体の所有者を Webサーバー(www-data)に変更します。ディレクトリは 755(所有者が rwx、他は r-x)、静的ファイルは 644 に設定します。ログ・キャッシュ・アップロード先など書き込みが必要なディレクトリは 775、機密ファイルは 600(所有者のみ読み書き)、スクリプトには実行権限(755)を付与します。
$ sudo chown -R www-data:www-data /var/www/html/jujutsu-app/
$ sudo find /var/www/html/jujutsu-app/ -type d -exec chmod 755 {} \;
$ sudo find /var/www/html/jujutsu-app/ -type f -exec chmod 644 {} \;
$ sudo chmod -R 775 /var/www/html/jujutsu-app/storage/
$ sudo chmod -R 775 /var/www/html/jujutsu-app/cache/
$ sudo chmod -R 775 /var/www/html/jujutsu-app/uploads/
$ sudo chmod 600 /var/www/html/jujutsu-app/.env
$ sudo chmod 755 /var/www/html/jujutsu-app/deploy.sh
$ stat -c "%a %n" /var/www/html/jujutsu-app/.env
600 /var/www/html/jujutsu-app/.env
$ stat -c "%a %n" /var/www/html/jujutsu-app/storage/
775 /var/www/html/jujutsu-app/storage/
シンボリックモードで権限を変更する
所有者に実行権限を追加します。グループとその他から書き込み権限を削除したり、全員の権限を読み取り専用に置き換えることもできます。複数の設定はカンマで区切って同時に適用できます。
$ chmod u+x /home/gojo/scripts/barrier.sh $ ls -l /home/gojo/scripts/barrier.sh -rwxr--r-- 1 gojo gojo 256 Mar 25 12:00 /home/gojo/scripts/barrier.sh $ chmod go-w /var/www/html/jujutsu-app/config.php $ chmod a=r /var/www/html/jujutsu-app/maintenance.php $ chmod u+x,o= /home/nanami/tools/analyze.sh $ ls -l /home/nanami/tools/analyze.sh -rwxr----- 1 nanami nanami 512 Mar 25 12:00 /home/nanami/tools/analyze.sh
所有者・グループを変更する
ファイルの所有者を www-data に変更します。ディレクトリ以下の所有者とグループをまとめて変更したり、グループだけを別のグループに変更することもできます。
$ sudo chown www-data /var/www/html/jujutsu-app/uploads/itadori_curse.png $ sudo chown -R www-data:www-data /var/www/html/jujutsu-app/uploads/ $ sudo chgrp -R developers /var/www/html/jujutsu-app/src/ $ ls -l /var/www/html/jujutsu-app/uploads/ 合計 8 -rw-r--r-- 1 www-data www-data 4096 Mar 25 12:00 itadori_curse.png -rw-r--r-- 1 www-data www-data 2048 Mar 25 12:00 sukuna_finger.jpg
概要
『chmod / chown / chgrp』は Linux のパーミッション管理を担う基本コマンドです。パーミッションは所有者・グループ・その他の3区分で rwx(読み取り4・書き込み2・実行1)を設定します。数値モードは『chmod 644』のように一括指定でき、シンボリックモードは『chmod u+x』のように既存の権限を保ちながら差分変更できます。Webアプリの典型的な設定はディレクトリが 755・PHP ファイルが 644・書き込みが必要な storage や uploads が 775・機密ファイル(.env など)が 600 です。変更後は『ls -l』や『stat -c "%a %n"』で実際の設定値を確認する習慣をつけると設定ミスを早期に発見できます。ファイルの権限確認には ls コマンドも合わせて参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。