chmod
コマンドの徹底解説: ファイル権限の管理
UnixおよびLinux系オペレーティングシステムにおいて、chmod
(change modeの略)コマンドは、ファイルやディレクトリのアクセス権を変更するための重要なツールです。本記事では、chmod
コマンドの使い方、権限の種類、特殊な権限、デフォルトの権限設定、具体的なユースケースなどについて詳しく解説します。
基本構文
chmod [オプション] [モード] [ファイル名]
- オプション: コマンドの動作を変更するための選択肢。
- モード: 設定する権限。数値形式またはシンボリック形式で指定可能。
- ファイル名: 権限を変更するファイルまたはディレクトリの名前。
chmod +x
の意味
chmod +x
は、指定したファイルに実行権限を追加するコマンドです。これにより、ファイルを実行可能なプログラムとして扱えるようになります。
例:
chmod +x script.sh
このコマンドを実行すると、script.sh
に実行権限が追加され、ユーザーはこのスクリプトを実行できるようになります。
権限の種類
ファイルやディレクトリに設定できる権限は以下の3つです。
- 読み取り(r): ファイルの内容を読み取る権限。
- 書き込み(w): ファイルの内容を変更する権限。
- 実行(x): プログラムやスクリプトを実行する権限。
権限の表記方法
1. シンボリック形式
シンボリック形式では、以下の記号を使用します。
- u: ユーザー(ファイルのオーナー)
- g: グループ(ファイルのグループ)
- o: その他のユーザー
- a: すべてのユーザー
- +: 権限を追加
- –: 権限を削除
例:
chmod u+x file.txt # ユーザーに実行権限を追加
chmod g-w file.txt # グループから書き込み権限を削除
chmod o=r file.txt # その他のユーザーに読み取り権限のみを設定
2. 数値形式
権限は数値で表現できます。
- 読み取り(r): 4
- 書き込み(w): 2
- 実行(x): 1
これらを組み合わせて、ユーザー、グループ、その他の権限を示す3桁の数値を作成します。
例:
chmod 755 file.txt # ユーザーに全権限、グループとその他に読み取り・実行権限を設定
数値形式の覚え方
数値形式の権限を覚えるための方法は以下の通りです。
- r (read) = 4
- w (write) = 2
- x (execute) = 1
これらを組み合わせて、各桁の数値を構成します。
よく使う数値の組み合わせ
数値 | ユーザー | グループ | その他 | 説明 |
---|---|---|---|---|
777 | rwx | rwx | rwx | 誰でも全権限 |
755 | rwx | r-x | r-x | ユーザーは全権限、他は読み取り・実行 |
700 | rwx | — | — | ユーザーのみ全権限 |
644 | rw- | r– | r– | ユーザーに読み書き、他は読み取りのみ |
600 | rw- | — | — | ユーザーのみ読み書き |
444 | r– | r– | r– | 誰でも読み取りのみ |
000 | — | — | — | 誰にも権限なし |
chmod
コマンドのオプション
chmod
コマンドには、いくつかのオプションがありますが、主に以下のものがよく使われます。
- -R: 再帰的に権限を変更。ディレクトリ内のすべてのファイルとサブディレクトリに対して適用します。
chmod -R 755 /path/to/directory # ディレクトリ内のすべてのファイルとサブディレクトリに対して権限を設定
- -v: 詳細モード。変更された各ファイルの名前を表示します。
chmod -v +x script.sh # script.shに実行権限を追加し、その結果を表示
特殊な権限
Unix/Linuxには、特定の目的のために設定される特殊な権限があります。
- Set User ID (SUID):
- 実行ファイルに対して設定され、実行時にファイルのオーナーの権限で実行されます。
chmod u+s /path/to/executable # SUIDを設定
- Set Group ID (SGID):
- 実行ファイルに対して設定され、実行時にファイルのグループの権限で実行されます。
chmod g+s /path/to/directory # SGIDを設定
- Sticky Bit:
- ディレクトリに設定され、他のユーザーがそのディレクトリ内のファイルを削除できるのは、ファイルのオーナーまたはディレクトリのオーナーのみです。
chmod +t /tmp # Sticky Bitを設定
デフォルトの権限設定(umask)
新しいファイルを作成した際、システムはデフォルトで設定された権限を使用します。このデフォルト設定を決定するのが umask(ユーザーマスク)です。
- umaskの値を引くことで、実際の権限が決まります。 例:
umask 022 # 新しいファイルには644、ディレクトリには755が設定される
ACL(Access Control List)
Linuxでは、より詳細な権限設定が可能な ACL(アクセス制御リスト)を使用することができます。これにより、特定のユーザーやグループに対して、ファイルやディレクトリへのアクセス権を柔軟に設定できます。
設定コマンド
setfacl -m u:username:rwx file.txt # 特定のユーザーに読み取り・書き込み・実行権限を付与
getfacl file.txt # 現在のACLを表示
実際のユースケース
1. スクリプトの実行権限を設定
複数のスクリプトを実行するプロジェクトにおいて、各スクリプトに対して実行権限を設定する必要があります。
chmod +x script1.sh
chmod +x script2.sh
2. チームプロジェクトでの共有ディレクトリ
チームで作業するプロジェクトにおいて、共有ディレクトリの権限を設定し、特定のグループのメンバーのみがファイルを編集できるようにします。
mkdir project_folder
chmod 770 project_folder # ユーザーとグループに全権限を付与
3. システム管理者のセキュリティ設定
システム管理者が重要なコマンドの実行権限を制限するために、特定のファイルにSUIDを設定します。
chmod u+s /usr/bin/sensitive_command # SUIDを設定
ls -l
コマンドとの併用
chmod
で権限を変更した後は、ls -l
コマンドを使用して、権限が正しく設定されたか確認できます。
ls -l file.txt # ファイルの権限、オーナー、グループを表示
出力例:
-rwxr-xr-- 1 user group 0 Oct 3 12:00 file.txt
権限の変更に伴うリスク
権限を変更する際は、システムのセキュリティに影響を与える可能性があるため注意が必要です。特に、全てのユーザーに全権限を与える設定(例えば、chmod 777
)は避けるべきです。セキュリティ上のリスクを最小限に抑えるために、必要な権限だけを設定することが重要です。
まとめ
chmod
コマンドは、ファイルやディレクトリのアクセス権を変更するための強力なツールです。権限の基本、シンボリック・数値形式、特殊権限、umask、ACL、コマンドの確認方法を理解することで、より安全で効率的なファイル管理が可能になります。これらの知識を活用して、Linuxシステムの管理を行いましょう。