Enquanto estiver logado, posso fazer o seguinte:
mkdir foo
touch foo/bar
chmod 400 foo/bar
chmod 500 foo
Então eu posso abrir o vim (não como root
), editar bar
, forçar uma gravação w!
e o arquivo é modificado.
Como posso fazer com que o sistema operacional não permita nenhuma modificação de arquivo?
ATUALIZAÇÃO 2 de março de 2017
chmod 500 foo
é um arenque vermelho: a permissão de gravação em um diretório não tem nada a ver com a capacidade de modificar o conteúdo de um arquivo - apenas a capacidade de criar e excluir arquivos.chmod 400 foo/bar
de fato impede que o conteúdo do arquivo seja alterado. Mas isso não impede que as permissões de um arquivo sejam alteradas - o proprietário de um arquivo sempre pode alterar as permissões de seu arquivo (supondo que ele possa acessar o arquivo, isto é, executar permissão em todos os diretórios ancestrais). De fato, strace (1) revela que é isso que o vim (7.4.576 Debian Jessie) está fazendo - o vim chama chmod (2) para adicionar temporariamente a permissão de gravação para o proprietário do arquivo, modifica o arquivo e depois chama chmod ( 2) novamente para remover a permissão de gravação. É por isso que o uso dochattr +i
works - somente o root pode chamarchattr -i
. Teoricamente, o vim (ou qualquer outro programa) poderia fazer o mesmo com o chattr e com o chmod em um arquivo imutável, se executado como root.
root
?
vim
na verdade , está alterando as permissões e, em seguida, colocando-as de volta.