Eu tenho um monte de scripts e aplicativos de longa duração que estão armazenando resultados de saída em um diretório compartilhado entre alguns usuários. Gostaria de ter certeza de que todos os arquivos e diretórios criados neste diretório compartilhado tenham u=rwxg=rwxo=r
permissões automaticamente .
Eu sei que poderia usar umask 006
meus vários scripts, mas não gosto dessa abordagem, pois muitos usuários escrevem seus próprios scripts e podem se esquecer de definir o umask sozinhos.
Eu realmente quero que o sistema de arquivos defina os arquivos e diretórios recém-criados com uma certa permissão, se estiver em uma determinada pasta. Tudo isso é possível?
Atualização : acho que pode ser feito com ACLs POSIX , usando a funcionalidade ACL padrão, mas está tudo um pouco sobrecarregado no momento. Se alguém puder explicar como usar ACLs padrão, provavelmente responderá bem a essa pergunta.
fonte
Respostas:
Para obter a propriedade correta, você pode definir o bit setuid do grupo no diretório com
Isso garantirá que os arquivos criados no diretório sejam de propriedade do grupo. Você deve então certificar-se de que todos executam com umask 002 ou 007 ou algo dessa natureza --- é por isso que o Debian e muitos outros sistemas linux são configurados com grupos por usuário por padrão.
Não conheço uma maneira de forçar as permissões desejadas se o umask do usuário for muito forte.
fonte
+s
parte faz? Obrigado.Veja como fazer isso usando ACLs padrão, pelo menos no Linux.
Primeiro, pode ser necessário habilitar o suporte ACL em seu sistema de arquivos. Se você estiver usando ext4, ele já está habilitado. Outros sistemas de arquivos (por exemplo, ext3) precisam ser montados com a
acl
opção. Nesse caso, adicione a opção ao seu/etc/fstab
. Por exemplo, se o diretório estiver localizado em seu sistema de arquivos raiz:Em seguida, monte-o novamente:
Agora, use o seguinte comando para definir a ACL padrão:
Todos os novos arquivos
/shared/directory
devem agora obter as permissões desejadas. Claro, também depende do aplicativo que está criando o arquivo. Por exemplo, a maioria dos arquivos não será executável por ninguém desde o início (dependendo do argumento de modo para a chamada open (2) ou creat (2)), assim como ao usar umask. Alguns utilitários comocp
,tar
ersync
tentarão preservar as permissões do (s) arquivo (s) de origem, o que mascarará sua ACL padrão se o arquivo de origem não puder ser gravado em grupo.Espero que isto ajude!
fonte
umask
para todos os usuários. = / unix.stackexchange.com/questions/71743/…cp
, ele tentará copiar as permissões do arquivo de origem. Nemumask
ajuda na hora de usarcp
. Eu vi o mesmo problema comtar
. Veja esta pergunta .umask
.setfacl
works correctly
- presumo que deva falhar, mas não tenho certeza, porque a resposta erra esse ponto.É feio, mas você pode usar o comando setfacl para conseguir exatamente o que deseja.
Em uma máquina Solaris, tenho um arquivo que contém as acls para usuários e grupos. Infelizmente, você precisa listar todos os usuários (pelo menos não consegui encontrar uma maneira de fazer isso funcionar):
Nomeie o arquivo acl.lst e preencha seus nomes de usuário reais em vez de user_X.
Agora você pode definir essas acls em seu diretório emitindo o seguinte comando:
fonte
em seu script de shell (ou
.bashrc
), você pode usar algo como:umask 022
umask
é um comando que determina as configurações de uma máscara que controla como as permissões de arquivo são definidas para arquivos recém-criados.fonte
umask 002
no meu .bashrc.umask 002
limita o acesso a outros, deixando o grupo inalterado. Lembre-se, éugo
- esse é o grupo de usuários outros. Lembre-se também de que umask basicamente significa subtrair dos padrões. Para arquivos:666 - 002
significa 664, o que significa que o grupo não é afetado.