Linux / コマンド / chmod - ファイル・ディレクトリのアクセス権変更

chmodは、ファイルやディレクトリの読み取り・書き込み・実行権限を変更します。数字モードと記号モードを使用でき、変更前に対象の現在の権限を確認することが安全です。

権限は所有者、グループ、それ以外のユーザーにそれぞれ適用されます。通常のファイルの実行ビットは実行可能かどうかを示し、ディレクトリの実行ビットはそのパスを通過できるか、中の項目にアクセスできるかを左右します。権限を変更できるのは通常、そのファイルの所有者または必要な管理権限を持つユーザーです。書き込み権限があるだけでは変更できません。所有者自体を変える場合は chownによる所有者・グループの変更 を使います。

基本的な文法

chmod [オプション] モード ファイル ...

インストールされている実装とオプションは、配布版によって異なる場合があります。man chmodで現在のシステムの説明を確認してください。

使用例

記号モードで実行権限を追加

自分が所有する script.sh に対して、所有者の実行権限だけを追加します。スクリプトが実際に動くには、実行内容や指定したインタープリターなどの条件も満たす必要があります。

chmod u+x script.sh

数字モードで権限を指定

所有者に読み取り・書き込み、グループとその他のユーザーには読み取りのみを許可します。

chmod 644 report.txt

変更前後の確認

権限を変更した後、対象ファイルのモードを確認します。

ls -l report.txt
chmod go-rwx report.txt
ls -l report.txt

権限の数字が実際に適用されたか確認する

640は所有者読み取り・書き込み、グループ読み取り、その他ユーザー権限なしです。次の例は同名ファイルのない書き込み可能な実習ディレクトリで実行し、statの権限表示 で確認します。demo.txt が既にあると最初のコマンドで上書きされるため、未使用の名前にしてください。

printf 'demo\n' > demo.txt
chmod 640 demo.txt
stat -c '%a %n' demo.txt

例の出力:

640 demo.txt

chmod自体は成功しても通常何も出力しません。ディレクトリでは実行ビットが進入・探索権限を意味するため、ファイルと同じ数字を機械的に適用するとアクセスに問題が生じることがあります。再帰的変更の前に対象パスとその下位項目を確認してください。

数値モードは所有者・グループ・その他ユーザーの通常の読み取り・書き込み・実行ビットをまとめて指定します。一部の特殊ビットの扱いにはGNU版のディレクトリ処理などの例外があるため、全属性の初期化とは考えません。一方、chmod g+w ファイルのような記号モードは既存の権限に必要なビットだけを追加します。共有ディレクトリで共同作業をする場合は、所有者・グループ・その他ユーザーの権限を一緒に確認し、ファイルを実行可能にする必要が本当にあるか判断してください。

主なオプションと形式

オプション・形式 説明
u/g/o/a 所有者・グループ・その他のユーザー・全体を意味します。
+ / - / = 権限の追加・削除・指定を意味します。
r/w/x 読み取り・書き込み・実行権限を意味します。
-R サブディレクトリとファイルまで再帰的に変更します。
--reference=ファイル 参照ファイルと同じモードを適用します。

使用する際の注意点

chmod -R 777はすべてのユーザーに広範なアクセス権を与えるため、便宜上使用しないでください。ファイルとディレクトリは必要な権限が異なります。再帰的に変更する前にfindやlsで対象範囲を確認し、ACL(Access Control List)による追加のアクセス制御や、SELinux(Security-Enhanced Linux)の強制アクセス制御も確認します。ACLがある場合は chmod がACLのマスクに影響することもあるため、モード表示だけで全アクセス権を判断しないでください。

よくある質問

chmod 755 は何を意味しますか?

所有者は読み取り・書き込み・実行(7)、グループとその他のユーザーは読み取り・実行(5)を持ちます。通常のファイルとディレクトリに同じように適用しても意味は異なります。

公式ドキュメント

オプションの正確な動作や実装ごとの違いは、chmod 関連の公式ドキュメントで確認できます。