Backup uprawnień w folderach systemowych.
Kategoria: FAQ, etykiety: uprawnienia, system
Dodany: 2010-09-24 21:27
(zmodyfikowany: 2011-12-29 12:42)
Przez: Jacekalex
Wyświetleń: 11872
Witam
Pomyłki zdarzają się nawet najlepszym. Kilka razy widziałem na różnych forach posty, (a kiedyś sam też miałem taki problem), z uprawnieniami do plików systemowych w folderach /usr/*, czy np. /etc/*
U mnie skończyło się to kiedyś ponowną instalacją systemu.
Tymczasem można się łatwo zabezpieczyć, przed takimi problemami, tworząc skrypt - który będzie zawierał komendy odtwarzające, poprzedni stan uprawnień w folderach systemowych. Wystarczy wygenerować coś takiego na działającym, sprawnym systemie, a w przypadku awarii związanej z uprawnieniami do plików, po prostu odtworzyć zachowany (prawidłowy system uprawnień).
Cały skrypt wygląda tak:
#!/bin/sh
GDZIE=$PWD
#FOLDER /bin
touch /$GDZIE/bin.sh
echo '#!/bin/sh'>/$GDZIE/bin.sh
find /bin -printf "chown %u:%g %p && chmod %m %p\n">>/$GDZIE/bin.sh
#FOLDER /sbin
touch /$GDZIE/sbin.sh
echo '#!/bin/sh'>/$GDZIE/sbin.sh
find /sbin -printf "chown %u:%g %p && chmod %m %p\n">>/$GDZIE/sbin.sh
#FOLDER /lib
touch /$GDZIE/lib.sh
echo '#!/bin/sh'>/$GDZIE/lib.sh
find /lib -printf "chown %u:%g %p && chmod %m %p\n">>/$GDZIE/lib.sh
#FOLDER /usr
touch /$GDZIE/usr.sh
echo '#!/bin/sh'>/$GDZIE/usr.sh
find /usr -printf "chown %u:%g %p && chmod %m %p\n">>/$GDZIE/usr.sh
#FOLDER /etc
touch /$GDZIE/etc.sh
echo '#!/bin/sh'>/$GDZIE/etc.sh
find /etc -printf "chown %u:%g %p && chmod %m %p\n">>/$GDZIE/etc.sh
#FOLDER /opt
touch /$GDZIE/opt.sh
echo '#!/bin/sh'>/$GDZIE/opt.sh
find /opt -printf "chown %u:%g %p && chmod %m %p\n">>/$GDZIE/opt.sh
#Folder /var
touch /$GDZIE/var.sh
echo '#!/bin/sh'>/$GDZIE/var.sh
find /var -printf "chown %u:%g %p && chmod %m %p\n">>/$GDZIE/var.sh
chmod +x /$GDZIE/*.sh
Ta wersja generuje skrypty do odtwarzania uprawnień dla praktycznie wszystkich ważnych folderów systemowych.
Można go łatwo zmodyfikować - zmieniając ścieżkę i inne parametry polecenia find.
Czas wykonania dla wszystkich folderów systemowych (u mnie):
root ~ # time ./backperm
real 3m51.333s
user 0m13.695s
sys 1m50.851s
4 minuty - można wytrzymać. W rezultacie mamy skrypty noszące nazwy kluczowych folderów systemowych Linuksa
Każda linia wynikowa w generowanych skryptach przyjmuje taką postać:
chown root:root /usr/bin/gcc && chmod 755 /usr/bin/gcc
W przypadku awarii systemu uprawnień polegający na zmianie właściciela, grupy lub uprawnień do plików w jednym z tych folderów, łatwo można odtworzyć poprawny, zachowany w czasie prawidłowego działania systemu stan folderu.
Należy go uruchamiać się poprzez sudo, lub przez użytkownika root. Na "drobną" literówkę przy ustawianiu uprawnień, może się bardzo przydać.
Podziękowania dla azhaga, za niezamierzony udział w powstaniu tego tekstu ;)