Linux: Forçar um conjunto diferente de permissões de diretório / arquivo

1

Usando o CentOS 4.6:

cenário: Eu tenho um dameon rodando como root que está constantemente criando arquivos e pastas em digamos directory / some / directory. Como os arquivos estão sendo criados pelo root, as permissões dessas pastas e arquivos são determinadas pelo umask da raiz, que é o padrão 644 para arquivos e 755 para pastas.

Eu tenho um aplicativo que acessa esses arquivos via samba e precisa copiar e excluir os arquivos. O nome de usuário do samba que o aplicativo está usando é mapeado para um usuário, digamos 'app_user', que não pode excluir os arquivos por causa das permissões. Eu adicionei 'app_user' ao grupo 'app_group'

Isso é o que eu gostaria de fazer:

Espero que haja alguma maneira de configurar o diretório / algum / diretório para que todos os arquivos e pastas criados pertençam ao grupo 'app_group' e tenham permissões de gravação para esse grupo.

Eu não tenho a opção de executar o dameon com um nome de usuário diferente e não quero mexer com o umask para root. Eu preferiria uma solução que não envolvesse a execução de um script para alterar as permissões. Eu só quero que meu aplicativo seja capaz de copiar e excluir esses arquivos.

Obrigado

    
por J Cooper 30.03.2011 / 04:04

4 respostas

3

Eu iria para as ACLs POSIX. Sou um grande fã deles e não os acho tão difíceis de usar. A única coisa que você realmente precisa ter certeza é que seu software de backup pode restaurá-los.

Os passos devem ser:

1) Edite fstab e adicione ", acl" às opções para a (s) partição (ões) que você quer usar o ACLS em

2) Execute o seguinte para remontar a partição com a nova opção acl

mount <relevant_partion> -oremount

3) Execute o seguinte para aplicar a acl padrão ao diretório e aos seus diretórios filhos:

setfacl -R -dm u:app_user:755 /some/directory

4) Execute o seguinte para verificar se a ACL padrão apareceu:

getfacl /some/directory 

Outros testes criam um arquivo e um dir no diretório / some / e garantem que eles acabem com o acl e, no caso do dir, o acl padrão. para que o arquivo criado dentro dele também receba o acl

    
por 30.03.2011 / 09:22
2

Acho que você pode tentar usar ACLs POSIX para obter o que precisa. Pesquise a documentação sobre a ACL padrão que é basicamente a ACL que será aplicada aos objetos criados no diretório em que a ACL padrão está ativa. Aplique uma ACL padrão permitindo que o usuário do aplicativo faça coisas com os arquivos no diretório e funcione, a menos que haja algumas restrições sobre as ACLs padrão e os arquivos criados pela raiz (não me lembro se existem ), então tente e veja se funciona.

Para usar o ACL, você precisa do seu sistema de arquivos para suportá-lo e, às vezes, para que ele seja habilitado no momento da montagem ( -o acl on mount ou acl opção em fstab ). Eu acho que o SAMBA também precisa de alguma configuração extra para reconhecer as ACLs, mas eu sei que isso é feito (no trabalho).

EDIT : Também não deixe de ler toda a documentação da ACL, não é uma coisa trivial para usar.

    
por 30.03.2011 / 04:19
1

chgrp app_group /some/directory; chmod g+s /some/directory organizará os arquivos e diretórios para obter a propriedade do grupo do diretório. Além disso, eu começaria o outro script com um% diferenteumask ( umask 775; exec my-daemon ). (Isso não propaga o bit setgid, no entanto.)

Outras possibilidades incluem alterar o grupo que o daemon executa (já que não há um comando padrão sg , eu faria isso com um wrapper Perl ou Python) ou usando ACLs POSIX ( setfacl ). Usar este último pode requerer que o sistema de arquivos em questão seja montado com a opção acl em algumas distribuições Linux.

    
por 30.03.2011 / 04:22
1

Você tem algumas opções que você pode usar:

  • Altere a umask usando umask 002 ou algum outro valor apropriado antes de executar o comando. Isso pode ser feito no script que está executando o daemon, para que ele não altere o padrão das raízes.
  • Use também newgrp no script para alterar o grupo para o mesmo grupo que o app_user usa ou outro grupo para o app_user e o compartilhamento raiz. Você pode ter que adicionar root e / ou app_user ao grupo escolhido.

  • Crie um compartilhamento de samba para esse diretório que somente app_user pode acessar. Use force user root ou force group root para ativar o acesso para excluir os arquivos.

  • Ative as ACLs POSIX e crie uma ACL que permita app_user de acesso apropriado aos arquivos.

Você pode optar por combinar algumas dessas opções.

    
por 30.03.2011 / 07:47