Scientific Linux 6
Sponsored Link

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::---
# 試しに"fermi"ユーザーで確認してみる

[fermi@dlp ~]$
cat /home/test.txt

ACL test file
# 正常に読めた
# 試しに他ユーザーで確認してみる

[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
[root@dlp ~]#
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 ~]#
getfacl -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::---
# file: home/testdir/testfile
# 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 のACLを全て削除する

[root@dlp ~]#
setfacl -b /home/test.txt
# /home/test.txt に付与されている "fedora"ユーザーのACLのみ削除する

[root@dlp ~]#
setfacl -x u:fedora /home/test.txt
[5] あるディレクトリに対してデフォルトのACLを設定する。
デフォルトACLが設定されたディレクトリ配下にファイル/ディレクトリを作成すると、デフォルトACLが継承される。 ( デフォルト設定のみでなく、対象ディレクトリに対して個別の許可設定もしておく必要があります。)
注意が必要なのは、後から新規に作成されるファイルにはデフォルトでACLが付与されますが、 それらのファイルに後から chmod でアクセス権を変更するとACLがきかなくなりますので、 後から変更しなくてよいように umaskの値に気をつけてください。
[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::---
[root@dlp ~]#
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::---
[root@dlp ~]#
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
関連コンテンツ