create および mount アクセス権を個人ユーザーに委任するときは、ユーザーが配下のマウントポイントに対するアクセス権を持っていることを確認する必要があります。
たとえば、ユーザー mark に create アクセス権と mount アクセス権を system1 ファイルシステムに関して委任するには、まず次のようにアクセス権を設定します。
$ chmod A+user:mark:add_subdirectory:fd:allow /system1/home
その後、zfs allow コマンドを使用して create、destroy、および mount アクセス権を委任します。例:
$ zfs allow mark create,destroy,mount system1/home
これで、ユーザー mark は system1/home ファイルシステム内に自分のファイルシステムを作成できます。例:
$ su mark mark$ zfs create system1/home/mark mark$ ^D $ su lp $ zfs create system1/home/lp cannot create 'system1/home/lp': permission denied使用例 49 グループに create および destroy アクセス権を委任する
次の例では、ファイルシステムを設定して、staff グループの任意のメンバーが system1/home ファイルシステムでファイルシステムの作成とマウント、および各自のファイルシステムの破棄を実行できるようにする方法を示します。ただし、staff グループメンバーはほかのユーザーのファイルシステムを破棄できません。
$ zfs allow staff create,mount system1/home $ zfs allow -c create,destroy system1/home $ zfs allow system1/home ---- Permissions on system1/home ---------------------------------------- Create time permissions: create,destroy Local+descendant permissions: group staff create,mount $ su cindy cindy% zfs create system1/home/cindy/files cindy% exit $ su mark mark% zfs create system1/home/mark/data mark% exit cindy% zfs destroy system1/home/mark/data cannot destroy 'system1/home/mark/data': permission denied使用例 50 正しいファイルシステムレベルでアクセス権を委任する
ユーザーにアクセス権を委任する場合は、必ず正しいファイルシステムレベルで委任してください。たとえば、ユーザー mark には create、destroy、および mount アクセス権が、ローカルおよび子孫のファイルシステムに関して委任されています。ユーザー mark には system1/home ファイルシステムのスナップショットを作成するローカルアクセス権が委任されていますが、自分のファイルシステムのスナップショットを作成することは許可されていません。したがって、このユーザーには snapshot アクセス権が正しいファイルシステムレベルで委任されていません。
$ zfs allow -l mark snapshot system1/home $ zfs allow system1/home ---- Permissions on system1/home ---------------------------------------- Create time permissions: create,destroy Local permissions: user mark snapshot Local+descendant permissions: group staff create,mount $ su mark mark$ zfs snapshot system1/home@snap1 mark$ zfs snapshot system1/home/mark@snap1 cannot create snapshot 'system1/home/mark@snap1': permission denied
ユーザー mark に子孫ファイルシステムレベルのアクセス権を委任するには、zfs allow –d オプションを使用します。例:
$ zfs unallow -l mark snapshot system1/home $ zfs allow -d mark snapshot system1/home $ zfs allow system1/home ---- Permissions on system1/home ---------------------------------------- Create time permissions: create,destroy descendant permissions: user mark snapshot Local+descendant permissions: group staff create,mount $ su mark $ zfs snapshot system1/home@snap2 cannot create snapshot 'system1/home@snap2': permission denied $ zfs snapshot system1/home/mark@snappy
これで、ユーザー mark は system1/home ファイルシステムレベルの下のスナップショットだけを作成できます。
使用例 51 複雑な委任アクセス権を定義して使用する特定のアクセス権をユーザーやグループに委任できます。たとえば、次の zfs allow コマンドでは、特定のアクセス権が staff グループに委任されます。また、destroy アクセス権と snapshot アクセス権が system1/home ファイルシステムの作成後に委任されます。
$ zfs allow staff create,mount system1/home $ zfs allow -c destroy,snapshot system1/home $ zfs allow system1/home ---- Permissions on system1/home ---------------------------------------- Create time permissions: create,destroy,snapshot Local+descendant permissions: group staff create,mount
ユーザー mark は staff グループのメンバーであるため、system1/home 内にファイルシステムを作成できます。また、ユーザー mark は、system1/home/mark2 のスナップショットを作成するための特定のアクセス権を持っているため、そのようなスナップショットを作成できます。例:
$ su mark $ zfs create system1/home/mark2 $ zfs allow system1/home/mark2 ---- Permissions on system1/home/mark2 ---------------------------------- Local permissions: user mark create,destroy,snapshot ---- Permissions on system1/home ---------------------------------------- Create time permissions: create,destroy,snapshot Local+descendant permissions: group staff create,mount
ただし、ユーザー mark は system1/home/mark でスナップショットを作成するための特定のアクセス権を持っていないため、そのようなスナップショットは作成できません。例:
$ zfs snapshot system1/home/mark@snap1 cannot create snapshot 'system1/home/mark@snap1': permission denied
この例では、ユーザー mark は自身のホームディレクトリで create アクセス権を持っていますが、これは、このユーザーがスナップショットを作成できることを意味します。このシナリオは、ファイルシステムを NFS マウントする場合に役立ちます。
$ cd /system1/home/mark2 $ ls $ cd .zfs $ ls shares snapshot $ cd snapshot $ ls -l total 3 drwxr-xr-x 2 mark staff 2 Sep 27 15:55 snap1 $ pwd /system1/home/mark2/.zfs/snapshot $ mkdir snap2 $ zfs list # zfs list -r system1/home NAME USED AVAIL REFER MOUNTPOINT system1/home/mark 63K 62.3G 32K /system1/home/mark system1/home/mark2 49K 62.3G 31K /system1/home/mark2 system1/home/mark2@snap1 18K - 31K - system1/home/mark2@snap2 0 - 31K - $ ls snap1 snap2 $ rmdir snap2 $ ls snap1使用例 52 ZFS 委任アクセス権セットを定義して使用する
次の例では、アクセス権セット @myset を作成し、グループ staff にこのアクセス権セットと rename アクセス権を system1 ファイルシステムに関して委任する方法を示します。ユーザー cindy は staff グループのメンバーであり、system1 にファイルシステムを作成するアクセス権を持っています。ただし、ユーザー lp は system1 にファイルシステムを作成するアクセス権を持っていません。
$ zfs allow -s @myset create,destroy,mount,snapshot,promote,clone,readonly system1 $ zfs allow system1 ---- Permissions on system1 --------------------------------------------- Permission sets: @myset clone,create,destroy,mount,promote,readonly,snapshot $ zfs allow staff @myset,rename system1 $ zfs allow system1 ---- Permissions on system1 --------------------------------------------- Permission sets: @myset clone,create,destroy,mount,promote,readonly,snapshot Local+descendant permissions: group staff @myset,rename $ chmod A+group:staff:add_subdirectory:fd:allow system1 # su cindy cindy% zfs create system1/data cindy% zfs allow system1 ---- Permissions on system1 --------------------------------------------- Permission sets: @myset clone,create,destroy,mount,promote,readonly,snapshot Local+descendant permissions: group staff @myset,rename cindy% ls -l /system1 total 15 drwxr-xr-x 2 cindy staff 2 Jun 24 10:55 data cindy% exit $ su lp $ zfs create system1/lp cannot create 'system1/lp': permission denied