Desejo dar aos usuários a capacidade de criar arquivos de gravação e leitura em outro diretório de usuários, mas não ter a opção de excluir o arquivo após a criação (o bit não funciona aqui ...), por exemplo:
Eu tenho usuário manager
com diretório repository
Eu tenho usuário worker1
que precisa gravar arquivos, /manager/repository
mas não pode excluir os arquivos
Eu tenho usuário worker2
que precisa gravar arquivos, /manager/repository
mas não consigo excluir os arquivos
Eu tenho usuário worker3
que precisa gravar arquivos, /manager/repository
mas não consigo excluir os arquivos
mas worker 1-2-3
não pode excluir os arquivos somente depois de criados manager
e root
pode excluir os arquivos worker 1-2-3
criados.
Eu tentei alguns chown
e chmod
truques com a aplicação do bit sticky sem sucesso.
fonte
worker*
usuários gravam no diretório de uma certa maneira? Você mencionou em um comentário que os arquivos de log estão aqui, isso significa que um determinado executável é iniciado para criar arquivos aqui? Nesse caso, você pode dar aoworker
gruposudo
permissão para executar o executável comomanager
. Em seguida, o executável criaria logs como omanager
usuário que poderia ser legível pelos trabalhadores.Respostas:
Ao contrário do Windows, não há permissão de exclusão distinta no Unix / Linux. O direito de excluir (ou criar ou renomear) um arquivo está vinculado ao diretório que o contém. Remova a permissão de gravação dos trabalhadores
/manager/repository/
para negar que os trabalhadores criem, excluam e renomeiem arquivos.Observe que não é possível permitir a criação de arquivos, mas negar sua exclusão.
fonte
Antes de tudo, verifique se a ACL está ativada no seu sistema e execute este comando
Como funciona
Este comando dará permissões de leitura, gravação e execução para o proprietário no diretório
/manager/repository
. Ele revogará todas as permissões paraworker1
,worker2
eworker3
.Isso dará a outros usuários acesso de leitura e gravação, mas negará o acesso de exclusão.
De
man setfacl
:fonte
echo " " > $file
clobberá o conteúdo do arquivo com "", que é tecnicamente uma gravação, mas efetivamente exclui o conteúdo. Parece que um repo real como svn seria a melhor aposta aqui.Para fazer isso com permissões, você precisaria de um sistema com suporte para ACLs semelhantes às ACLs do NFSv4. Por exemplo, no FreeBSD, se o sistema de arquivos estiver montado com a
nfsv4acls
bandeira, você poderá:Negar explicitamente a
delete_child
permissão aos membros doworker-group
grupo.No entanto, observe que, como os trabalhadores seriam proprietários dos arquivos criados, eles ainda poderiam modificar as ACLs e, concedendo a si mesmos a
delete
permissão, teriam precedência sobre adelete_child
permissão do diretório pai e eu não sou. com certeza existe uma maneira de contornar isso (pelo menos nos sistemas de arquivos UFS no FreeBSD). Por exemplo, eles poderiam fazer:fonte
Para obter permissões de gravação da
/manager/repository
pasta. Portanto, todos os usuários que não são root poderão gravar ou excluir os arquivos internos/manager/repository
, mas não excluir nenhum arquivo desse diretório.fonte
podemos modificar os arquivos e pastas, mas não podemos excluir.
Para remover os atributos, execute os seguintes comandos:
Para arquivos:
Para diretórios:
fonte
a
atributo significa somente acréscimo. Os usuários podem editar esses arquivos? (2) Qual é o efeito de definir oa
atributo em um diretório?