アクセス制御リスト

提供: ArchWiki
ACLから転送)
移動先: 案内検索

アクセス制御リスト (Access Control List, ACL) はファイルシステムに柔軟性のあるパーミッション機構を追加します。UNIX のファイルパーティションを補助する形で設計されています。ACL を使うことであらゆるディスクリソースのパーミッションをあらゆるユーザーやグループに与えることが可能です。

インストール

必要パッケージである aclsystemd の依存パッケージであるため、既にインストールされているはずです。

設定

ACL の有効化

ACL を有効にするには、ファイルシステムを acl オプションでマウントする必要があります。fstab を使えばオプションを永続化させることができます。

ファイルシステムのデフォルトマウントオプションによっては acl オプションが既に有効になっているかもしれません。Btrfs ではデフォルトで有効であり、ext ファイルシステムでも有効になっていることがあります。以下のコマンドを使って ext* でフォーマットするときのパーティションのオプションを確認してください:

# tune2fs -l /dev/sdXY | grep "Default mount options:"
Default mount options:    user_xattr acl

そしてデフォルトのマウントオプションが上書きされていないかも確認してください。/proc/mounts の適当な行に noacl と記述されていればオプションが変更されています。

ファイルシステムのデフォルトマウントオプションは tune2fs -o option partition コマンドを使って設定できます、例えば:

# tune2fs -o acl /dev/sdXY

特に外部ドライブに設定するときは、他の Linux マシンからも acl オプションを使ってパーティションをマウントすることがある場合、/etc/fstab にエントリを記述するよりもデフォルトマウントオプションを使うほうが便利です。全てのマシンの /etc/fstab を編集する必要がなくなります。

ノート:
  • ext2/3/4 ファイルシステムの作成時に acl はデフォルトのマウントオプションとして指定されます。この設定は /etc/mke2fs.conf から変えられます。
  • デフォルトのマウントオプションは /proc/mounts には記載されません。

ACL の設定

ACL を修正するには setfacl コマンドを使います。パーミッションを追加するには setfacl -m を使います。

ユーザーにパーミッションを追加:

# setfacl -m "u:username:permissions"

または:

# setfacl -m "u:uid:permissions"

グループにパーミッションを追加:

# setfacl -m "g:groupname:permissions"

または:

# setfacl -m "g:gid:permissions"

すべてのパーミッションを削除:

# setfacl -b

個別のエントリを削除:

# setfacl -x "entry"

パーミッションを確認するには、次を使用:

# getfacl filename

サンプル

"abc" という名前のファイルに対するユーザー johny のパーミッションを設定:

# setfacl -m "u:johny:rwx" abc

パーミッションの確認:

# getfacl abc
# file: abc
# owner: someone
# group: someone
user::rw-
user:johny:rwx
group::r--
mask::rwx
other::r--

ユーザー johny のパーミッションを変更:

# setfacl -m "u:johny:r-x" abc

パーミッションを確認:

# getfacl abc
# file: abc
# owner: someone
# group: someone
user::rw-
user:johny:r-x
group::r--
mask::r-x
other::r--

全ての拡張 ACL エントリを削除:

# setfacl -b abc

パーティションを確認:

# getfacl abc
# file: abc
# owner: someone
# group: someone
user::rw-
group::r--
other::r--

ls コマンドの出力

特定のファイルに ACL が存在するかどうかは ls -l の出力で Unix のパーミッションの後に + (プラス記号) があるかどうかで見分けられます。

$ ls -l /dev/audio
crw-rw----+ 1 root audio 14, 4 nov.   9 12:49 /dev/audio
$ getfacl /dev/audio
getfacl: Removing leading '/' from absolute path names
# file: dev/audio
# owner: root
# group: audio
user::rw-
user:solstice:rw-
group::rw-
mask::rw-
other::---

ウェブサーバーにプライベートなファイルの実行権限を与える

ウェブサーバーなどのプロセスに、ユーザーのホームディレクトリにあるファイルへのアクセス権を与える方法を以下で説明します。全てのファイルにアクセスする権限を与えるのではなく制限をかけることでセキュリティを担保しています。

このセクションでは、例として、ウェブサーバーを実行するユーザーは webserver で、アクセスできるようにするのは geoffrey のホームディレクトリである /home/geoffrey と仮定します。

最初に実行権限を webserver に与えて geoffrey のホームにアクセスできるようにします:

# setfacl -m "u:webserver:--x" /home/geoffrey

注意: ディレクトリの中身をプロセスが確認するにはディレクトリに実行権限が必要です。

webserver から /home/geoffrey のファイルにアクセスできるようになったので、other は権限が必要ありません:

# chmod o-rx /home/geoffrey

getfacl を使うことで変更を確認できます:

$ getfacl /home/geoffrey
getfacl: Removing leading '/' from absolute path names
# file: home/geoffrey
# owner: geoffrey
# group: geoffrey
user::rwx
user:webserver:--x
group::r-x
mask::r-x
other::---

上記の出力で、other にはもはや権限がなく、webserver がファイルにアクセスできることが確認でき、セキュリティが確かに向上しています。

参照

  • Man ページ - man getfacl
  • Man ページ - man setfacl
  • An old but still relevant (and thorough) guide to ACL