ACL (Access Control List) とはファイルシステムの機能で、その名の通りファイルやディレクトリへのアクセス制御を行うことができます。ちなみにカーネル2.6から使用できるようです。
通常”ls -l” で表示させた時に “rwxrw-rw-” のように自分、グループ、その他についてのアクセス制御が設定されていますが、例外としてこのユーザだけ読み書きさせたいとか、このグループだけ読みこみ専用にしたなどを実現させることができます。
まずaclを使用するには、そのファイルシステム(ここではext3)がaclが使えるようになっていなければなりません。RHEL5のインストーラで作成したパーティションは、ファイルシステムレベルで有効になっていますが、後から自分で作成したファイルシステムはデフォルトでは有効になっていません。有効にする方法はファイルシステムレベルか、マウント時のオプションで指定できます。
まず、ファイルシステムレベルで有効になっているかどうかは、以下のコマンドで確認できます。
(例) /dev/sda1を確認 [root@localhost tmp]# tune2fs -l /dev/sda1 tune2fs 1.39 (29-May-2006) Filesystem volume name: /boot Last mounted on: <not available> Filesystem UUID: 16267cf2-e233-472c-9c5f-d832bd24xxxx Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super Default mount options: user_xattr acl Filesystem state: clean Errors behavior: Continue … 略 …
マウントオプションで有効になっている場合は以下のように確認できます。
[root@localhost tmp]# mount /dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw) proc on /proc type proc (rw) … 省略 … none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) /dev/sdb1 on /opt type ext3 (rw,acl)
有効になっていない場合は、tune2fsコマンドでファイルシステムレベルで有効にするか、fstabに記述してmountオプションで有効にしてください。
(例) # mount -o remount,acl /dev/sdb1
使用方法はそれほど難しくありません。
まずはhogeというファイルの現在のACLの状態を見てみます。
[root@localhost tmp]# getfacl hoge # file: hoge # owner: root # group: root user::rw- group::r-- other::r--
下3行の赤文字部分が現在の設定部分です。”ls -l” で表示させた権限と同じものです。
[root@localhost tmp]# ls -l hoge -rw-r--r-- 1 root root 0 1月 4 12:22 hoge
つまり、特別なACLは何も設定されていません。この”hoge”ファイルにユーザmaznは読み書きできるように設定してみます。設定は”setfacl”コマンドで行います。
[root@localhost tmp]# setfacl -m u:mazn:rw- hoge [root@localhost tmp]# getfacl hoge # file: hoge # owner: root # group: root user::rw- user:mazn:rw- group::r-- mask::rw- other::r--
以上のようになり、ユーザmaznはこのファイルを読み書きできるようになります。”-m”が属性設定オプションで “u”がユーザを指定”:”で繋いで、”mazn”がユーザ名、さらに”:”で繋いで”rw-“がアクセス権です。”u”の代わりに”g”を使うことでグループの権限を設定できます。このように、ACLが設定されると、”ls -l”でファイルを見たときに属性に”+”がつきます。
[root@localhost tmp]# ls -l hoge -rw-rw-r--+ 1 root root 0 1月 4 12:22 hoge
ディレクトリにも同様に設定できます。ディレクトリの場合はさらに “u”や”g”の前に”d:”をつけることができます。”d”をつけるとそのディレクトリ配下に新しく作成されるファイルやディレクトリの属性のデフォルト値になります。一つでもデフォルト値を設定すると、その他のデフォルト値も自動的に設定されます。
[root@localhost tmp]# mkdir foo [root@localhost tmp]# setfacl -m d:u:mazn:rwx foo [root@localhost tmp]# getfacl foo # file: foo # owner: root # group: root user::rwx group::r-x other::r-x default:user::rwx default:user:mazn:rwx default:group::r-x default:mask::rwx default:other::r-x
“-x”オプションを使用すると、権限を削除できます。
[root@localhost tmp]# setfacl -x u:mazn hoge
“mv”コマンドで移動しても属性は変わりませんが、cpコマンドでは削除されます。cpコマンドで属性までコピーしたい場合は、”-p”オプションを使用してください。mvコマンドでACLが有効なファイルシステムから無効なファイルシステムへ移動した場合、ファイルは移動できますが、ACLの属性がコピーできないため、エラーメッセージが出力されますので注意してください。