Руководство по администрированию файловых систем ZFS Solaris

Использование делегированного администрирования ZFS

В данном разделе предоставлены примеры вывода и делегирования делегированных разрешений ZFS.

Отображение делегированных разрешений ZFS (примеры)

Для вывода разрешений можно использовать следующую команду:


# zfs allow dataset

Эта команда выводит разрешения, которые установлены или разрешены в этом наборе данных. Выходные данные содержат следующие компоненты:


Пример 9–1 Вывод базовых делегированных разрешений на администрирование

Следующие выходные данные в этом примере показывают, что пользователь cindys может удалять, монтировать и создавать моментальные снимки в файловой системе tank/cindys.


# zfs allow tank/cindys
       -------------------------------------------------------------
       Local+Descendent permissions on (tank/cindys)
               user cindys create,destroy,mount,snapshot


Пример 9–2 Вывод комбинированных делегированных разрешений на администрирование

Выходные данные в этом примере указывают следующие разрешения по отношению к файловым системам pool/fred и pool.

Для файловой системы pool/fred:

Для файловой системы pool:

Выходные данные для этого примера:


$ zfs allow pool/fred
------------------------------------------------------------------------------
Permission sets on (pool/fred)
        @eng create,destroy,snapshot,mount,clone,promote,rename
        @simple create,mount
Create time permissions on (pool/fred)
        @eng,mountpoint
Local permissions on (pool/fred)
        user tom @eng
        user joe create,destroy,mount
Local+Descendent permissions on (pool/fred)
        user fred @basic,share,rename
Descendent permissions on (pool/fred)
        user barney @basic
        group staff @basic
------------------------------------------------------------------------------
Permission sets on (pool)
        @simple create,destroy,mount
Local permissions on (pool)
        group staff @simple
------------------------------------------------------------------------------

Делегирование разрешений ZFS (Примеры)


Пример 9–3 Делегирование разрешений отдельному пользователю

При предоставлении разрешений 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


Пример 9–4 Делегирование группе разрешений create и destroy

Следующий пример иллюстрирует настройку файловой системы таким образом, чтобы каждый член группы 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


Пример 9–5 Делегирование разрешений на правильном уровне файловой системы

Необходимо убедиться, что разрешения предоставляются пользователям на правильном уровне файловой системы. Например, пользователю 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.



Пример 9–6 Определение и использование комбинированных делегированных разрешений

Можно предоставлять конкретные разрешения пользователям или группам. Например, следующая команда 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


Пример 9–7 Определение и использование делегированного набора разрешений ZFS

Следующий пример иллюстрирует создание набора разрешений @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

Удаление разрешений ZFS (примеры)

Для удаления предоставленных разрешений можно использовать команду zfs unallow. Например, пользователь cindys имеет разрешения на создание, удаление, монтирование и создание моментального снимка в файловой системе tank/cindys.


# zfs allow cindys create,destroy,mount,snapshot tank/cindys
       # zfs allow tank/cindys
       -------------------------------------------------------------
       Local+Descendent permissions on (tank/cindys)
               user cindys create,destroy,mount,snapshot
       -------------------------------------------------------------

Следующая команда zfs unallow удаляет разрешение пользователя cindys на создание снимка из файловой системы tank/cindys:


# zfs unallow cindys snapshot tank/cindys
# zfs allow tank/cindys
-------------------------------------------------------------
Local+Descendent permissions on (tank/cindys)
        user cindys create,destroy,mount
-------------------------------------------------------------
cindys% zfs create tank/cindys/data
cindys% zfs snapshot tank/cindys@today
cannot create snapshot 'tank/cindys@today': permission denied

В другом примере пользователь marks имеет следующие разрешения в tank/marks:


# zfs allow tank/marks
-------------------------------------------------------------
Local+Descendent permissions on (tank/marks)
        user marks create,destroy,mount
-------------------------------------------------------------

В данном примере следующая команда zfs unallow удаляет все разрешения для пользователя marks из tank/marks:


# zfs unallow marks tank/marks

Следующая команда·zfs unallow удаляет разрешения, заданные для файловой системы tank.


# zfs allow tank
-------------------------------------------------------------
Permission sets on (tank)
        @myset clone,create,destroy,mount,promote,readonly,snapshot
Create time permissions on (tank)
        create,destroy,mount
Local+Descendent permissions on (tank)
        group staff create,mount
-------------------------------------------------------------
# zfs unallow -s @myset tank
$ zfs allow tank
-------------------------------------------------------------
Create time permissions on (tank)
        create,destroy,mount
Local+Descendent permissions on (tank)
        group staff create,mount
-------------------------------------------------------------