Nova resposta (22/03/2015)
( Nota: esta resposta é mais simples que a anterior, mas não mais segura. Minha primeira resposta é mais forte porque você pode manter os arquivos somente leitura pelas opções de montagem fs antes dos sinalizadores de permissão. Portanto, forçar a gravação de arquivos sem permissão para gravação não funcionará em absoluto.)
Sim, no Debian , existe um pacote: fsprotect ( página inicial ).
Ele usa aufs
(por padrão, mas poderia usar outra unionfs
ferramenta) para permitir alterações de sessão ao vivo, mas na RAM, por padrão, para que tudo seja esquecido na reinicialização.
Você pode instalá-los executando simplesmente:
apt-get install fsprotect
Depois de concluído, no documento on-line:
Depois disso:
- Edite
/boot/grub/menu.lst
ou /etc/default/grub2
ou /etc/lilo.conf
adicione " fsprotect=1G
" aos parâmetros do kernel.
- Modifique 1G conforme necessário.
- Aplicar alterações (ou seja, executar
update-grub
)
- Edite
/etc/default/fsprotect
se você deseja proteger outros sistemas de arquivos /
.
- reiniciar
Você também pode proteger com senha o gerenciador de inicialização grub ou proibir quaisquer alterações nele.
A partir daí, se algum arquivo estiver protegido contra alterações, por exemplo, por
chmod ugo-w myfile
se você usar a amostra vi myfile
e tentar escrever nela com o comando :w!
, isso funcionará e você será myfile
alterado. Você pode reiniciar para recuperar não modificado myfile
.
Isso nem é possível com a minha primeira solução a seguir:
Antiga (primeira) resposta:
Sim, é uma solução forte, mas poderosa!
Tornando r / o utilizável
Você tem que 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 maneira , usando /dev/shm
e mount --bind
:
cp -a /var /dev/shm/
mount --bind /dev/shm/var /var
Você poderia antes, mover todos os diretórios que não precisam alterar a operação normal em a static-var
, do que 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
Então, quando remontar em ro, copiando /var
em /dev/shm
não tomar muito espaço, como 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 com precisão é fazer um ciclo de energia completo, um dia de trabalho completo e executar um comando como:
find / -type f -o -type f -mtime -1
Então você verá quais arquivos precisam estar localizados na partição de leitura e gravação.
Exploração madeireira
Como neste host não existe memória estática gravável, para armazenar o histórico e outros logs, você precisa configurar um syslog
servidor remoto .
echo >/etc/syslog.conf '*.* @mySyslogServer.localdomain'
Dessa forma, se o seu sistema for interrompido por qualquer motivo, tudo será registrado antes.
Atualizando
Ao executar com alguns mount --bind
em uso, para fazer essa atualização enquanto o sistema está em uso (sem a necessidade de executar init 1
, para reduzir o tempo de inatividade), a maneira mais simples é recriar uma raiz limpa , capaz de fazer a atualização:
Após remontar '/' no modo de leitura e 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
Eu só tenho experiência usando uma buildroot mais recente (2014-02). Nessa versão, você pode desativar 'remontar o sistema de arquivos raiz para leitura e gravação durante a inicialização' no arquivo de configuração com:
BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW não está definido
Consegui criar uma imagem que apenas usa sua partição ext4 / como somente leitura, para desconectar o poder do sistema. Funciona muito bem, portanto, se você não precisa escrever no seu sistema de arquivos, talvez seja uma solução muito mais simples do que a mencionada acima (que parece mais ou menos aplicável ao sistema Debian no que se refere ao apt-get).
fonte
/etc/inittab
se a remontagem/
ocorre lá. Nesse caso, altere-o de acordo com as suas necessidades.