como posso evitar que todas as pessoas renomem um arquivo?

1

Estou executando o seguinte comando: chmod 000 x.txt

mas como proprietário ainda posso renomeá-lo! porque ?

e como posso impedir que todas as pessoas renomeiem esse arquivo?

    
por Nour.kotmawi 23.10.2014 / 14:47

2 respostas

0

Como corretamente respondido por David Foerster , os direitos para manipular arquivos e diretórios dependem da permissão do contendo o diretório .

Disse que, existe um truque (sujo?) para evitar que um diretório possa ser deletado mesmo se você tiver o direito no arquivo: coloque nele um arquivo (possivelmente oculto), e faça isso e o diretório não gravável. Veja este exemplo:

[romano:~] mkdir tmp/test; cd tmp/test
[romano:~/tmp/test] % mkdir subdir_e subdir_f
[romano:~/tmp/test] % touch subdir_f/.hiddenfile

Eu criei dois subdiretórios, um vazio e outro com um arquivo oculto.

[romano:~/tmp/test] % chmod 555 subdir_f/.hiddenfile subdir_f subdir_e
[romano:~/tmp/test] % sudo chown root subdir_f/.hiddenfile subdir_f subdir_e

Eu faço este diretório e o arquivo oculto não-gravável, alterando a permissão e dando a propriedade para root (caso contrário, eu simplesmente posso alterar a permissão de volta). Vamos ver o status:

[romano:~/tmp/test] % ls -la  
total 16
drwxrwxr-x 4 romano romano 4096 oct 23 16:37 .
drwxr-xr-x 6 romano romano 4096 oct 23 16:31 ..
dr-xr-xr-x 2 root   romano 4096 oct 23 16:37 subdir_e
dr-xr-xr-x 2 root   romano 4096 oct 23 16:37 subdir_f

Observe que eu possuo e tenho direitos de gravação para . , que é meu diretório atual, portanto, se eu fizer isso:

[romano:~/tmp/test] % rmdir subdir_e

é bem-sucedido, porque eu posso modificar . como eu gosto. Mas se eu tentar o mesmo com o subdiretório não vazio:

[romano:~/tmp/test] % rmdir subdir_f
rmdir: failed to remove ‘subdir_f’: Directory not empty
[romano:~/tmp/test] 1 % rm -rf subdir_f
rm: cannot remove ‘subdir_f/.hiddenfile’: Permission denied
[romano:~/tmp/test] 1 % chown romano subdir_f
chown: changing ownership of ‘subdir_f’: Operation not permitted

... Preciso de privilégios de root para removê-lo agora.

    
por Rmano 23.10.2014 / 16:46
2

Diretórios são arquivos especiais que contêm uma lista de entradas nomeadas. Cada entrada faz referência a outro objeto de arquivo, que, por sua vez, contém os locais do conteúdo do arquivo no disco. Quando você cria, move ou exclui um “arquivo” (e lembra que os diretórios são arquivos também), você está realmente criando, renomeando ou excluindo entradas em uma lista de diretórios - você está alterando o diretório do qual a entrada é parte. Como você precisa gravar permissões em um objeto para alterá-lo, é necessário gravar permissões em um diretório para criar, mover ou excluir entradas dentro dele.

Exemplo

Vamos supor que você tenha um arquivo x no diretório a . Para renomear x , um usuário precisa ter acesso de gravação a a . Para revogar o acesso de gravação de qualquer pessoa que não seja o proprietário de a do:

chmod go-w a

Isso revoga ( - ) a permissão de "gravação" ( w ) para as classes "owner group" ( g ) e "other" ( o ).

    
por David Foerster 23.10.2014 / 15:34