"chmod" コマンドによる Linux ファイルパーミッションのマスター
Linux のファイルパーミッションは、システムセキュリティとユーザーアクセス制御の基盤です。chmod(change mode)コマンドを理解しマスターすることは、あらゆる Linux システム管理者、開発者、またはパワーユーザーにとって不可欠です。このコマンドを使用すると、誰が(ユーザー、グループ、その他)ファイルまたはディレクトリを読み取り、書き込み、または実行できるかを正確に定義でき、システムの安定性とセキュリティ体制に直接影響を与えます。
このガイドでは、chmod を使用する 2 つの主要な方法、つまりシンボリック表記とオクタル(数値)表記を、実践的な例を交えて説明し、ファイルアクセス権を自信を持って管理できるようにします。
Linux パーミッションの基本を理解する
chmod に飛び込む前に、Linux パーミッションの構造を理解することが重要です。ls -l を実行すると、出力の最初の 10 文字がファイルタイプとパーミッションの詳細を示します。
例えば、-rwxr-xr-- の場合:
- 最初の文字: ファイルタイプ(ファイルの場合は
-、ディレクトリの場合はd、シンボリックリンクの場合はlなど)。 - 次の 9 文字: パーミッション。3 文字ずつの 3 つのセットに分かれます。
- ユーザー (u): ファイルの所有者に対するパーミッション。
- グループ (g): ファイルの所有グループのメンバーに対するパーミッション。
- その他 (o): それ以外のすべての人に対するパーミッション。
各セットには 3 つのパーミッションタイプが含まれます。
- r (読み取り): ファイルの内容を表示したり、ディレクトリの内容を一覧表示したりできます。
- w (書き込み): ファイルを変更または削除したり、ディレクトリ内にファイルを作成/削除したりできます。
- x (実行): ファイルをプログラムとして実行したり、ディレクトリに入ったり(トラバース)できます。
方法 1: シンボリック表記(文字を使用)
シンボリック表記は、他のパーミッションに影響を与えずに特定のパーミッションを変更する、最も直感的な方法であることがよくあります。エンティティ、操作、パーミッションを表すために文字を使用します。
シンボリック構文
構文は一般的に chmod [who][operator][permissions] file(s) です。
| コンポーネント | 意味 | 値 |
|---|---|---|
| Who | 対象エンティティ | u(ユーザー)、g(グループ)、o(その他)、a(すべて) |
| Operator | 実行するアクション | +(追加)、-(削除)、=(正確に設定) |
| Permissions | パーミッションタイプ | r、w、x |
実践的なシンボリック例
1. 所有者への実行パーミッションの付与:
スクリプト (myscript.sh) があり、所有者のみが実行できる必要がある場合:
chmod u+x myscript.sh
2. グループメンバーへの書き込み許可:
ファイルのグループ内のユーザーがファイルを編集できるようにする場合:
chmod g+w shared_document.txt
3. 所有者以外の全員からの書き込みパーミッションの削除:
これは一般的なセキュリティ対策です。a-w を使用して全員の書き込みアクセスを削除し、その後、ユーザーに明示的に u+w で付与し直します。
chmod a-w,u+w sensitive_data.log
4. 「その他」に対する正確なパーミッションの設定:
等号 (=) を使用して、「その他」のすべての既存パーミッションを上書きし、読み取りのみに設定します。
chmod o=r project_plan.doc
方法 2: オクタル(数値)表記
オクタル表記は、すべてのパーミッションセットを一度に設定する場合、より高速で正確です。これは、各エンティティ(ユーザー、グループ、その他)の読み取り、書き込み、実行パーミッションの組み合わせに数値値を割り当てることに依存しています。
オクタル値の計算
各パーミッションは 1 ビットに対応し、これは 10 進数に変換されます。
- r(読み取り)= 4
- w(書き込み)= 2
- x(実行)= 1
- パーミッションなし = 0
パーミッションは各エンティティセット(ユーザー、グループ、その他)の合計値になります。
| 組み合わせ | 合計 | 数値値 |
|---|---|---|
rwx |
4 + 2 + 1 | 7 |
rw- |
4 + 2 + 0 | 6 |
r-x |
4 + 0 + 1 | 5 |
r-- |
4 + 0 + 0 | 4 |
-wx |
0 + 2 + 1 | 3 |
-w- |
0 + 2 + 0 | 2 |
--x |
0 + 0 + 1 | 1 |
--- |
0 + 0 + 0 | 0 |
オクタル表記を使用してパーミッションを指定するには、3 桁の数値を指定します: [User][Group][Others]。
実践的なオクタル例
1. 標準的なファイルパーミッション (644):
これは、所有者には読み取り/書き込み、グループには読み取りのみ、その他には読み取りのみというパーミッションを設定します。
- ユーザー (rw-): 4 + 2 = 6
- グループ (r--): 4
- その他 (r--): 4
chmod 644 important_file.txt
2. 標準的なディレクトリパーミッション (755):
これはディレクトリの一般的な設定であり、所有者は内容を管理でき、他のユーザーはディレクトリを一覧表示/アクセスできます。
- ユーザー (rwx): 4 + 2 + 1 = 7
- グループ (r-x): 4 + 1 = 5
- その他 (r-x): 4 + 1 = 5
chmod 755 my_project_folder
3. セキュアなファイルパーミッション (600):
所有者のみが読み取りと書き込みができ、他の誰もアクセスできません。
- ユーザー (rw-): 6
- グループ (---): 0
- その他 (---): 0
chmod 600 private_key.pem
4. 全員へのフルアクセス (777) - 注意して使用してください!
これは、全員に読み取り、書き込み、実行の全パーミッションを付与します。これは非常に安全ではなく、通常、一時的なテスト環境以外では避けるべきです。
chmod 777 public_upload_area
⚠️ セキュリティ警告: パーミッションを
777(全員に読み取り/書き込み/実行)に設定することは、めったに必要とされず、セキュリティを著しく危険にさらします。ファイルには644、ディレクトリには755のような制限的な設定を優先してください。
特殊パーミッション: 4 番目の桁
オクタル表記を使用する際、3 桁の前に 4 番目の桁をオプションで追加することで、ファイルやディレクトリに特殊パーミッションを設定できます。これらは、アクセス制御の継承と実行動作を扱います。
| 値 | 名前 | ファイルへの影響 | ディレクトリへの影響 |
|---|---|---|---|
| 4 | SetUID (SUID) | ファイルは所有者のパーミッションで実行されます。 | 無視されます |
| 2 | SetGID (SGID) | ファイルはグループのパーミッションで実行されます。 | 新しいファイルはディレクトリのグループ ID を継承します。 |
| 1 | Sticky Bit | ほとんど効果がありません。 | ユーザーは、そのディレクトリ内の自分が所有するファイルしか削除できません。 |
特殊パーミッションの例
shared_group_files という名前のディレクトリに SGID ビットを設定する場合(標準パーミッション 770 を想定):
- 770(ユーザー/グループ/その他)+ 2(SGID)= 2770
chmod 2770 shared_group_files
SUID ビットを実行可能スクリプトに設定し、実行時にユーザーに昇格された権限を付与する場合(システムユーティリティでよく使用されます):
- 4755(SUID + rwxr-xr-x)
chmod 4755 system_utility
パーミッションの再帰的適用
ディレクトリツリー全体を管理する場合、再帰フラグ (-R) を使用する必要があります。これは、指定された変更をディレクトリ自体およびそのすべての内容(ファイルとサブディレクトリ)に適用します。
例: web_root 内のすべてのファイルとフォルダーを再帰的に 755 に設定する:
chmod -R 755 web_root/
ベストプラクティス: 再帰的な変更を適用する場合、ファイルに対する実行権限とディレクトリに対するトラバーサル権限の厳密な分離が必要な場合は、ディレクトリを
755、ファイルを644に別々に設定することが賢明な場合があります。
結論
chmod コマンドは、安全で機能的な Linux 環境を維持するための基本的なツールです。シンボリック表記(u+x)の明示的で加算的な性質を好むか、オクタル表記(755)の簡潔なパワーを好むかにかかわらず、両方をマスターすることで、ファイルアクセスを確実に管理できます。変更を加えた後は、常に ls -l を使用してパーミッションを確認し、モードが正しく設定されたことを確認してください。