アクセス制御リスト
アクセス制御リスト (Access Control List, ACL) はファイルシステムに柔軟性のあるパーミッション機構を追加します。UNIX
のファイルパーティションを補助する形で設計されています。ACL を使うことであらゆるディスクリソースのパーミッションをあらゆるユーザーやグループに与えることが可能です。
インストール
必要パッケージである acl は systemd の依存パッケージであるため、既にインストールされているはずです。
設定
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
Using the default mount options instead of an entry in /etc/fstab
is very useful for external drives, such partition will be mounted with acl
option also on other Linux machines. There is no need to edit /etc/fstab
on every machine.
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--
Remove all extended ACL entries:
# setfacl -b abc
Check permissions
# getfacl abc
# file: abc # owner: someone # group: someone user::rw- group::r-- other::r--
ls コマンドの出力
You will notice that there is an ACL for a given file because it will exhibit a +
(plus sign) after its Unix permissions in the output of ls -l
.
$ 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::---
ウェブブラウザのセキュリティを向上
You can now add permissions to our home directory and/or site directory only to nobody user any anyone else - without "whole world" to increase your security.
Add permissions +x for nobody user on your home directory via ACL:
# setfacl -m "u:nobody:--x" /home/homeusername/
Now you can remove whole world rx permissions:
# chmod o-rx /home/homeusername/
Check our changes:
# file: username/ # owner: username # group: users user::rwx user:nobody:--x group::r-x mask::r-x other::---
As we can see others do not have any permissions but user nobody have "x" permission so they can "look" into users directory and give access to users pages from their home directories to www server. Of course if www server work as nobody user. But - whole world except nobody - do not have any permissions.
参照
- Man ページ -
man getfacl
- Man ページ -
man setfacl
- An old but still relevant (and thorough) guide to ACL