Nuova risposta (22-03-2015)
( Nota: questa risposta è più semplice della precedente, ma non più sicura. La mia prima risposta è più forte perché potresti mantenere i file di sola lettura con le opzioni di mount fs prima dei flag di autorizzazione. Quindi forzare la scrittura di un file senza il permesso di scrivere non funzionerà affatto.)
Sì, sotto Debian , c'è un pacchetto: fsprotect ( homepage ).
Utilizza aufs
(per impostazione predefinita, ma potrebbe utilizzare un altro unionfs
strumento) per consentire le modifiche alla sessione live ma nella RAM per impostazione predefinita, quindi tutto viene dimenticato al riavvio.
Puoi installarli semplicemente eseguendo:
apt-get install fsprotect
Una volta fatto, dal documento online:
Dopo di che:
- Modifica
/boot/grub/menu.lst
o /etc/default/grub2
o /etc/lilo.conf
e aggiungi " fsprotect=1G
" ai parametri del kernel.
- Modifica 1G secondo necessità.
- Applica modifiche (es. Corsa
update-grub
)
- Modifica
/etc/default/fsprotect
se desideri proteggere file system diversi da /
.
- riavvio
Potresti anche voler proteggere con password il bootloader grub o vietare qualsiasi modifica ad esso.
Da lì, se alcuni file sono protetti dalle modifiche, ad esempio
chmod ugo-w myfile
se usi per esempio vi myfile
e provi a scrivere su di esso con il comando :w!
, questo funzionerà e il tuo sarà myfile
cambiato. È possibile riavviare per recuperare non modificati myfile
.
Questo non è nemmeno possibile con la mia prima soluzione seguente:
Vecchia (prima) risposta:
Sì, è una soluzione forte, ma potente!
R / o utilizzabile
È necessario montare alcune directory nel rw , come /var
, /etc
e forse /home
. Questo potrebbe essere fatto usando aufs o unionfs . Mi piace in un altro modo , usando /dev/shm
e mount --bind
:
cp -a /var /dev/shm/
mount --bind /dev/shm/var /var
In precedenza, è possibile spostare tutte le directory che non devono cambiare durante il normale funzionamento in a static-var
, piuttosto che creare collegamenti simbolici in / 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
Quindi quando si rimonta in ro, la copia /var
in /dev/shm
non occuperà troppo spazio in quanto la maggior parte dei file viene spostata /static-var
e solo i collegamenti simbolici devono essere copiati in ram.
Il modo migliore per farlo con precisione è fare un ciclo completo, un giorno di pieno lavoro ed eseguire finemente un comando come:
find / -type f -o -type f -mtime -1
Quindi vedrai quali file devono trovarsi sulla partizione di lettura / scrittura.
Registrazione
Come in questo host non esiste memoria statica scrivibile, al fine di memorizzare la cronologia e altri registri, è necessario configurare un syslog
server remoto .
echo >/etc/syslog.conf '*.* @mySyslogServer.localdomain'
In questo modo, se il sistema si interrompe per qualsiasi motivo, viene registrato tutto prima.
Aggiornamento
Quando si esegue con alcuni mount --bind
in uso, per fare un tale aggiornamento mentre il sistema è in uso (senza la necessità di funzionare init 1
, per ridurre i tempi di fermo), il modo più semplice è ricostruire una radice pulita , in grado di eseguire l'aggiornamento:
Dopo aver rimontato '/' in modalità lettura-scrittura :
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 adesso:
shutdown -r now