Ainsi, vous avez tapé la commande interdite : chmod -R 777 /
…
Il est nécessaire d'avoir au moins un backup du système. Plus ce backup est proche de l'installation actuelle, plus la restauration des droits sera complète. Néanmoins, un backup proche de l'installation de base devrais suffire pour permettre un redémarrage du système.
Dans notre cas, le backup était une image complète de la carte flash (dd if=/dev/sdb of=~/backup.hdd
).
Il nous faut tout d'abord récupérer les droits de notre image de backup, en montant l'image comme un disque et en lisant les permissions de chaques fichiers.
Création du point de montage :
root# mkdir /mnt/cf.bck
Comme notre backup est une image complète du disque (incluant le MRB), il faut chercher la position de la partition dans l'image. Pour cela, on peut utiliser l'utilitaire parted
.
root# parted ~/backup.hdd
GNU Parted 2.3
Using ~/backup.hdd
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit B
(parted) print
Model: (file)
Disk ~/backup.hdd: 4000317440B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 31744B 3999236095B 3999204352B primary ext4
(parted) quit
L'information qui nous intéresse est la position Start
de la partition (31744).
On peut alors monter notre partition :
root# mount -o loop,rw,offset=31744 ~/backup.hdd /mnt/cf.bck
Pour être sûr que les chemins soient correctes, on se chroot
dans le backup :
root# chroot /mnt/cf.bck
On lit alors les droits de chaques fichiers de notre backup et l'on crée un script qui réinitialisera notre système :
root@chroot# find /mnt/cf.bck -exec stat –format “chmod %a /mnt/cf%n” {} \; > /restoreperms.sh
Comme l'on ne pourra probablement pas se chrooter dans le système, on rajoute un préfix au format de stat
pour que tous nos chemins commence par /mnt/cf.
On peur alors sortir du chroot :
root@chroot# exit
Création du point de montage pour le système :
root# mkdir /mnt/cf
Montage du système :
root# mount /dev/sdb1 /mnt/cf
Application des droits :
root# bash /mnt/cf.bck/restoreperms.sh
On devrait pouvoir désormais démarrer sur le système.