ACLを使ったアクセス権管理 setfacl
, getfacl
1. ACLの紹介
パーティーのオーガナイザー(またはシステム管理者)だと想像してみて。ゲストに特定の部屋に入る許可を与えたいけど、他の部屋は許可されるまで入れないようにしたいよね。Linuxの基本的なアクセス権限rwx
では、オーナー(user)、グループ(group)、その他の全員(others)の3つのカテゴリだけでアクセスを管理できるんだ。でも、特別な友達だけに部屋のアクセスを与えたい場合どうする?標準的な権限モデルの管理人が言うよ:「そんなの無理だよ」。そこでACLが頼れる味方として登場するんだ。
ACL (Access Control Lists
) は、三階層の権限システムの限界を克服して、特定のユーザーやグループに対してアクセス権限を設定できるようにするものだよ。
ACLの主な機能:
- 特定のユーザーやグループに対して、ファイルやディレクトリの個別の権限を設定可能。
- ディレクトリ内の新しいファイルへの権限の継承。
- 従来の
chmod
アプローチよりも柔軟な設定が可能。
2. ACLが有効になっているかを確認するには?
ACLを管理する前に、システムがこれをサポートしているか確認しよう。以下のコマンドを使ってみてね:
mount | grep acl
もしファイルシステムがacl
オプションでマウントされていれば、準備完了!そうでない場合は、以下のようにacl
を追加して区画を再マウントする必要があるよ:
sudo mount -o remount,acl /your/mount/point
これで万全だね。さあ、実践に取り掛かろう。
3. ACLを操作する主なコマンド
コマンド | 説明 |
---|---|
getfacl |
ファイルやディレクトリの現在のACLを取得する。 |
setfacl |
ファイルやディレクトリのACLを設定または変更する。 |
setfacl -m |
現在のアクセス権を変更 (modify) する。 |
setfacl -x |
特定のアクセス権を削除 (remove) する。 |
setfacl -b |
ファイルやディレクトリのすべてのACLエントリを削除する。 |
setfacl -d |
ファイルに継承されるディレクトリ用のデフォルトの権限を設定する。 |
では、これらのコマンドをそれぞれ例を使って見ていこう!
現在のACLを取得する getfacl
例えば、example.txt
というファイルがあるとする。このファイルの現在のACLを確認するには、次のコマンドを使用すればOK:
getfacl example.txt
出力例:
# file: example.txt
# owner: user1
# group: group1
user::rw-
group::r--
other::---
このリストには標準的な権限が表示される:所有者 user1
は読み取りと書き込みが可能、グループ group1
は読み取りのみ可能、他のユーザーはアクセス権がない。
個別のアクセス権を設定する (setfacl
)
次に、ユーザー user2
にファイル example.txt
への書き込みを許可したいとする。その場合、次のコマンドを使う:
sudo setfacl -m u:user2:rw example.txt
このコマンドの意味:
-m
: 権限を変更する。u:user2:rw
: ユーザーuser2
に (read-write) の権限を追加または変更する。
結果を確認する:
getfacl example.txt
出力は次のようになる:
# file: example.txt
# owner: user1
# group: group1
user::rw-
user:user2:rw # 新しい権限ルール!
group::r--
other::---
個別のアクセス権を削除する setfacl -x
もし、ユーザー user2
にもう書き込み権限を与えたくない場合、次のコマンドで権限を削除できる:
sudo setfacl -x u:user2 example.txt
確認:
getfacl example.txt
これで user2
に関する追加のルールはなくなった!
グループ用の権限を設定する
ACLを使用すると、個別のユーザーだけでなくグループ全体にも権限を設定できる。例えば、グループ devteam
に読み取りと書き込みのアクセスを許可するには:
sudo setfacl -m g:devteam:rw example.txt
デフォルトの権限を設定する setfacl -d
特定のディレクトリ内のすべての新しいファイルやディレクトリに自動的に権限を設定したい場合がある。例えば、ディレクトリ project_dir
のすべてのファイルにユーザー developer
が書き込み権限を持つようにしたい場合:
sudo setfacl -d -m u:developer:rw project_dir
権限を確認するには:
getfacl project_dir
これで、project_dir
内のすべての新しいファイルやサブディレクトリにはこのデフォルトルールが適用されるようになる。
すべてのACLを削除する setfacl -b
ファイルに設定されたすべてのACLを完全に削除したい場合:
sudo setfacl -b example.txt
これでファイルは標準的なアクセス権モデル user:group:others
に戻る。
4. ACLの実践的な応用
シナリオ: プロジェクトの共同作業
例えば、/project
ディレクトリに保存されているプロジェクトがあります。ここで3人が働いています:
Alice
はフルアクセス(読み込み、書き込み、実行)が必要です。Bob
はファイルを読むだけが許可されています。Eve
はディレクトリにアクセスすることができません。
これをACLを使って設定します:
Alice
にフルアクセスを付与:sudo setfacl -m u:alice:rwx /project
Bob
に読み込み権限のみを付与:sudo setfacl -m u:bob:r-- /project
Eve
に対しては何もしません — デフォルトではアクセスできません。
現在のACLリストを確認します:
getfacl /project
出力:
# file: /project
# owner: root
# group: root
user::rwx
user:alice:rwx
user:bob:r--
group::---
other::---
これで、Alice
は制限なく作業ができ、Bob
はファイルを閲覧するだけ、そして Eve
はアクセスできない状態になります。
5. 潜在的な問題とその解決策
ACLが機能していない。 既に設定したけど動いてない可能性があるね。この場合、パーティションが
acl
オプションでマウントされていないかも。mount
で確認して必要があれば再マウントしよう。標準権限とACLの競合。 ACLは常に標準権限より優先されるよ。たとえば、「others」に読み込み禁止が設定されていてもACLで特定のユーザーにアクセスを許可することができる。
継承されたACLを忘れる。
-d
(default)権限を設定した場合、新しいファイルにこれらのルールが継承されているか確認しよう。
なぜ重要なのか?
ACLを使った権限管理は、異なるユーザーやグループごとに柔軟なアクセス設定が可能になるんだ。特に業務用のサーバーでは、役割に基づいたアクセス権限の分配が必要な場合に役立つよ。例えば、企業ではACLを使って「詳しい人だけ」にアクセスを制限することがセキュリティの鍵になる。
さらに詳しく知りたいなら、ACLの公式ガイドを読んでみるといいよ。もっと理解が深まるはず!
GO TO FULL VERSION