No GNU / Linux, como restringir a exclusão de arquivos e diretórios pertencentes a um usuário apenas a um super usuário?

2

No GNU / Linux, como os diretórios podem ser definidos de tal forma que o proprietário só possa adicionar / ler arquivos / diretórios para / deles, mas somente um superusuário pode fazer qualquer deleção nessa estrutura?

Considere este cenário: Você está rsync ing alguns arquivos e diretórios que possui em um diretório. Você deseja poder gravar nesse diretório (e mais tarde, ao atualizar o backup - por exemplo, rsync ing novamente - gravar em todos os subdiretórios também), mas não quer poder exclua qualquer coisa nessa estrutura, a menos que você seja um superusuário.

O sinalizador de exclusão restrita t in chmod não ajuda nessa situação, pois restringe a exclusão de não proprietários.

Configurar o modo para u=rX,go= para os arquivos e diretórios (durante a transferência usando rsync ) também não ajuda, porque o rsync ing posterior não será possível a menos que o bit w seja adicionado a todos os diretórios no receptor antes de iniciar o rsync e isso será muito demorado.

A ACL é o caminho a seguir aqui?

Atualização: Mesmo com ACL eu não veja uma maneira de fazer isso.

    
por Omid 04.07.2011 / 22:55

3 respostas

1

Você não pode fazer isso em um ambiente Linux padrão. Você pode ser capaz de escrever uma regra para o SELinux ou Tomoyo ou qualquer outra coisa, para proibir a exclusão de arquivos, mas isso não impedirá o usuário de sobrescrever o arquivo com dados ilegíveis ou truncá-lo completamente, intencionalmente ou não .

    
por 04.07.2011 / 23:16
1

Você pode, de alguma forma, fazer isso usando bits .

$ mkdir drop_box
$ chmod 777 drop_box
$ chmod u+s,g+s drop_box
$ ls -l
total 4
drwsrwsrwx    2 tclark   authors      4096 Sep 14 10:55 drop_box

Agora, qualquer pessoa pode mover arquivos para esse diretório, mas, após a criação no drop_box, eles se tornarão proprietários do tclark e dos autores do grupo. Este exemplo também ilustra como você pode alterar vários níveis de permissões com um único comando, separando-os com uma vírgula. Assim como com as outras permissões, isso poderia ter sido simplificado em um comando usando os valores numéricos SUID e SGID (4 e 2 respectivamente). Como estamos mudando neste caso, usamos 6 como o primeiro valor para o comando chmod.

$ chmod 6777 drop_box/
$ ls -l
total 4
drwsrwsrwx    2 oracle   users        4096 Sep 14 10:55 drop_box

Não tenho certeza se isso ajudará você a atingir sua meta, pois não consigo pensar nas permissões adequadas para dar aos arquivos e diretórios para que seu exemplo funcione. Acabei de postar isso para o caso de você não ter mais nada para fazer.

Boa sorte.

    
por 04.07.2011 / 23:22
1

Confira nosso bom amigo chattr . Se você estiver usando um FS baseado em ext2 / 3/4, você pode definir o bit imutável ou undeletable, e nem mesmo o root pode excluir o arquivo até que você desmarque o bit correspondente.

    
por 05.07.2011 / 13:19