ACL によるアクセス制御2012/01/31 |
ACL(Access Control Lists)を設定し、アクセスコントロールを実装します。
従来の、ファイル/ディレクトリに対する[所有者/グループ/第三者]と[読み取り/書き込み/実行]の許可を、より細かく設定できます。
設定に際して新たにインストールするものはありません。
最小構成でシステムをインストールしていても、ツール類(「acl」パッケージ)は入ってきます。
さらに、ファイルシステムが ext4 の場合、Scientific Linux 6 ではデフォルトで ACL が有効になっているので、
マウントオプションに「acl」を付加する必要もありません。
|
|
[1] | ACLを設定する。 例として、/home 直下に「test.txt」を所有者「root」のアクセス権「700」で作成し、それにACLを設定してみます。 |
# /home/test.txt に対して、u(user)ユーザー"fermi"にr(read)を許可する [root@dlp ~]# setfacl -m u:fermi:r /home/test.txt
# ACLを設定すると、アクセス権の右に以下のように「+」が付加される [root@dlp ~]# ll /home/test.txt -rwxr-----+ 1 root root 14 Jan 31 12:13 /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:fermi:r-- group::--- mask::r-- other::--- # 試しに他ユーザーで確認してみる [fedora@dlp ~]$ cat /home/test.txt cat: /home/test.txt: Permission denied # 正常に読めない |
[2] | あるディレクトリ配下全てに再帰的にACLを設定する。 |
# /home/testdir ディレクトリ配下に対して、u(user)ユーザー"fermi"にr(read)を許可する [root@dlp ~]# setfacl -R -m u:fermi:r /home/testdir
ll -laR /home/testdir /home/testdir: total 12 drwxr-----+ 2 root root 4096 Jan 31 21:29 . drwxr-xr-x. 5 root root 4096 Jan 31 21:28 .. -rwxr-----+ 1 root root 9 Jan 31 21:29 testfile
[root@dlp ~]#
# file: home/testdir/testfilegetfacl -R /home/testdir getfacl: Removing leading '/' from absolute path names # file: home/testdir # owner: root # group: root user::rwx user:fermi:r-- group::--- mask::r-- other::--- # owner: root # group: root user::rwx user:fermi: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"グループに属する"fermi"ユーザーで確認してみる [fermi@dlp ~]$ echo "test write" >> /home/test.txt [fermi@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:fermi:r-x /home/testdir # /home/testdir ディレクトリに対して"fermi"にr-x(read/execute)を許可するデフォルトACLを設定する [root@dlp ~]# setfacl -d -m u:fermi: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:fermi:r-x group::--- mask::r-x other::--- default:user::rwx default:user:fermi: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 # 試しに"fermi"ユーザーで確認してみる [fermi@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:fermi: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:fermi:r-x group::--- mask::r-x other::---
# file: /home/test.txt
# owner: root # group: root user::rwx user:fermi:r-- group::--- mask::r-- other::--- setfacl --restore=acl.txt [root@dlp ~]# ll /home total 16 drwx------. 2 fermi fermi 4096 Jan 31 12:14 fermi 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 |