Por que o chmod é bem-sucedido em um arquivo quando o usuário não tem permissão de gravação no diretório pai?

3

Estou tentando entender as permissões de arquivo / dir no Linux. Um usuário pode listar os arquivos em um diretório usando

cd test
ls -l 

Mesmo que o usuário emissor dos comandos acima não tenha permissão de leitura, gravação ou execução em nenhum dos arquivos dentro do diretório de teste, ainda assim ele poderá listá-los porque ele / ela leu as permissões no diretório de teste.

Então, por que no cenário a seguir, o usuário B pode alterar as permissões de um arquivo que ele possui, mas não tem permissões de gravação do diretório pai?

O usuário A cria um diretório de teste e permite que outros usuários escrevam nele:

mkdir test
chmod o+w test

O usuário B cria um arquivo na pasta de testes.

cd test
touch b.txt

O usuário A remove a permissão de gravação de outras pessoas do diretório

chmod o-w test

O usuário B pode alterar com êxito as permissões, mesmo que as permissões façam parte do diretório e este usuário não tenha permissão de gravação no diretório pai do arquivo que ele possui

chmod g-r b.txt

por que o chmod não falha, pois o usuário não pode modificar o diretório que contém as informações do arquivo - permissões, etc.?

    
por Ahmed 29.03.2015 / 19:55

1 resposta

4

Quando você altera os metadados de um arquivo (permissões, propriedade, timestamps,…), você não está alterando o diretório, você está alterando o inode do arquivo. Isso requer a permissão x no diretório (para acessar o arquivo) e a propriedade do arquivo (somente o usuário que possui o arquivo pode alterar suas permissões).

Acho que isso é intuitivo se você se lembrar de que os arquivos podem ter hard links em vários diretórios. O diretório contém uma tabela que mapeia nomes de arquivos para inodes. Se um arquivo estiver vinculado sob vários nomes em vários diretórios, ainda será um inode com um conjunto de permissões, propriedade etc., que mostra que os metadados do arquivo estão no inode, não no diretório.

A criação, renomeação, movimentação ou exclusão de um arquivo envolve a modificação do diretório, portanto, ele exige permissão de gravação no diretório.

    
por 29.03.2015 / 20:10