Como dar permissões para ler a gravação, mas não excluir o arquivo

9

Eu quero 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 depois de criado (o bit não vai funcionar aqui ...) por exemplo:

Eu tenho usuário manager com o diretório repository
Eu tenho usuário worker1 que precisa gravar arquivos em /manager/repository , mas não é possível excluir os arquivos
Eu tenho usuário worker2 que precisa gravar arquivos em /manager/repository , mas não é possível excluir os arquivos
Eu tenho usuário worker3 que precisa gravar arquivos em /manager/repository , mas não pode excluir os arquivos

mas worker 1-2-3 não pode excluir os arquivos depois de criados, apenas manager e root podem excluir os arquivos worker 1-2-3 criados.

Eu tentei alguns chown e chmod truques com a aplicação do sticky bit sem sucesso.

    
por user63898 07.09.2016 / 10:50

4 respostas

4

Antes de mais nada, certifique-se de que a ACL esteja ativada em seu sistema e, em seguida, execute este comando

setfacl -d -R -m user::rwx,user:worker1:---,user:worker2:---,user:worker3:--- \
/manager/repository

Como funciona

  • Este comando fornecerá permissões de leitura, gravação e execução para o proprietário no diretório /manager/repository . Ele revogará todas as permissões para worker1 , worker2 e worker3 .

  • Isso dará a outros usuários, leia & acesso de gravação, mas negará o acesso de exclusão.

De man setfacl :

-d, --default
       All  operations  apply to the Default ACL.

-R, --recursive
       Apply operations to all files and directories recursively.

-m, --modify
       Options to modify the ACL of a file or directory.
    
por 07.09.2016 / 11:31
4

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 contido. Remova a permissão de gravação para os trabalhadores em /manager/repository/ para negar que os funcionários criem, excluam e renomeiem arquivos.

Note que não é possível permitir a criação de arquivos, mas negar sua exclusão.

    
por 07.09.2016 / 13:10
3

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 o flag nfsv4acls , você pode fazer:

mkdir testdir
chown manager:worker-group testdir
chmod 775 testdir
setfacl -m group@:D::deny testdir

Para explicitamente negar a permissão delete_child aos membros do grupo worker-group .

No entanto, como os funcionários seriam os proprietários dos arquivos criados, eles ainda poderiam modificar as ACLs e conceder a si mesmos a permissão delete , que teria precedência sobre a permissão delete_child do diretório pai e eu não tenho certeza se há uma maneira de contornar isso (pelo menos em sistemas de arquivos UFS no FreeBSD). Por exemplo, eles poderiam fazer:

$ touch file
$ rm -f file
rm: file: Operation not permitted
$ setfacl -m owner@:d::allow file
$ rm -f file
$
    
por 07.09.2016 / 16:16
0

Para obter permissões de gravação da pasta /manager/repository . Portanto, todos os usuários que não são root poderão gravar ou excluir os arquivos dentro de /manager/repository , mas não excluir nenhum arquivo desse diretório.

chmod 755 /manager/repository
    
por 21.08.2018 / 06:57