纠正错误 添加实例

chmod

ファイルやディレクトリの権限を変更する

概要

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: ディレクトリまたはファイルの所有者のみがディレクトリ内のファイルを削除できる
  • +: 対象ユーザーに後述する権限を追加する
  • -: 対象ユーザーの後述する権限を削除する
  • =: 後述する権限にする

Linuxにおけるファイルのユーザー権限について

# カレントディレクトリをロングフォーマットで見る
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

注意

  1. このコマンドはGNU coreutilsパッケージに含まれています。man chmodあるいはinfo coreutils 'chmod invocation'で関連するヘルプ情報を参照してください。

  2. シンボリックリンクのアクセス許可は変更できません。ユーザーがシンボリックリンクの権限を変更すると、その変更は紐づいている元のファイルに適用されます。

  3. -Rオプションで現在のユーザーの実行権限と読み取り権限を保持するようにしてください。

補足

SUID、SGIDとは

UNIX系OSには特殊なファイル属性として、SUID、SGID、Stickeyの3つが存在します。

SUID

SUID(Set User ID)は実行ファイルに設定できる属性です。通常の属性と異なり、実行ファイル所有者の権限で実行します。

SGID

SGID(Set Group ID)は実行ファイルまたはディレクトリに設定できる属性です。
ファイルとディレクトリで動作が異なります。

Sticky

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権限でファイルを実行できるようになるため、適切な管理が重要となります。