linux / setfacl - Define todos os arquivos / diretórios atuais / futuros no diretório pai como 775 com o proprietário / grupo especificado

42

Eu tenho um diretório chamado "membros" e abaixo dele existem pastas / arquivos. Como posso definir recursivamente todas as pastas / arquivos atuais e quaisquer futuros criados lá por padrão ter 775 permissões e pertencer ao proprietário / grupo ninguém / administrador, respectivamente? Eu ativei o ACL, montado, mas não consigo obter o comando setfacl para fazer isso corretamente. Alguma idéia de como fazer isso?

Maverick
fonte

Respostas:

62

Na verdade, encontrei algo que até agora faz o que pedi, compartilhando aqui para que qualquer pessoa que se depare com esse problema possa experimentar esta solução:

sudo setfacl -Rdm g:groupnamehere:rwx /base/path/members/
sudo setfacl -Rm g:groupnamehere:rwx /base/path/members/

R é recursivo, o que significa que tudo nesse diretório terá a regra aplicada a ele.
d é o padrão, o que significa que para todos os itens futuros criados nesse diretório, essas regras são aplicadas por padrão. m é necessário para adicionar / modificar regras.

O primeiro comando é para novos itens (daí o d), o segundo comando, é para itens antigos / existentes na pasta. Espero que isso ajude alguém, pois esse material é um pouco complicado e não muito intuitivo.

Maverick
fonte
2
Era exatamente isso que eu precisava para que o proprietário de um diretório de avós pudesse modificar adequadamente o conteúdo dos novos diretórios de netos.
Joost
Se você é o único usuário do seu Rpi, pode substituir g: groupname por pi: pi ou apenas pi
SDsolar 11/17/17
Você pode especificar usuário, grupos e outros em uma linha, por exemplo -Rdm g:groupnamehere:rwx, -Rdm u:groupnamehere:rwx.
user2340939
18

Para ir com sua resposta aceita ...

Você pode combinar esses comandos juntos como:

sudo setfacl -Rm d:g:groupnamehere:rwx,g:groupnamehere:rwx /base/path/members/
Joshua
fonte
Isso é legal. Como você definiu d:o primeiro item em vez de -Rmd? Eu posso dizer que o segundo parâmetro não deve ter default- é estranho como o Linux aceita isso para mim.
JREAM 2/17
1
@JREAM: Linux (na verdade getopt_long) envia todo o argumento de opção-m que é analisado à mão por setfacl, separando por vírgulas os argumentos passados. Eles são adicionados a uma lista vinculada, que é repetida no final ao alterar a ACL.
Benoit Duffez
2

O setfacl no linux tem as opções -de -kpara manipular as permissões padrão que provavelmente são o que você está procurando (veja man para mais informações).

peterph
fonte
1

É fácil definir recursivamente permissões simples do UNIX, sob demanda de um usuário devidamente autorizado, as permissões de diretórios e arquivos. Não é possível impor isso automaticamente.

Você pode dizer aos usuários para usar o conjunto de umask de 0002, e isso ajuda a criar novos arquivos em 0775 (dependendo do aplicativo). Mas não é exequível.

Meu entendimento é que as ACLs não são herdadas nos sistemas UNIX / Linux. Eles são definidos sob demanda.

Quanto à propriedade do arquivo / diretório, você está praticamente sem sorte aqui.

Quanto à propriedade do grupo de arquivos / diretórios, configurando o bit set-gid do diretório (ou seja, g + s em DIRECTORIES), isso faz com que a propriedade do grupo seja herdada.

O que eu fiz nessas situações é executar um script cron periódico raiz que redefine permissões / propriedades não conformes ao padrão nesses diretórios.

Outro processo (NÃO RECOMENDADO) é usar o mesmo ID de usuário ao trabalhar nesses arquivos. Isso pode ser feito pelo usuário efetuando login no sistema sob seu próprio UID e, em seguida, usando sudo ou su para executar como o ID. Isso ainda não é 100%, especialmente em relação às ACLs e aos bits de permissão.

mdpc
fonte