ファイルやディレクトリの権限を変更する
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
mode:8進数あるいは文字の組み合わせ
file:権限を変更したい1つまたは複数のファイルを指定する
-c, --changes:ファイルの権限が変更されたときの操作に関する情報を出力する。
--no-preserve-root:"/"を特別扱いしない
--preserve-root:"/"に対する再帰的操作を行わない
-f, --silent, --quiet:多くのエラーメッセージを出力する
-v, --verbose:ファイルの権限が変更されたかにかかわらず捜査情報を出力する
--reference=RFILE:参照ファイルあるいはディレクトリのRFILEの権限を参照し、対象のファイルやディレクトリの権限を設定する
-R, --recursive:ディレクトリとディレクトリ内の権限を再帰的に変更する
--help:ヘルプメッセージを表示し、終了する
--version:バージョン情報を表示し、終了する
不正なオプションや引数でない限り、戻り値は成功です。
権限 | 文字 | 数字 |
---|---|---|
読み取り | r | 4 |
書き取り | w | 2 |
実行 | x | 1 |
u
: 現在のユーザーg
: 現在のユーザーと同じグループに属するユーザーo
: 他のユーザーa
: 全ユーザーr
: 読み取り権限を表し、8進数では4
w
: 書き込み権限を表し、8進数では2
x
: 実行権限を表し、8進数では1
X
: 対象ファイルが実行可能なファイルまたはディレクトリの場合、そのファイルに実行可能な権限を設定できるs
: SUIDとSGIDの権限を設定し、u+s
はSUIDを、g+s
はSGIDを設定するt
: ディレクトリまたはファイルの所有者のみがディレクトリ内のファイルを削除できる+
: 対象ユーザーに後述する権限を追加する-
: 対象ユーザーの後述する権限を削除する=
: 後述する権限にする
# カレントディレクトリをロングフォーマットで見る
ls -la
-rw-r--r-- 1 user staff 651 Oct 12 12:53 .gitmodules
第1ビットがd
である場合ディレクトリを表し、-
である場合通常のファイルを表します。
第2ビットから第4ビットは現在のユーザーの権限を表します。
第5ビットから第7ビットはグループユーザーの権限を表します。
第8ビットから第10ビットは他のユーザーの権限を表します。
# グループユーザーに書き込み権限を付与する
chmod g+w ./test.log
# その他のユーザーの全権限を削除する
chmod o= ./test.log
# 全てのユーザーから書き込み権限を削除する
chmod a-w ./test.log
# 現在のユーザーは全権限を持ち、グループユーザーは読み取りと書き込み、他のユーザーは読み取り権限のみを持たせる
chmod u=rwx, g=rw, o=r ./test.log
# 1つ上のコマンドを8進数で表記する
chmod 764 ./test.log
# 全ユーザーに、ディレクトリとその下にあるファイルに読み取りと書き込み権限を付与する
# 注意,'-R'オプションを使用する場合、現在のユーザーに対する実行権限と読み取り権限が保持されていることを確認してください
chmod -R a=rw ./testdir/
# 他のファイルのアクセス許可に基づいてファイルのアクセス許可を設定する
chmod --reference=./1.log ./test.log
このコマンドはGNU coreutils
パッケージに含まれています。man chmod
あるいはinfo coreutils 'chmod invocation'
で関連するヘルプ情報を参照してください。
シンボリックリンクのアクセス許可は変更できません。ユーザーがシンボリックリンクの権限を変更すると、その変更は紐づいている元のファイルに適用されます。
-R
オプションで現在のユーザーの実行権限と読み取り権限を保持するようにしてください。
UNIX系OSには特殊なファイル属性として、SUID、SGID、Stickeyの3つが存在します。
SUID(Set User ID)は実行ファイルに設定できる属性です。通常の属性と異なり、実行ファイル所有者の権限で実行します。
SGID(Set Group ID)は実行ファイルまたはディレクトリに設定できる属性です。
ファイルとディレクトリで動作が異なります。
Sticky(Sticky bit)が設定されているディレクトリ以下にあるファイルやディレクトリは、実際の権限によらず全てのユーザーが作成・書き込みできますが、所有者とrootユーザーのみが名前の変更と削除を行うことができます。 chmodでは次のように設定します。
# SUIDを設定する
chmod 4755 ./test.log
chmod u+s ./test.log
# SGIDを設定する
chmod 2755 ./testdir/
chmod g+s ./testdir/
# Sticky bitを設定する
chmod 1777 ./testdir/
chmod a+rwx,u+t ./testdir/
これらの特殊な権限を使用すると、一般ユーザーでもroot権限でファイルを実行できるようになるため、適切な管理が重要となります。