Esta seção oferece exemplos de delegação e exibição de permissões delegadas do ZFS.
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 |
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 |
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.
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 |
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 |
Você pode usar o comando seguinte para exibir permissões:
# zfs allow dataset |
Este comando exibe permissões que são definidas ou concedidas a este conjunto de dados. A saída contém os seguintes componentes:
Conjuntos de permissões
Permissões específicas ou permissões no momento da criação
Conjunto de dados local
Conjuntos de dados locais e descendentes
Conjuntos de dados descendentes somente
A saída do exemplo seguinte indica que o usuário cindys tem permissões para criar, destruir, montar e realizar um instantâneo no sistema de arquivos tank/cindys.
# zfs allow tank/cindys ------------------------------------------------------------- Local+Descendent permissions on (tank/cindys) user cindys create,destroy,mount,snapshot |
A saída deste exemplo indica as seguintes permissões nos sistemas de arquivos pool/fred e pool.
Para o sistema de arquivos pool/fred:
São definidas dois conjuntos de permissões:
@eng (create, destroy, snapshot, mount, clone, promote, rename)
@simple (create, mount)
As permissões do tempo da criação são definidas para o conjunto de permissões @eng e a propriedade mountpoint. Tempo de criação significa que o conjunto de permissões @eng e a propriedade mountpoint são concedidas depois da criação do conjunto de dados.
Ao usuário tom é concedido o conjunto de permissões @eng e ao usuário joe são concedidas as permissões create, destroy e mount para sistemas de arquivos locais.
Ao usuário fred é concedido o conjunto de permissões @basic e as permissões share e rename para os sistemas de arquivos locais e descendentes.
Ao usuário barney e ao grupo staff é concedido o conjunto de permissões @basic somente para os sistemas de arquivos descendentes.
Para o sistema de arquivos pool:
Está definido o conjunto de permissões @simple (create, destroy, mount).
Ao grupo staff é concedido o conjunto de permissões @simple no sistema de arquivos local.
Eis a saída deste exemplo:
$ 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 ------------------------------------------------------------------------------ |
Você pode usar o comando zfs unallow para remover as permissões concedidas. Por exemplo, o usuário cindys tem permissões para criar, destruir, montar e realizar um instantâneo no sistema de arquivos 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 ------------------------------------------------------------- |
A sintaxe seguinte de zfs unallow remove a permissão de criação de instantâneo do usuário cindys do sistema de arquivos 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 |
Como no outro o exemplo, o usuário marks tem as seguintes permissões em tank/marks:
# zfs allow tank/marks ------------------------------------------------------------- Local+Descendent permissions on (tank/marks) user marks create,destroy,mount ------------------------------------------------------------- |
Neste exemplo, a sintaxe seguinte de zfs unallow remove todas as permissões do usuário marks de tank/marks:
# zfs unallow marks tank/marks |
A sintaxe seguinte de zfs unallow remove um conjunto de permissões do sistema de arquivos 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 ------------------------------------------------------------- |