43.2. アクセスコントロールの設定

43.2.1. /etc/fstab の修正

ACL の設定が可能なファイルシステムでは、/etc/fstab に以下のようにマウントオプション acl の設定が必要です。XFS は、acl オプションの指定は必要ありません。

/dev/sdb1          /data             ext3    defaults,acl        1 3

指定後、システムを再起動するか、対象のファイルシステムをマウントし直します。

# mount -o remount /data

43.2.2. 基本的な ACL の設定例

ACL の設定は setfacl コマンドでパーミッションの設定を行い、getfacl コマンドで確認します。setfacl、getfacl コマンドの書式については、項43.3 を参照してください。ここでは、これらのコマンドの基本的な使用方法を解説します。

はじめに通常の手順で、/data ディレクトリに test ディレクトリを作成します。

# /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/

43.2.3. ACL のデフォルト設定について

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