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.
fonte
vim
na verdade , está alterando as permissões e, em seguida, colocando-as de volta.root
?Respostas:
Você pode definir o atributo "imutável" na maioria dos sistemas de arquivos no Linux.
Para remover o atributo imutável, use em
-
vez de+
:Para ver os atributos atuais de um arquivo, você pode usar lsattr:
A página de manual do chattr (1) fornece uma descrição de todos os atributos disponíveis. Aqui está a descrição para
i
:fonte
chattr
comando fazia parte doe2fsprogs
pacote no meu sistema. Por isso fiz essa afirmação. Atualizei a resposta com base no seu comentário.Você pode:
root
ou um usuário fictício recém-criadochmod 440
para permitir a leitura por grupo (que é você).Se o usuário correto não for o único neste grupo, você deve criar um novo grupo e adicioná-lo somente nele, e usar esse grupo para ele. No entanto, você não é o proprietário do arquivo; portanto,
vi
não é possível alterar o proprietário do arquivo.fonte
:w!
). O vim não vai tão longe quanto alterar temporariamente as permissões do diretório. Portanto, manter o diretório não gravável deve ser seguro.Para tornar uma árvore de diretórios inteira somente leitura:
Para torná-lo legível novamente, altere
+i
para-i
.fonte