Posso substituir minha umask usando ACLs para tornar todos os arquivos criados em um determinado mundo de diretório legível?

10

Suponha que minha umask seja 0077.

Eu tenho um diretório, foo , que eu quero ter permissões especiais aplicadas a ele. Todos os arquivos criados em foo devem ser legíveis por todos e todos os diretórios devem ser legíveis e executáveis em todo o mundo.

Atualmente, se eu criar um arquivo, ele será 0600 e um diretório será 0700:

$ cd foo/
$ touch file
$ mkdir directory
$ ls -l
drwx------ 2 nfm nfm 4096 2012-01-12 16:16 directory
-rw------- 1 nfm nfm    0 2012-01-12 16:15 file

Eu quero que o arquivo seja 0644 e o diretório 0755, independentemente da minha umask:

drwxr-xr-x 2 nfm nfm 4096 2012-01-12 16:16 directory
-rw-r--r-- 1 nfm nfm    0 2012-01-12 16:15 file

Como posso conseguir isso?

    
por stickmangumby 12.01.2012 / 06:18

3 respostas

13

Sim, os acl podem fazer isso.

  1. Certifique-se de que seu sistema de arquivos esteja montado com acl. Para verificar isso, digite mount . Você deve ver "acl" listado entre outras permissões, por exemplo:

    /dev/sda1 on / type ext4 (rw,errors=remount-ro,acl)
    

    Se não estiver montado com acl, abra / etc / fstab e adicione 'acl' à lista de opções:

    # /etc/fstab: static file system information.
    #
    # <file system> <mount point>   <type>   <options>       <dump>  <pass>
    /dev/sda1       /          ext3     noatime,errors=remount-ro,acl 0       1
    

    Agora, monte novamente o sistema de arquivos em execução com as novas opções:

    mount -v -o remount /
    
  2. Instale os utilitários acl. No ubuntu / debian, isto é:

    sudo apt-get install acl
    
  3. Seus novos amigos são setfacl e getfacl . Use setfacl para alterar a acl padrão de um diretório:

    setfacl -d -m o:r foo
    

    -d define padrão, -m modifica acl e o:r concede "outro" direito de leitura. Definir o padrão em um diretório é aproximadamente equivalente a definir setgid em um diretório, mas em vez de arquivos recém-criados que herdam o grupo , eles herdam o acl. Juntos, setgid e acl podem ser poderosos, porque você pode conceder permissões padrão a um grupo e fazer com que arquivos recém-criados pertençam a esse grupo, para uma umask eficaz por diretório baseada em grupo.

  4. Verifique seu trabalho: ls -l agora deve mostrar um "+" extra indicando a presença de acl além das permissões de arquivo padrão.

    % ls -la foo/
    drwxr--r--+
    

    Você pode obter informações detalhadas sobre o acl usando getfacl .

    % getfacl foo
    # file: foo
    # owner: you
    # group: you
    user::rwx
    group::r--
    other::r--
    default:user::rwx
    default:group::---
    default:other::r--
    
por 14.02.2012 / 21:16
2

Você também pode forçar um umask para o diretório definindo a propriedade ACL da máscara desta forma:

setfacl -d -m mask:07 .
    
por 26.11.2013 / 11:16
-4

Basta instalar o OnDir e configurá-lo adequadamente de acordo com suas necessidades. Eu respondi a um problema semelhante localizado aqui .

    
por 12.01.2012 / 06:47