Introdução
Tem ocorrido uma nova onda de sistemas operacionais que tem chamado atenção chamados imutáveis, basicamente são sistemas onde não é possível (por meios diretos pelo menos) escrever nos arquivos do sistema, via de regra qualquer sistema Linux possui nativamente um software pra causar esse efeito chamado chattr
chattr
Esse software cujo nome vem de CHange ATTRibutes (ou em português mudar atributos) permite controlar o que se pode fazer ou não com um arquivo ou diretório (ou em outras palavras mudar os atributos do arquivo).
Uma das flags i
define o atributo da imutabilidade, a essa altura você já deve ter percebido como isso vai ser feito, mas não adianta muito fazer isso no lugar errado…
Como o Linux distribui os programas do sistema
Existem inúmeros materiais explicando isso mas 3 diretórios merecem atenção:
-
/usr
de Unix Shared Resources é onde ficam todos os arquivos do sistema operacional, temas, programas, bibliotecas até os papéis de parede -
/var
é onde ficam os arquivos variáveis do sistema, os arquivos arqui tendem a mudar bastante, é onde estão bancos de dados,
cache, flatpakss, snaps, logs entre outras coisas ficam -
/etc
de origem incerta é onde ficam as configurações do sistema como os grupos, usuários, configurações, chaves de segurança…
Sabendo disso podemos perceber que, /var
precisa ser gravavel, e se você deixar /etc
imutável poderá ter problemas e /usr
é onde praticamente tudo que não deve ser mexido no sistema está, então achamos nosso diretório, mas tem mais uma coisa, a quantidade de pastas é gigantesca e aplicar de forma recursiva demoraria muito, mas felizmente outra ferramenta pode nos ajudar
find
O find
ou encontrar, é uma das ferramentas mais versáteis, ele nos permite procurar pastas e arquivos podendo passar inúmeros atributos pra refinar os resultados, precisamos de duas coisas, encontrar todos os diretórios em /usr
e executar o comando chattr +i neles
, as flags (parâmetros especiais) que precisamos é o -type
e o -exec
:
O ao passar o parâmetros d de “directory” a flag -type nós conseguimos filtrar apenas os diretórios
Já a flag -exec é tão simples quanto com um detalhe, passamos chattr +i
que é o comando que queremos executar, depois o {}
que representa o diretório encontrado e por fim o `;’ que indica o fim da flag -exec
O \ é necessário porque ; é um caractere especial do
bash/zsh/fish
Deixando o sistema imutável
Agora que sabemos onde fazer, como fazer e o que fazer, podemos deixar o sistema imutável assim:
sudo find /usr -type d -exec chattr +i {} \;
E pronto, ao término da execução o sistema estará travado para modificação
Testando
Podemos testar isso simplesmente removendo pacotes:
sudo apt remove nano
Você vai notar que o pacote não foi removido, outro exemplo seria criar um arquivo:
echo | sudo tee /usr/bin/teste-imutavel
Note que também resulta em erro e o arquivo não é criado
Nota para usuários Arch e derivados, pode ser necessário passar o parâmetro
--overwrite '/etc/*'
caso tente instalar um pacote no sistema imutável e tente instalar novamente com a imutabilidade desativada
Desfazendo
Se prestou atenção, vc deve ter percebido que o gestor de pacotes está travado, não consegue remover ou instalar pacotes, isso é claro, impede a atualização do sistema, para desfazer é tão simples quanto fazer, basta trocar o +i por -i:
sudo find /usr -type d -exec chattr -i {} \;
E é isso
Esse é talvez o jeito mais simples e intuitivo de deixar o sistema imutável, tem suas limitações é claro mas dada a simplicidade e universalidade é algo bem interessante de se ter
Se esse artigo te ajudou ou te ensinou algo de útil ou valioso, considere fazer um pix de qualquer valor para
natanaelpix@gmail.com
e fácil, rápido e me motiva trazer esse tipo de conteúdo