При предоставлении разрешений create и mount отдельному пользователю необходимо убедиться, что у этого пользователя есть разрешения на базовую точку монтирования.
Например, чтобы предоставить пользователю разрешения marks create и mount для tank, сначала следует установить следующие разрешения:
# chmod A+user:marks:add_subdirectory:fd:allow /tank |
Затем с помощью команды zfs allow предоставьте разрешения create , destroy и mount. Пример:
# zfs allow marks create,destroy,mount tank |
Теперь пользователь marks может создавать собственные файловые системы в файловой системе tank. Пример:
# su marks marks$ zfs create tank/marks marks$ ^D # su lp $ zfs create tank/lp cannot create 'tank/lp': permission denied |
Следующий пример иллюстрирует настройку файловой системы таким образом, чтобы каждый член группы staff мог создавать и монтировать файловые системы в файловой системе tank, а также мог удалять собственные файловые системы. Однако члены группы staff не могут удалять файловые системы других пользователей.
# zfs allow staff create,mount tank # zfs allow -c create,destroy tank # zfs allow tank ------------------------------------------------------------- Create time permissions on (tank) create,destroy Local+Descendent permissions on (tank) group staff create,mount ------------------------------------------------------------- # su cindys cindys% zfs create tank/cindys cindys% exit # su marks marks% zfs create tank/marks/data marks% exit cindys% zfs destroy tank/marks/data cannot destroy 'tank/mark': permission denied |
Необходимо убедиться, что разрешения предоставляются пользователям на правильном уровне файловой системы. Например, пользователю marks предоставляются разрешения create, destroy и mount для локальных и дочерних файловых систем. Пользователю marks предоставляется локальное разрешение на создание снимков файловой системы tank, но ему не разрешается создавать снимки его собственной файловой системы. Таким образом, он не получил разрешение snapshot на правильном уровне файловой системы.
# zfs allow -l marks snapshot tank # zfs allow tank ------------------------------------------------------------- Local permissions on (tank) user marks snapshot Local+Descendent permissions on (tank) user marks create,destroy,mount ------------------------------------------------------------- # su marks marks$ zfs snapshot tank/@snap1 marks$ zfs snapshot tank/marks@snap1 cannot create snapshot 'mark/marks@snap1': permission denied |
Чтобы предоставить пользователю marks разрешение на дочернем уровне, воспользуйтесь командой zfs allow с параметром - d. Пример:
# zfs unallow -l marks snapshot tank # zfs allow -d marks snapshot tank # zfs allow tank ------------------------------------------------------------- Descendent permissions on (tank) user marks snapshot Local+Descendent permissions on (tank) user marks create,destroy,mount ------------------------------------------------------------- # su marks $ zfs snapshot tank@snap2 cannot create snapshot 'tank@snap2': permission denied $ zfs snapshot tank/marks@snappy |
Теперь пользователь marks может создавать снимки только на уровнях ниже уровня tank.
Можно предоставлять конкретные разрешения пользователям или группам. Например, следующая команда zfs allow предоставляет конкретные разрешения группе staff. Кроме того, разрешения destroy и snapshot предоставляются после создания файловых систем tank.
# zfs allow staff create,mount tank # zfs allow -c destroy,snapshot tank # zfs allow tank ------------------------------------------------------------- Create time permissions on (tank) destroy,snapshot Local+Descendent permissions on (tank) group staff create,mount ------------------------------------------------------------- |
Поскольку пользователь marks является членом группы staff, он может создавать файловые системы в tank. Кроме того, пользователь marks может создавать моментальные снимки tank/marks2, поскольку у него есть конкретное разрешение на это. Пример:
# su marks $ zfs create tank/marks2 $ zfs allow tank/marks2 ------------------------------------------------------------- Local permissions on (tank/marks2) user marks destroy,snapshot ------------------------------------------------------------- Create time permissions on (tank) destroy,snapshot Local+Descendent permissions on (tank) group staff create everyone mount ------------------------------------------------------------- |
Однако он не может создать моментальный снимок в tank/marks, поскольку не имеет конкретного разрешения на это. Пример:
$ zfs snapshot tank/marks2@snap1 $ zfs snapshot tank/marks@snappp cannot create snapshot 'tank/marks@snappp': permission denied |
При наличии разрешения create в собственном домашнем каталоге пользователь может создавать свои собственные каталоги снимков. Этот случай может оказаться полезным, если пользовательская файловая система монтируется в NFS. Пример:
$ cd /tank/marks2 $ ls $ cd .zfs $ ls snapshot $ cd snapshot $ ls -l total 3 drwxr-xr-x 2 marks staff 2 Dec 15 13:53 snap1 $ pwd /tank/marks2/.zfs/snapshot $ mkdir snap2 $ zfs list NAME USED AVAIL REFER MOUNTPOINT tank 264K 33.2G 33.5K /tank tank/marks 24.5K 33.2G 24.5K /tank/marks tank/marks2 46K 33.2G 24.5K /tank/marks2 tank/marks2@snap1 21.5K - 24.5K - tank/marks2@snap2 0 - 24.5K - $ ls snap1 snap2 $ rmdir snap2 $ ls snap1 |
Следующий пример иллюстрирует создание набора разрешений @myset и предоставление этого набора разрешений и разрешения на переименование группе staff для файловой системы tank. Пользователь cindys, будучи членом группы staff, имеет разрешение на создание файловой системы в tank. Однако пользователь lp не имеет разрешения на создание файловой системы в tank.
# zfs allow -s @myset create,destroy,mount,snapshot,promote,clone,readonly tank # zfs allow tank ------------------------------------------------------------- Permission sets on (tank) @myset clone,create,destroy,mount,promote,readonly,snapshot ------------------------------------------------------------- # zfs allow staff @myset,rename tank # zfs allow tank ------------------------------------------------------------- Permission sets on (tank) @myset clone,create,destroy,mount,promote,readonly,snapshot Local+Descendent permissions on (tank) group staff @myset,rename # chmod A+group:staff:add_subdirectory:fd:allow tank # su cindys cindys% zfs create tank/data Cindys% zfs allow tank ------------------------------------------------------------- Permission sets on (tank) @myset clone,create,destroy,mount,promote,readonly,snapshot Local+Descendent permissions on (tank) group staff @myset,rename ------------------------------------------------------------- cindys% ls -l /tank total 15 drwxr-xr-x 2 cindys staff 2 Aug 8 14:10 data cindys% exit # su lp $ zfs create tank/lp cannot create 'tank/lp': permission denied |