Nova resposta (2015-03-22)
( Nota: Esta resposta é mais simples que anterior, mas não mais segura. Minha primeira resposta é mais strong porque você pode manter os arquivos somente leitura por fs opções de montagem antes de sinalizadores de permissão. Portanto, forçar a gravar arquivos sem permissão para gravar não funcionará.
Sim, no Debian , há um pacote: fsprotect ( homepage ).
Ele usa aufs (por padrão, mas pode usar outra ferramenta unionfs ) para permitir alterações de sessão ao vivo mas na RAM por padrão, então tudo é esquecido na reinicialização.
Você pode instalá-los executando simplesmente:
apt-get install fsprotect
Uma vez concluído, a partir do documento on-line:
After that:
- Edit
/boot/grub/menu.lstor/etc/default/grub2or/etc/lilo.confand add "fsprotect=1G" to kernel parameters.- Modify 1G as needed.
- Apply changes (i.e. run
update-grub)- Edit
/etc/default/fsprotectif you want to protect filesystems other than/.- reboot
You may also want to password protect the grub bootloader or forbid any changes to it.
A partir daí, se algum arquivo estiver protegido contra alterações, por exemplo,
chmod ugo-w myfile
se você usar o exemplo vi myfile e tentar escrever nele com o comando :w! , isso funcionará e o myfile será alterado. Você pode reinicializar para recuperar myfile não modificado.
Isso nem é possível com a minha primeira solução a seguir:
Resposta antiga (primeira):
Sim, é uma solução strong, mas poderosa!
Tornando r / o utilizável
Você precisa montar alguns diretórios em rw , como /var , /etc e talvez /home . Isso pode ser feito usando aufs ou unionfs . Eu gosto disso de outra forma , usando /dev/shm e mount --bind :
cp -a /var /dev/shm/
mount --bind /dev/shm/var /var
Você pode, antes, mover todos os diretórios que não precisam ser alterados na operação normal em static-var , em vez de criar links simbólicos em / var:
mkdir /static-var
mkdir /static-var/cache
mkdir /static-var/lib
mv /var/lib/dpkg /static-var/lib/dpkg
ln -s /static-var/lib/dpkg /var/lib/dpkg
mv /var/cache/apt /static-var/cache/apt
ln -s /static-var/cache/apt /var/cache/apt
... # an so on
Portanto, ao remontar em ro, copiar /var em /dev/shm não ocupará muito espaço, já que a maioria dos arquivos são movidos para /static-var e apenas links simbólicos devem ser copiados na memória RAM.
A melhor maneira de fazer isso é criar um ciclo de energia completo, um dia de trabalho completo e executar um comando como:
find / -type f -o -type f -mtime -1
Assim, você verá quais arquivos precisam estar localizados na partição de leitura / gravação.
Registrando
Como neste host não existe memória estática gravável, a fim de armazenar histórico e outros logs, você tem que configurar um servidor syslog remoto.
echo >/etc/syslog.conf '*.* @mySyslogServer.localdomain'
Desta forma, se o seu sistema quebrar por qualquer motivo, tudo o que estiver antes é registrado.
Atualizando
Ao executar com mount --bind em uso, para fazer tal atualização enquanto o sistema estiver em uso (sem a necessidade de executar init 1 , para reduzir o tempo de inatividade), a maneira mais simples é reconstruir uma limpeza root , capaz de fazer a atualização:
Após remontar '/' no modo leitura-gravação :
mount -o remount,rw /
for mpnt in /{,proc,sys,dev{,/pts}};do
mount --bind $mnpt /$mnt$mpnt;
done
chroot /mnt
apt-get update && apt-get dist-upgrade
exit
umount /mnt/{dev{/pts,},proc,sys,}
sync
mount -o remount,ro /
E agora:
shutdown -r now