Guia de administração do ZFS Oracle Solaris

Definindo e exibindo ACLs em arquivos ZFS no formato compacto

Você pode definir e exibir as permissões em arquivos ZFS em um formato compacto que usa unicamente 14 letras para representar as permissões. As letras que representam as permissões compactas estão listadas na Tabela 8–2 e Tabela 8–3.

Você pode exibir listagens de ACLs compactas de arquivos e diretórios usando o comando ls -V. Por exemplo:


# ls -V file.1
-rw-r--r--   1 root     root      206663 Jun 17 10:07 file.1
            owner@:--x-----------:------:deny
            owner@:rw-p---A-W-Co-:------:allow
            group@:-wxp----------:------:deny
            group@:r-------------:------:allow
         everyone@:-wxp---A-W-Co-:------:deny
         everyone@:r-----a-R-c--s:------:allow

A saída de ACL compacta é descrita da seguinte forma:

owner@

O proprietário não tem permissões de execução para o arquivo (x= execute).

owner@

O proprietário pode ler e modificar o conteúdo do arquivo ( rw=read_data/write_data), (p= append_data). O proprietário também pode modificar os atributos do arquivo, tais como registros de data, atributos estendidos e ACLs (A=write_xattr , W=write_attributes e C=write_acl). Além disso, o proprietário pode modificar a propriedade do arquivo (o=write_owner).

group@

O grupo não tem permissões de modificação e execução para o arquivo (write_data, p=append_data e x=execute).

group@

O grupo tem permissões de leitura para o arquivo (r= read_data).

everyone@

Todos os que não são proprietários do arquivo ou membros do grupo de proprietários do arquivo não têm permissão para executar ou modificar o conteúdo do arquivo nem para modificar os atributos do arquivo (w= write_data, x=execute, p =append_data, A=write_xattr , W=write_attributes, C= write_acl e o=write_owner).

everyone@

Todos aqueles que não são proprietários de arquivos ou membros de um grupo de proprietários do arquivo em um arquivo e em seus atributos (r= read_data, a=append_data, R=read_xattr, c=read_acl e s=synchronize). A permissão de acesso synchronize não está implementada atualmente.

A ACL de formato compacto oferece as seguintes vantagens em relação à ACL de formato verboso:

Para obter mais informações sobre o uso de ACL de formato compacto, consulte Definindo e exibindo ACLs em arquivos ZFS no formato verboso.


Exemplo 8–10 Definindo e exibindo ACLs em formato compacto

No exemplo a seguir, existe uma ACL comum no file.1:


# ls -V file.1
-rw-r--r--   1 root     root      206663 Jun 17 10:07 file.1
            owner@:--x-----------:------:deny
            owner@:rw-p---A-W-Co-:------:allow
            group@:-wxp----------:------:deny
            group@:r-------------:------:allow
         everyone@:-wxp---A-W-Co-:------:deny
         everyone@:r-----a-R-c--s:------:allow

No exemplo seguinte, as permissões read_data/execute são adicionadas ao usuário gozer no diretório file.1:


# chmod A+user:gozer:rx:allow file.1
# ls -V file.1
-rw-r--r--+  1 root     root      206663 Jun 17 10:07 file.1
        user:gozer:r-x-----------:------:allow
            owner@:--x-----------:------:deny
            owner@:rw-p---A-W-Co-:------:allow
            group@:-wxp----------:------:deny
            group@:r-------------:------:allow
         everyone@:-wxp---A-W-Co-:------:deny
         everyone@:r-----a-R-c--s:------:allow

Outra forma de adicionar as mesmas permissões para o usuário gozer é inserir uma nova entrada ACL em uma posição específica, 4, por exemplo. As ACLs existentes nas posições 4–6 são levadas para baixo. Por exemplo:


# chmod A4+user:gozer:rx:allow file.1
# ls -V file.1
-rw-r--r--+  1 root     root      206663 Jun 17 10:16 file.1
            owner@:--x-----------:------:deny
            owner@:rw-p---A-W-Co-:------:allow
            group@:-wxp----------:------:deny
            group@:r-------------:------:allow
        user:gozer:r-x-----------:------:allow
         everyone@:-wxp---A-W-Co-:------:deny
         everyone@:r-----a-R-c--s:------:allow

No exemplo abaixo, o usuário gozer tem permissões de leitura, gravação e execução herdadas por arquivos e diretórios recém-criados.


# chmod A+user:gozer:rwx:fd:allow dir.2
# ls -dV dir.2
drwxr-xr-x+  2 root     root           2 Jun 17 10:19 dir.2
        user:gozer:rwx-----------:fd----:allow
            owner@:--------------:------:deny
            owner@:rwxp---A-W-Co-:------:allow
            group@:-w-p----------:------:deny
            group@:r-x-----------:------:allow
         everyone@:-w-p---A-W-Co-:------:deny
         everyone@:r-x---a-R-c--s:------:allow

Você também pode recortar e colar os sinalizadores de permissões e de herança da saída ls -V no formato compacto chmod. Por exemplo, para duplicar os sinalizadores de permissões e de herança no diretório dir.2 do usuário gozer para o usuário cindys em dir.2, copie e cole os sinalizadores de permissão e de herança (rwx-----------:f-----:allow ) no comando chmod, como mostra a seguir:


# chmod A+user:cindys:rwx-----------:fd----:allow dir.2
# ls -dV dir.2
drwxr-xr-x+  2 root     root           2 Jun 17 10:19 dir.2
       user:cindys:rwx-----------:fd----:allow
        user:gozer:rwx-----------:fd----:allow
            owner@:--------------:------:deny
            owner@:rwxp---A-W-Co-:------:allow
            group@:-w-p----------:------:deny
            group@:r-x-----------:------:allow
         everyone@:-w-p---A-W-Co-:------:deny
         everyone@:r-x---a-R-c--s:------:allow


Exemplo 8–11 Herança de ACL com a propriedade aclinherit definida como passthrough

Um sistema de arquivos que apresenta a propriedade aclinherit definida como passthrough herda todas as entradas da ACL sem as modificações feitas em tais entradas quando estas são herdadas. Quando esta propriedade estiver definida como passthrough, os arquivos serão criados com permissões determinadas pelas ACEs herdáveis. Se não existirem ACEs herdáveis que afetem as permissões, então as permissões serão definidas de acordo com as permissões solicitadas do aplicativo.

Os exemplos seguintes utilizam a sintaxe compacta de ACL para mostrar como herdar permissões definindo a propriedade aclinherit como passthrough.

Neste exemplo, uma ACL está definida no diretório test1.dir para forçar a herança. A sintaxe cria uma entrada ACL de owner@, group@ e everyone@ para os arquivos recém-criados. O diretórios recém-criados herdam uma entrada ACL de @owner, group@ e everyone@. Adicionalmente, os diretórios herdam outras seis ACEs que propagam as ACEs para os arquivos e diretórios recém-criados.


# zfs set aclinherit=passthrough tank/cindys
# pwd
/tank/cindys
# mkdir test1.dir

# chmod A=owner@:rwxpcCosRrWaAdD:fd:allow,group@:rwxp:fd:allow,everyone@::fd:allow 
test1.dir
# ls -Vd test1.dir
drwxrwx---+  2 root     root           2 Jun 17 10:37 test1.dir
            owner@:rwxpdDaARWcCos:fd----:allow
            group@:rwxp----------:fd----:allow
         everyone@:--------------:fd----:allow

Neste exemplo, um arquivo recém-criado herda a ACL que foi especificada para ser herdada pelos arquivos recém-criados.


# cd test1.dir
# touch file.1
# ls -V file.1
-rwxrwx---+  1 root     root           0 Jun 17 10:38 file.1
            owner@:rwxpdDaARWcCos:------:allow
            group@:rwxp----------:------:allow
         everyone@:--------------:------:allow

Neste exemplo, o diretório recém-criado herda as ACEs que controlam o acesso a este diretório, bem como as ACEs para futuras propagações para os filhos do diretório recém-criado.


# mkdir subdir.1
# ls -dV subdir.1
drwxrwx---+  2 root     root           2 Jun 17 10:39 subdir.1
            owner@:rwxpdDaARWcCos:fdi---:allow
            owner@:rwxpdDaARWcCos:------:allow
            group@:rwxp----------:fdi---:allow
            group@:rwxp----------:------:allow
         everyone@:--------------:fdi---:allow
         everyone@:--------------:------:allow

As entradas -di-- e f-i--- servem para propagar herança e não são consideradas durante o controle de acesso. Neste exemplo, é criado um arquivo com uma ACL comum em outro diretório no qual as ACEs herdadas não estão presentes.


# cd /tank/cindys
# mkdir test2.dir
# cd test2.dir
# touch file.2
# ls -V file.2
-rw-r--r--   1 root     root           0 Jun 17 10:40 file.2
            owner@:--x-----------:------:deny
            owner@:rw-p---A-W-Co-:------:allow
            group@:-wxp----------:------:deny
            group@:r-------------:------:allow
         everyone@:-wxp---A-W-Co-:------:deny
         everyone@:r-----a-R-c--s:------:allow


Exemplo 8–12 Herança de ACL com a propriedade aclinherit definida como passthrough-x

Quando a propriedade aclinherit está definida como passthrough-x , os arquivos são criados com permissão x para executar para owner@, group@ ou everyone@, mas somente se a permissão de executar estiver definida no modo de criação de arquivo em uma ACE herdável que afeta o modo.

Os exemplos a seguir mostram como herdar a permissão de executar ao definir a propriedade aclinherit como passthrough-x.


# zfs set aclinherit=passthrough-x tank/cindys

A ACL a seguir é definida em /tank/cindys/test1.dir para fornecer uma herança ACL executável para arquivos para owner@, group@ e everyone@.


# chmod A=owner@:rwxpcCosRrWaAdD:fd:allow,group@:rwxp:fd:allow,everyone@::fd:allow test1.dir
# ls -Vd test1.dir
drwxrwx---+  2 root     root           2 Jun 17 10:41 test1.dir
            owner@:rwxpdDaARWcCos:fd----:allow
            group@:rwxp----------:fd----:allow
         everyone@:--------------:fd----:allow

Um arquivo (file1) é criado com as permissões solicitadas 0666. As permissões resultantes são 0660. A permissão de execução não foi herdada já que o modo de criação não a solicitou.


# touch test1.dir/file1
# ls -V test1.dir/file1
-rw-rw----+  1 root     root           0 Jun 17 10:42 test1.dir/file1
            owner@:rw-pdDaARWcCos:------:allow
            group@:rw-p----------:------:allow
         everyone@:--------------:------:allow

A seguir, um executável denominado t é gerado com o uso do compilador cc no diretório testdir.


# cc -o t t.c
# ls -V t
-rwxrwx---+  1 root     root        7396 Jun 17 10:50 t
                 owner@:rwxpdDaARWcCos:------:allow
                 group@:rwxp----------:------:allow
              everyone@:--------------:------:allow

As permissões resultantes são 0770 porque o cc solicitou permissões 0777, que causou a herança da permissão de executar das entradas owner@, group@ e everyone@.