Guia de administração do ZFS Oracle Solaris

Delegando permissões do ZFS (Exemplos)


Exemplo 9–1 Delegando permissões a um usuário individual

Ao fornecer as permissões create e mount a um usuário individual, você precisa ter certeza de que o usuário tem as permissões no ponto de montagem subjacente.

Por exemplo, para dar ao usuário marks as permissões create e mount em tank, defina primeiro as permissões:


# chmod A+user:marks:add_subdirectory:fd:allow /tank

A seguir, use o comando zfs allow para conceder as permissões create, destroy e mount. Por exemplo:


# zfs allow marks create,destroy,mount tank

Agora, o usuário marks pode criar seus próprios sistemas de arquivos no sistema de arquivos tank. Por exemplo:


# su marks
marks$ zfs create tank/marks
marks$ ^D
# su lp
$ zfs create tank/lp
cannot create 'tank/lp': permission denied


Exemplo 9–2 Delegando as permissões de criação e destruição a um grupo

O exemplo abaixo mostra como configurar um sistema de arquivos para que todos no grupo staff possam criar e montar sistemas de arquivos no sistema de arquivos tank, bem como destruir seus próprios sistemas de arquivos. No entanto, os membros do grupo staff não podem destruir os sistemas de arquivos de outros.


# 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


Exemplo 9–3 Delegando permissões no nível correto do sistema de arquivos

Certifique-se de ter concedido a permissão aos usuários no nível correto do sistema de arquivos. Por exemplo, ao usuário marks são concedidas as permissões create, destroy e mount para os sistemas de arquivos locais e descendentes. Ao usuário marks é concedida a permissão local para realizar instantâneos do sistema de arquivos tank, mas não tem permissão para realizar instantâneos do seu próprio sistema de arquivos. Assim, ele não tem a permissãosnapshot no nível correto do sistema de arquivos.


# 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

Para conceder ao usuário marks a permissão no nível do descendente, use a opção zfs allow - d. Por exemplo:


# 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

Agora, o usuário marks pode somente criar um instantâneo abaixo do nível tank.



Exemplo 9–4 Definindo e usando permissões delegadas complexas

Você pode conceder permissões específicas a usuários ou grupos. Por exemplo, o comando zfs allow seguinte concede permissões específicas ao grupo staff. Além disso, as permissões destroy e snapshot são concedidas após a criação dos sistemas de arquivos 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
-------------------------------------------------------------

Por ser um membro do grupo staff, o usuário marks pode criar sistemas de arquivos tank. Além disso, o usuário marks pode criar um instantâneo de tank/marks2 porque possui as permissões específicas para isso. Por exemplo:


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

Porém, ele não pode criar um instantâneo em tank/marks porque não possui as permissões específicas para isso. Por exemplo:


$ zfs snapshot tank/marks2@snap1
$ zfs snapshot tank/marks@snappp
cannot create snapshot 'tank/marks@snappp': permission denied

Se tiver a permissão create no diretório de início, você pode criar seus próprios diretórios de instantâneos. Esta situação é útil quando o sistema de arquivos está montado em NFS. Por exemplo:


$ 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


Exemplo 9–5 Definindo e usando um conjunto de permissões delegadas do ZFS

O exemplo seguinte mostra como criar um conjunto de permissões @myset e conceder e renomear permissões no grupo staff para o sistema de arquivos tank. O usuário cindys, membro do grupo staff, possui a permissão para criar um sistema de arquivos em tank. No entanto, o usuário lp não possui a permissão para criar um sistema de arquivos em 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