アクセス制御リスト

提供: ArchWiki
2015年7月17日 (金) 20:39時点におけるKusakata (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

アクセス制御リスト (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 と仮定します。

The first step is granting execution permission to webserver so it can access geoffrey's home:

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

Remeber: Execution permissions to a directory are necessary for a process to list the directories content.

Since webserver is now able to access files in /home/geoffrey, others do no longer need access:

# 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::---

As the above output shows, others no longer have any permissions, but webserver still is able to access the files, thus security might be considered increased.

参照

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