cryptmountパーティション内にACLを設定する

■cryptmountパーティション内にACLを設定する。

 debian Wheezyにdm_cryptを導入
 http://d.hatena.ne.jp/labunix/20130516

 cryptsetupの暗号化方式について
 http://d.hatena.ne.jp/labunix/20130526

■まずは暗号化デバイスを開く

$ sudo cryptsetup luksOpen luks.img luks
Enter passphrase for /home/labunix/luks.img:

■実態は「/dev/dm-0」となる。

$ ls -l /dev/mapper/luks
lrwxrwxrwx 1 root root 7  529 08:55 /dev/mapper/luks -> ../dm-0

$ test -d /media/luksfs || sudo mkdir /media/luksfs
$ sudo mount /dev/dm-0 /media/luksfs

■ext2だが、ACLオプション付でマウントされている。

$ mount | grep luks
/dev/mapper/luks on /media/luksfs type ext2 (rw,relatime,errors=continue,user_xattr,acl)

■ユーザ用のディレクトリを準備

$ sudo mkdir /media/luksfs/`whoami`
$ sudo chown labunix:labunix /media/luksfs/`whoami`
$ ls -ld /media/luksfs/labunix/
drwxr-xr-x 2 labunix labunix 1024  529 09:00 /media/luksfs/labunix/

■デフォルトのACL情報を確認

$ getfacl /media/luksfs/labunix/
getfacl: Removing leading '/' from absolute path names
# file: media/luksfs/labunix/
# owner: labunix
# group: labunix
user::rwx
group::r-x
other::r-x

■まずはテストして、ユーザを追加。

$ setfacl --test -m user:labunix:rwx /media/luksfs/labunix/
/media/luksfs/labunix/: u::rwx,u:labunix:rwx,g::r-x,m::rwx,o::r-x,*

$ setfacl -m user:labunix:rwx /media/luksfs/labunix/
$ getfacl /media/luksfs/labunix/

■ユーザのアクセス権が追加された。

$ getfacl: Removing leading '/' from absolute path names
# file: media/luksfs/labunix/
# owner: labunix
# group: labunix
user::rwx
user:labunix:rwx
group::r-x
mask::rwx
other::r-x

■グループとその他の権限を削除

$ setfacl --test -m group::- /media/luksfs/labunix/
/media/luksfs/labunix/: u::rwx,u:labunix:rwx,g::---,m::rwx,o::r-x,*

$ setfacl -m group::- /media/luksfs/labunix/
$ setfacl -m other::- /media/luksfs/labunix/

■グループのアクセス権はなくなった。

$ getfacl /media/luksfs/labunix/
getfacl: Removing leading '/' from absolute path names
# file: media/luksfs/labunix/
# owner: labunix
# group: labunix
user::rwx
user:labunix:rwx
group::---
mask::rwx
other::---

■ディレクトリを作成。継承はされていない。

$ mkdir /media/luksfs/labunix/Hello
$ getfacl /media/luksfs/labunix/Hello/
getfacl: Removing leading '/' from absolute path names
# file: media/luksfs/labunix/Hello/
# owner: labunix
# group: labunix
user::rwx
group::r-x
other::r-x

■再帰的に変更するには「-R」オプションをつける。

$ setfacl --test -R -m user:labunix:rwx /media/luksfs/labunix/
/media/luksfs/labunix/: *,*
/media/luksfs/labunix//Hello: u::rwx,u:labunix:rwx,g::r-x,m::rwx,o::r-x,*

$ setfacl -R -m group::- /media/luksfs/labunix/
$ setfacl -R -m other::- /media/luksfs/labunix/

$ getfacl /media/luksfs/labunix/Hello/
getfacl: Removing leading '/' from absolute path names
# file: media/luksfs/labunix/Hello/
# owner: labunix
# group: labunix
user::rwx
user:labunix:rwx
group::---
mask::rwx
other::---

■他のユーザでは閲覧出来る。
 通常のグループやその他ユーザが許可されている箇所は出来ない。

$ ls -ld /media/luksfs/labunix/
drwxrwx---+ 3 labunix labunix 1024  529 09:11 /media/luksfs/labunix/

$ sudo -u toor ls /media/luksfs/labunix/
ls: ディレクトリ /media/luksfs/labunix/ を開くことが出来ません: 許可がありません

$ sudo -u toor ls -ld ~/
drwxr-xr-x 12 labunix labunix 4096  528 22:28 /home/labunix/

■ACLオプションをつけずに再マウント

$ sudo umount /media/luksfs
$ sudo mount -o rw,noacl /dev/dm-0 /media/luksfs/
$ mount | grep luks
/dev/mapper/luks on /media/luksfs type ext2 (rw,relatime,errors=continue,user_xattr,noacl)

■ユーザアクセス制御は正しく動作している。

$ ls -l /media/luksfs/labunix/
合計 2
drwxrwx--- 3 labunix labunix 1024  529 09:18 Hello
$ ls -l /media/luksfs/labunix/Hello/
合計 2
drwxr-xr-x 2 labunix labunix 1024  529 09:18 World

$ sudo -u toor ls -l /media/luksfs/labunix/
ls: ディレクトリ /media/luksfs/labunix/ を開くことが出来ません: 許可がありません
$ sudo -u toor ls -l /media/luksfs/labunix/Hello/
ls: /media/luksfs/labunix/Hello/ にアクセスできません: 許可がありません

$ setfacl -m user:toor:r /media/luksfs/labunix/
setfacl: /media/luksfs/labunix/: サポートされていない操作です
$ env LANG=C setfacl -m user:toor:r /media/luksfs/labunix/
setfacl: /media/luksfs/labunix/: Operation not supported

■ACLオプション付きでマウントしなおす。

$ sudo umount /media/luksfs
$ sudo mount /dev/dm-0 /media/luksfs/
$ mount | grep luks
/dev/mapper/luks on /media/luksfs type ext2 (rw,relatime,errors=continue,user_xattr,acl)

■今度は正しく設定出来た。

$ env LANG=C setfacl -m user:toor:r /media/luksfs/labunix/
$ getfacl /media/luksfs/labunix/
getfacl: Removing leading '/' from absolute path names
# file: media/luksfs/labunix/
# owner: labunix
# group: labunix
user::rwx
user:labunix:rwx
user:toor:r--
group::---
mask::rwx
other::---