Como faço para que um arquivo NÃO seja modificável?

32

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 com w! e o arquivo ser modificado.

Como posso fazer o sistema operacional proibir qualquer modificação de arquivo?

ATUALIZAÇÃO em 02 de março de 2017

  1. 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.

  2. chmod 400 foo/bar impede que o conteúdo do arquivo seja alterado. Mas , 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 (assumindo que ele possa acessar o arquivo, ou seja, permissão de execução em todos os ancestrais diretórios). Na verdade, strace (1) revela que é isso que vim (7.4.576 Debian Jessie) está fazendo - vim chama chmod (2) para adicionar temporariamente a permissão de gravação para o dono do arquivo, modifica o arquivo, e então chama chmod ( 2) novamente para remover a permissão de gravação. É por isso que usar chattr +i works - somente root pode chamar chattr -i . Teoricamente, o vim (ou qualquer programa) poderia fazer a mesma coisa com o chattr, como acontece com o chmod em um arquivo imutável, se executado como root.

por user2141130 10.03.2013 / 23:03

2 respostas

44

Você pode definir o atributo "imutável" com a maioria dos sistemas de arquivos no Linux.

chattr +i foo/bar

Para remover o atributo imutável, use - em vez de + :

chattr -i foo/bar

Para ver os atributos atuais de um arquivo, você pode usar o lsattr:

lsattr foo/bar

O chattr (1) manpage fornece uma descrição de todos os atributos disponíveis. Aqui está a descrição para i :

   A  file with the 'i' attribute cannot be modified: it cannot be deleted
   or renamed, no link can be created to this file  and  no  data  can  be
   written  to  the  file.  Only the superuser or a process possessing the
   CAP_LINUX_IMMUTABLE capability can set or clear this attribute.
    
por 10.03.2013 / 23:14
1

Você pode:

  1. Altere o proprietário do arquivo para root ou um usuário recém-criado simulado
  2. Mantenha o grupo correto.
  3. Use chmod 440 para permitir a leitura por grupo (que é você).

Se o usuário correto não for o único desse grupo, você deve criar um novo grupo e adicionar apenas ele a ele e usar esse grupo para ele. No entanto, você não é o proprietário do arquivo, portanto, seu vi não pode alterar o proprietário do arquivo.

    
por 10.03.2013 / 23:17