CodeGym /コース /Docker SELF /ACL(`setfacl`、`getfacl`)を使ったアクセス権管理

ACL(`setfacl`、`getfacl`)を使ったアクセス権管理

Docker SELF
レベル 5 , レッスン 3
使用可能

ACLを使ったアクセス権管理 setfacl, getfacl

1. ACLの紹介

パーティーのオーガナイザー(またはシステム管理者)だと想像してみて。ゲストに特定の部屋に入る許可を与えたいけど、他の部屋は許可されるまで入れないようにしたいよね。Linuxの基本的なアクセス権限rwxでは、オーナー(user)、グループ(group)、その他の全員(others)の3つのカテゴリだけでアクセスを管理できるんだ。でも、特別な友達だけに部屋のアクセスを与えたい場合どうする?標準的な権限モデルの管理人が言うよ:「そんなの無理だよ」。そこでACLが頼れる味方として登場するんだ。

ACL (Access Control Lists) は、三階層の権限システムの限界を克服して、特定のユーザーやグループに対してアクセス権限を設定できるようにするものだよ。

ACLの主な機能:

  1. 特定のユーザーやグループに対して、ファイルやディレクトリの個別の権限を設定可能。
  2. ディレクトリ内の新しいファイルへの権限の継承。
  3. 従来の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を使って設定します:

  1. Alice にフルアクセスを付与:

    sudo setfacl -m u:alice:rwx /project
    
  2. Bob に読み込み権限のみを付与:

    sudo setfacl -m u:bob:r-- /project
    
  3. Eve に対しては何もしません — デフォルトではアクセスできません。

現在のACLリストを確認します:

getfacl /project

出力:

# file: /project
# owner: root
# group: root
user::rwx
user:alice:rwx
user:bob:r--
group::---
other::---

これで、Alice は制限なく作業ができ、Bob はファイルを閲覧するだけ、そして Eve はアクセスできない状態になります。


5. 潜在的な問題とその解決策

  1. ACLが機能していない。 既に設定したけど動いてない可能性があるね。この場合、パーティションがaclオプションでマウントされていないかも。mountで確認して必要があれば再マウントしよう。

  2. 標準権限とACLの競合。 ACLは常に標準権限より優先されるよ。たとえば、「others」に読み込み禁止が設定されていてもACLで特定のユーザーにアクセスを許可することができる。

  3. 継承されたACLを忘れる。 -d(default)権限を設定した場合、新しいファイルにこれらのルールが継承されているか確認しよう。

なぜ重要なのか?

ACLを使った権限管理は、異なるユーザーやグループごとに柔軟なアクセス設定が可能になるんだ。特に業務用のサーバーでは、役割に基づいたアクセス権限の分配が必要な場合に役立つよ。例えば、企業ではACLを使って「詳しい人だけ」にアクセスを制限することがセキュリティの鍵になる。

さらに詳しく知りたいなら、ACLの公式ガイドを読んでみるといいよ。もっと理解が深まるはず!

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION