Torna o arquivo somente leitura no Linux, mesmo para o root

5

Eu sei sobre o comando chattr +i filename , que torna um arquivo somente para todos os usuários. No entanto, o problema é que posso revogar isso usando chattr -i filename .

Existe uma maneira de tornar um arquivo legível por todos no sistema, mas não gravável por ninguém, nem mesmo pela raiz, e sem retorno (Nenhuma opção para torná-lo gravável novamente)?

    
por Madno 23.12.2017 / 17:23

5 respostas

16

Coloque em um CD ou DVD. O tipo outrora gravável, não os apagáveis. Ou algum outro tipo de dispositivo somente leitura.

Ok, eu suponho que você quer uma solução de software, então aqui estão algumas idéias: Você poderia criar um conjunto de regras do SELinux que desativa o syscall (*) que chattr usa, mesmo para o root. Outra possibilidade seria usar os recursos : a configuração de +i exige o recurso CAP_LINUX_IMMUTABLE , portanto, se você puder organizar o conjunto de limites de recursos de todos os processos para não incluir esses, ninguém poderá alterá-los. Mas você precisaria do suporte de init para que isso se aplique a todos os processos. O Systemd pode fazer isso , mas acho que precisaria ser feito para cada serviço separadamente.

(* talvez tenha sido um ioctl )

No entanto, se você fizer isso, lembre-se de que uma raiz comum pode modificar o sistema de arquivos a partir do dispositivo bruto (é para isso que o debugfs ), portanto, também é necessário evitar isso e impedir a modificação do kernel (módulos de carregamento). Os módulos de carregamento podem ser evitados com o kernel.modules_disabled sysctl, mas não tenho certeza sobre como impedir o acesso a dispositivos brutos. E faça todos os arquivos de configuração relevantes também imutáveis.

De qualquer forma, depois disso, você também precisaria evitar alterar a maneira como o sistema inicializa, caso contrário, alguém poderia reinicializar o sistema com um kernel que permite substituir as restrições acima.

    
por 23.12.2017 / 17:44
3

Não há como fazer isso. ALGUÉM sempre será capaz de reverter o arquivo para um status gravável, a menos que esteja em uma mídia somente leitura como um CD-ROM. Você pode efetivamente impedir que root faça isso usando as permissões do SELinux (não sei como fazer isso, ou daria um exemplo), mas o usuário que tiver permissões ainda poderá desfazer as coisas.

    
por 23.12.2017 / 17:31
2

O que você quer é Controle de acesso obrigatório . Ele permite que você especifique um conjunto de permissões que o kernel não permitirá que sejam sobrescritas, mesmo por root. O SELinux é um desses sistemas bem conhecidos, o Smack é outro exemplo, e o AppArmor é um terceiro sistema. No Linux, eles são implementados como Módulos de segurança do Linux , um recurso de uso geral para controlar o acesso fora da tradicional segurança semelhante ao UNIX modelo. Além dos sistemas de uso geral já existentes, você pode criar seus próprios para um propósito especial.

Naturalmente, o root tem a capacidade de ativar ou desativar toda a instalação ou alterar as permissões MAC dos arquivos, e alguns desses sistemas até permitem que esses recursos sejam concedidos a usuários não-root. No entanto, também é possível, dependendo do sistema, desativar essa habilidade. Eu sei que o SELinux e o Smack tornam isso possível; Eu duvido que todos os LSMs façam isso. Uma vez desativada, a única maneira de recuperar a capacidade é reinicializar o kernel. Você então desejará que seu processo de inicialização desative a capacidade antes que o acesso do usuário seja ativado. Se o seu kernel e o processo de inicialização forem seguros, tal configuração poderia (pelo menos em teoria) ser alterada apenas removendo fisicamente a mídia de armazenamento para alterá-la.

Por exemplo, se você estivesse usando o SMACK, poderia fazer:

chsmack -a _ <file>

Isso configuraria o arquivo para ter o rótulo especial "_", que permite somente acesso de leitura ou execução, mas nunca grava. Agora, mesmo o root não pode gravar este arquivo (uma vez que o SMACK foi ativado e o recurso de substituição de segurança foi desativado, como mencionado acima).

No entanto, você também deve garantir que seu kernel esteja seguro. Por padrão, é fácil para a raiz subverter o kernel, porque o kernel confia no usuário root. Se o root puder apenas remover o módulo de segurança, isso não ajuda muito. Uma lista desses métodos é aqui , mas note que nenhuma dessas listas pode ser verdadeiramente completa para todas as circunstâncias.

Por fim, dependendo das circunstâncias, talvez seja necessário proteger o processo de inicialização. Para uma máquina em que você tenha acesso físico exclusivo, isso pode não ser necessário, mas para segurança máxima você realmente deseja sistemas de arquivos criptografados e uma maneira segura de inicializar o kernel, como o UEFI Secure Boot.

    
por 24.12.2017 / 10:21
1

Para completar, o recurso BSD securelevel permite fazer o que você deseja. O Linux não tem uma opção equivalente.

    
por 24.12.2017 / 04:21
0

"Existe uma maneira de tornar um arquivo legível por todos no sistema, mas não gravável por ninguém, nem mesmo pela raiz e sem retorno"

Algumas reflexões sobre isso:

(1) Se você usar um CD ou DVD gravável, ele se tornará somente para todos. Não há retorno.

(2) Algumas mídias externas possuem sinalizadores WriteProtect Switches e WriteProtect, que mesmo o usuário root não pode desabilitar; Ele requer um humano para remover a opção WriteProtect e sinalizador WriteProtect não pode ser redefinido.
Se você puder usar esse Switch do WriteProtect com o hardware do seu cartão, poderá controlar as gravações; Mesmo raiz não pode controlá-lo.
Se você definir o sinalizador WriteProtect, não haverá retorno.
(graças a @fluffysheap para tornar isso mais preciso)

(3) Se você tiver o arquivo em um sistema de arquivos na máquina local, quem o escreveu inicialmente pode desfazer as alterações e depois alterar o arquivo. Por isso, não é possível satisfazer suas condições.

(4) Com o arquivo local, o mais próximo que você pode obter é usar um disco virtual ou arquivo de imagem ISO; Quando estiver montado, não permitirá gravações. Mas o root pode criar um novo ISO com novo conteúdo e escrever esse novo ISO no original.

(5) Se o arquivo estiver em outro servidor, aqui está uma solução. Configure um servidor web (HTTP ou HTTPS) ou servidor FTP ou servidor NAS em uma máquina remota. Todos os usuários locais (incluindo o root) devem ter permissão para acessá-lo, seja por montagem (o servidor remoto deve fornecer apenas acesso somente leitura) ou por HTTP ou FTP (por exemplo); não haverá maneira de os usuários locais escreverem nesse servidor ou desabilitarem essa restrição. Mesmo raiz local não pode escrever lá. Você precisa de acesso root no servidor remoto para alterar o arquivo.

    
por 24.12.2017 / 08:37