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.lst
or/etc/default/grub2
or/etc/lilo.conf
and add "fsprotect=1G
" to kernel parameters.- Modify 1G as needed.
- Apply changes (i.e. run
update-grub
)- Edit
/etc/default/fsprotect
if 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