ACL によるアクセス制御2013/06/05 |
ACL(Access Control Lists)を設定し、アクセスコントロールを実装します。
従来の、ファイル/ディレクトリに対する[所有者/グループ/第三者]と[読み取り/書き込み/実行]の許可を、より細かく設定できます。
|
|
[1] | ACLをインストールして設定する。 例として、/home 直下に「test.txt」を所有者「root」のアクセス権「700」で作成し、それにACLを設定してみます。 |
root@dlp:~#
aptitude -y install acl # /home/test.txt に対して、u(user)ユーザー"wheezy"にr(read)を許可する root@dlp:~# setfacl -m u:wheezy:r /home/test.txt
# ACLを設定すると、アクセス権の右に以下のように「+」が付加される root@dlp:~# ll /home/test.txt -rwxr-----+ 1 root root 5 Jun 6 11:59 /home/test.txt # ACLを表示して設定を確認する root@dlp:~# getfacl /home/test.txt getfacl: Removing leading '/' from absolute path names # file: home/test.txt # owner: root # group: root user::rwx user:wheezy:r-- group::--- mask::r-- other::--- # 試しに他ユーザーで確認してみる fedora@dlp:~$ cat /home/test.txt cat: /home/test.txt: Permission denied # 正常に読めない
|
[2] | あるディレクトリ配下全てに再帰的にACLを設定する。 |
# /home/testdir ディレクトリ配下に対して、u(user)ユーザー"wheezy"にr(read)を許可する root@dlp:~# setfacl -R -m u:wheezy:r /home/testdir
ll -laR /home/testdir /home/testdir: total 12 drwxr-----+ 2 root root 4096 Jun 6 14:23 . drwxr-xr-x 6 root root 4096 Jun 6 14:23 .. -rwxr-----+ 1 root root 9 Jun 6 14:23 testfileroot@dlp:~# getfacl -R /home/testdir getfacl: Removing leading '/' from absolute path names # file: home/testdir # owner: root # group: root user::rwx user:wheezy:r-- group::--- mask::r-- other::--- # file: home/testdir/testfile # owner: root # group: root user::rwx user:wheezy:r-- group::--- mask::r-- other::--- |
[3] | グループでACLを設定する。 |
# /home/test.txt に対して、g(group)グループ"security"にrw(read/write)を許可する root@dlp:~# setfacl -m g:security:rw /home/test.txt root@dlp:~# getfacl /home/test.txt getfacl: Removing leading '/' from absolute path names # file: home/test.txt # owner: root # group: root user::rwx group::--- group:security:rw- mask::rw- other::--- # 試しに"security"グループに属する"wheezy"ユーザーで確認してみる wheezy@dlp:~$ echo "test write" >> /home/test.txt wheezy@dlp:~$ cat /home/test.txt ACL test file test write # 正常に書き込めた
# 試しに"security"グループに属さない他ユーザーで確認してみる fedora@dlp:~$ echo "test write" >> /home/test.txt -bash: /home/test.txt: Permission denied # 正常に書き込めない
|
[4] | ACL設定を削除する。 |
# /home/test.txt に付与されている "fedora"ユーザーのACLのみ削除する root@dlp:~# setfacl -x u:fedora /home/test.txt
|
[5] | あるディレクトリに対してデフォルトのACLを設定する。 デフォルトACLが設定されたディレクトリ配下にファイル/ディレクトリを作成すると、デフォルトACLが継承される。 ( デフォルト設定のみでなく、対象ディレクトリに対して個別の許可設定もしておく必要があります。) 注意が必要なのは、後から新規に作成されるファイルにはデフォルトでACLが付与されますが、 それらのファイルに後から chmod でアクセス権を変更するとACLがきかなくなりますので、 後から変更しなくてよいように umaskの値に気をつけてください。 |
root@dlp:~#
root@dlp:~# setfacl -m u:wheezy:r-x /home/testdir # /home/testdir ディレクトリに対して"wheezy"にr-x(read/execute)を許可するデフォルトACLを設定する root@dlp:~# setfacl -d -m u:wheezy:r-x /home/testdir root@dlp:~# getfacl /home/testdir getfacl: Removing leading '/' from absolute path names # file: home/testdir # owner: root # group: root user::rwx user:wheezy:r-x group::--- mask::r-x other::--- default:user::rwx default:user:wheezy:r-x default:group::--- default:mask::r-x default:other::--- echo "ACL default setting" > /home/testdir/test.txt root@dlp:~# ll /home/testdir/test.txt -rw-r-----+ 1 root root 20 Jan 31 22:32 /home/testdir/test.txt # 試しに"wheezy"ユーザーで確認してみる wheezy@dlp:~$ cat /home/testdir/test.txt ACL default setting # 正常に読めた
|
[6] | デフォルトACLを削除する |
root@dlp:~# setfacl -k /home/testdir root@dlp:~# getfacl /home/testdir getfacl: Removing leading '/' from absolute path names # file: home/testdir # owner: root # group: root user::rwx user:wheezy:r-x group::--- mask::r-x other::--- |
[7] | ファイルからACLを読み込み設定する |
# ACL設定ファイルを作成 ( 書式は getfacl の出力結果と同じ ) # 設定したいACLが他システムにあるなら、getfaclの結果をリダイレクトでファイルに出力しそのまま使う手もある
root@dlp:~#
vi acl.txt
# file: /home/testdir
# owner: root # group: root user::rwx user:wheezy:r-x group::--- mask::r-x other::---
# file: /home/test.txt
# owner: root # group: root user::rwx user:wheezy:r-- group::--- mask::r-- other::--- setfacl --restore=acl.txt root@dlp:~# ll /home total 16 drwx------. 2 wheezy wheezy 4096 Jan 31 12:14 wheezy drwx------ 2 fedora fedora 4096 Jan 31 12:14 fedora drwxr-x---+ 2 root root 4096 Jan 31 22:32 testdir -rwxr-----+ 1 root root 25 Jan 31 21:56 test.txt |