ACL の設定が可能なファイルシステムでは、/etc/fstab に以下のようにマウントオプション acl の設定が必要です。XFS は、acl オプションの指定は必要ありません。
/dev/sdb1 /data ext3 defaults,acl 1 3 |
指定後、システムを再起動するか、対象のファイルシステムをマウントし直します。
# mount -o remount /data |
ACL の設定は setfacl コマンドでパーミッションの設定を行い、getfacl コマンドで確認します。setfacl、getfacl コマンドの書式については、項40.3 を参照してください。ここでは、これらのコマンドの基本的な使用方法を解説します。
はじめに通常の手順で、/data ディレクトリに test ディレクトリを作成します。
# cd /data # mkdir test # ls -ld test drwxr-xr-x 2 root root 4096 Sep 27 17:05 test/ |
作成した test ディレクトリには root のみ rwx というパーミッションが付与されています。このディレクトリに対して taro というユーザーにも rwx の権限を与えるには、以下のように setfacl コマンドを実行します。
# setfacl -m user:taro:rwx test |
-m は、modify(変更)の意味です。グループ、その他のユーザーに対して指定する場合は、user の箇所を group、other とします。なお、u、g、o と省略して指定することも可能です。設定を複数指定する場合は、user:taro:rwx の後に , (カンマ)で続けて指定します。このように、ACL を設定したディレクトリやファイルを ls -l コマンドで確認すると、パーミッションの最後に拡張ビット + が付与されていることを確認できます。
# ls -ld test drwxrwxr-x+ 2 root root 4096 Sep 27 17:05 test/ |
設定した ACL は、以下のように getfacl コマンドで確認することができます。
# getfacl test # file: test # owner: root # group: root user::rwx user:taro:rwx group::r-x mask::rwx other::r-x |
taro には、rwx という権限が付与されており、test ディレクトリにファイルを作成できるようになりました。なお、mask::rwx は、owner: 以外のユーザーに許可する最大のパーミッションの値です。もし、mask が r-x と指定された場合、taro は、rwx 権限が付与されているにもかかわらず、このディレクトリにファイルを作成できなくなります。mask の変更をする場合は、以下のようにコマンドを実行します。mask の指定は m と省略することも可能です。
# setfacl -m mask::r-x test |
getfacl コマンドで mask 値が変更されたことを確認します。
# getfacl test # file: test # owner: root # group: root user::rwx user:taro:rwx #effective:r-x group::r-x mask::r-x other::r-x |
設定した ACL を削除するには、-x オプションを使用します。パーミッションの指定は必要ありません。
# setfacl -x user:taro test |
getfacl コマンドで確認します。
# getfacl test # file: test # owner: root # group: root user::rwx group::r-x mask::r-x other::r-x |
test ディレクトリに設定された全ての ACL を削除するには -b オプションを使用します。
# setfacl -b test |
getfacl コマンドで確認します。
# getfacl test # file: test # owner: root # group: root user::rwx group::r-x other::r-x |
以下のように、拡張ビット + も削除されています。
# ls -ld test drwxr-xr-x 2 root root 4096 Sep 27 17:21 test/ |
ACL にはデフォルト設定と呼ばれる機能が提供されています。デフォルト設定のなされたディレクトリに新規ファイルやディレクトリを作成すると、デフォルト値を引き継いで ACL の設定がなされます。
例えば、以下の例では、project1 または project2 というグループに所属しているユーザーに /data/project ディレクトリへの書き込み権限を与えています。
# cd /data # mkdir project # setfacl -m g:project1:rwx,g:project2:rwx project |
getfacl コマンドで確認します。
# getfacl project # file: project # owner: root # group: root user::rwx group::r-x group:project1:rwx group:project2:rwx mask::rwx other::r-x |
これにより、project1 または project2 に所属するユーザーは、/data/project ディレクトリにファイルやディレクトリを作成できるようになりました。しかし、この状態で、project1 に所属する jiro がディレクトリやファイルを作成した場合、以下のように jiro だけが書き込み可能なパーミッションが設定されます。
# su - jiro $ cd /data/project/ $ mkdir test1 $ ls -ld test1 drwxr-xr-x 2 jiro jiro 4096 Sep 27 17:57 test1/ $ getfacl test1 # file: test1 # owner: jiro # group: jiro user::rwx group::r-x other::r-x |
もし、project1、project2 に所属するユーザーに書き込み権限を与えたいのであれば、以下のように /data/project ディレクトリへデフォルト設定を行います。
# setfacl -m d:g:project1:rwx,d:g:project2:rwx project |
getfacl コマンドを実行し、以下のように default: の指定が追加されたことを確認します。
# getfacl project # file: project # owner: root # group: root user::rwx group::r-x group:project1:rwx group:project2:rwx mask::rwx other::r-x default:user::rwx default:group::r-x default:group:project1:rwx default:group:project2:rwx default:mask::rwx default:other::r-x |
この状態で、再び project1 に所属するユーザー jiro で /data/project 以下にディレクトリを作成してみます。
# su - jiro $ cd /data/project/ $ mkdir test2 $ ls -ld test2 drwxrwxr-x+ 2 jiro jiro 4096 Sep 27 18:01 test2/ # getfacl test2 # file: test2 # owner: jiro # group: jiro user::rwx group::r-x group:project1:rwx group:project2:rwx mask::rwx other::r-x default:user::rwx default:group::r-x default:group:project1:rwx default:group:project2:rwx default:mask::rwx default:other::r-x |
ACL のデフォルト設定が引き継がれ、project1 と project2 のグループにも rwx の権限が付与されていることが分かります。さらに、このディレクトリ以下に作成された新規ファイルにもデフォルト設定が引き継がれます。なお、ディレクトリに設定されたデフォルト設定を削除するのであれば -k オプションを使用します。
$ setfacl -k test2 $ getfacl test2 # file: test2 # owner: jiro # group: jiro user::rwx group::r-x group:project1:rwx group:project2:rwx mask::rwx other::r-x |