Posso substituir meu umask usando ACLs para facilitar a leitura de todos os arquivos criados em um determinado diretório?

11

Suponha que meu umask seja 0077.

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

Atualmente, se eu criar um arquivo, 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

Quero que o arquivo seja 0644 e o diretório 0755, independentemente do meu 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?

stickmangumby
fonte
Você não tentou pesquisar "umask por diretório", tentou? Se eu tivesse as permissões, eu downvote-lo por isso, porque o terceiro hit é uma festa de cortar para fazer exatamente o que você quer (concedido, apenas para você, não para outros usuários.)
Brett Dikeman
3
@BeeDee eu vi isso. Eu sou interessante de outras maneiras, espero usar ACLs. Prefiro não verificar / alterar meu umask em todos os CDs ou substituir as funções do bash.
usar o seguinte código

Respostas:

14

Sim, o ACL pode fazer isso.

  1. Verifique se o seu sistema de arquivos está 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 o 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, é o seguinte:

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

    setfacl -d -m o:r foo
    

    -ddefine padrão, -mmodifica acl e o:rconcede a "outro" o direito de ler. A configuração padrão em um diretório é aproximadamente equivalente à configuração setgid em um diretório, mas, em vez de arquivos recém-criados que herdam o grupo, eles herdam a acl. Juntos, setgid e acl podem ser poderosos, porque você pode conceder permissões padrão a um grupo e fazer com que os arquivos recém-criados pertençam a esse grupo, para um umask eficaz por diretório, baseado em grupo.

  4. Verifique seu trabalho: ls -lagora 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--
    
user67641
fonte
1
Isso não parece estar funcionando para mim. setfacle getfaclestão retornando a saída esperada, mas apenas os diretórios (não os arquivos) no diretório pai estão herdando a acl, e mesmo assim meu umask tem precedência sobre o padrão (se eles não são legíveis pelo mundo, default:other::r--isso não permite que outro usuário acessá-los). Perdi algo óbvio?
precisa
Uma coisa que encontrei (talvez esse seja o problema): o facl parece usar o primeiro de (usuário, grupo, outro) ao qual o usuário atual corresponde. Ou seja, se você pertence ao grupo do arquivo, a ACL do grupo será processada, e não a ACL do outro. A ACL ainda deve ser herdado se você aplicou o diretório com -d, embora ....
user67641
Hum, tentei novamente e tudo funcionou bem. Desculpe, não sei o que fiz de errado na primeira vez! Obrigado :)
stickmangumby
2

Você também pode forçar uma umask para o diretório, configurando a propriedade ACL da máscara assim:

setfacl -d -m mask:07 .
Saustrup
fonte
-4

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

bintut
fonte
A pergunta não menciona nada sobre a travessia de diretórios com um terminal, e é para isso que serve o OnDir.
Yarin