Nouvelle réponse (2015-03-22)
( Remarque: cette réponse est plus simple que la précédente, mais pas plus sécurisée. Ma première réponse est plus forte car vous pouvez conserver les fichiers en lecture seule par les options de montage fs avant les drapeaux d'autorisation. Ainsi, forcer l' écriture d'un fichier sans autorisation d'écriture ne fonctionnera pas du tout.)
Oui, sous Debian , il y a un paquet: fsprotect ( page d'accueil ).
Il utilise aufs
(par défaut, mais pourrait utiliser un autre unionfs
outil) pour permettre les changements de session en direct mais en RAM par défaut, donc tout est oublié au redémarrage.
Vous pouvez les installer en exécutant simplement:
apt-get install fsprotect
Une fois terminé, à partir du document en ligne:
Après ça:
- Modifier
/boot/grub/menu.lst
ou /etc/default/grub2
ou /etc/lilo.conf
et ajouter "fsprotect=1G
" aux paramètres du noyau.
- Modifiez 1G selon vos besoins.
- Appliquer les modifications (c'est-à-dire exécuter
update-grub
)
- Modifier
/etc/default/fsprotect
si vous souhaitez protéger des systèmes de fichiers autres que/
.
- redémarrer
Vous pouvez également vouloir protéger par mot de passe le chargeur de démarrage grub ou interdire toute modification de celui-ci.
De là, si un fichier est protégé contre les modifications, par exemple par
chmod ugo-w myfile
si vous utilisez pour exemple vi myfile
et essayez d'écrire dessus avec la commande :w!
, cela fonctionnera et votre myfile
sera changé. Vous pouvez redémarrer afin de récupérer non modifiémyfile
.
Ce n'est même pas possible avec ma première solution suivante:
Ancienne (première) réponse:
Oui, c'est une solution solide, mais puissante!
Rendre o / utilisable
Vous devez monter certains répertoires dans rw , comme /var
, /etc
et peut-être /home
. Cela pourrait être fait en utilisant aufs ou unionfs . J'aime ça autrement , en utilisant /dev/shm
et mount --bind
:
cp -a /var /dev/shm/
mount --bind /dev/shm/var /var
Vous pourriez auparavant, déplacer tous les répertoires qui ne doivent pas changer en fonctionnement normal dans a static-var
, que créer des liens symboliques dans / 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
Alors , quand à remontage ro, la copie /var
en /dev/shm
ne prendra pas trop de place que la plupart des fichiers sont déplacés vers/static-var
et que les liens symboliques doivent être copiés dans la RAM.
La meilleure façon de le faire finement est de faire un cycle d'alimentation complet, une journée de travail complet et d'exécuter finement une commande comme:
find / -type f -o -type f -mtime -1
Vous verrez donc quels fichiers doivent être situés sur une partition en lecture-écriture.
Enregistrement
Comme il n'y a pas de mémoire statique inscriptible sur cet hôte, pour stocker l'historique et les autres journaux, vous devez configurer un syslog
serveur distant .
echo >/etc/syslog.conf '*.* @mySyslogServer.localdomain'
De cette façon, si votre système tombe en panne pour une raison quelconque, tout ce qui précède est enregistré.
Mise à niveau
Lors de l'exécution avec certains mount --bind
utilisateurs, pour effectuer une telle mise à niveau pendant que le système est en cours d'utilisation (sans avoir besoin de s'exécuter init 1
, pour réduire les temps d'arrêt), le moyen le plus simple consiste à reconstruire une racine propre , capable de faire la mise à niveau:
Après avoir remonté '/' en mode lecture-écriture :
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 /
Et maintenant:
shutdown -r now