joi, 27 octombrie 2011

Ai modificat permisiunile pe fisiere sau directoare si ai uitat ce ai schimbat? Nasol.

De multe ori suntem nevoiti sa modificam permisiunile pe anumite directoare sau fisiere. Iar de multe ori le aplicam recursiv in subdirectoare. Daca scopul pentru care am facut aceste modificari nu a fost atins, atunci dorim sa revenim la starea initiala, Iar de multe ori este imposibil. Pentru a evita acest neajuns am realizat scriptul de mai jos. Scriptul realizeaza salvarea recursiva a permisiunilor precum si a ownerului si grupurilor fisierelor si directoarelor continute in directorul pe care il indicati. Rezultatul executarii acestui script este un fisier executabil  si care prin executare restabileste toate permisiunile initiale salvate.
Ce trebuie sa faceti. Copiati continutul acestui script intr-un fisier numit permisiuni ( sau descarcati-l de <<< AICI >>>), il puneti pe server/desktop intr-un folder (de exemplu /home) , il faceti executabil cu comanda
chmod +x /home/permisiuni
si il lansati in executie cu comanda
sudo /home/permisiuni
Asta este tot. Veti fi intrebati care este directorul caruia doriti sa-i salvati permisiunile si tastati spre exemplu /etc. Asta inseamna ca vor fi salvate recursiv permisiunile tuturor fisierelor si directoarelor continute in directotul /etc.
Fisierul executabil pe care il veti utiliza pentru restaurarea permisiunilor il gasiti asadar TOT in directorul /etc, avand denumirea permisiuni_anul.luna.ziua-ora.minutul (spre exemplu permisiuni_2011.10.27-14.53). Pentru restaurare lansati in executie acest fisier cu comanda sudo /cale_catre_fisier/permisiuni_YY.MM.DD-HH.MM
(exemplu: sudo /home/permisiuni_2011.10.27-14.53)
Puteti asadar sa faceti varza permisiunile, proprietarii si grupurile corespunzatoare unui director si fisierelor incluse. Si asta pentru simplul motiv ca aveti la indemana acest script....

Iata codul :


#!/bin/bash

####################################################################################
# Script care realizeaza salvarea recursiva a permisiunilor #
# precum si a ownerului si grupurilor fisierelor si directoarelor continute #
# in directorul pe care il indicati. #
# Rezultatul executarii acestui script este un fisier executabil #
# si care prin executare restabileste toate permisiunile initiale salvate #
# #
# Copyright : 2011 Georgian #
# Author : Georgian Craciun (georgian,craciun@gmail.com) #
# Last Modified : 27.10.2011 Buzau, Romania #
# Copierea, publicare si modificarile sunt permise numai cu pastrarea antetului #
# #
# This program is distributed under the terms of the GNU #
# General Public License v3 (GPLv3) For more details see #
# http://www.gnu.org/licenses/gpl.txt #
# #
# You are free to redistribute, copy or modify this work #
# under the terms of the GPLv3 and under the proviso that #
# this copyright section is retained and unmodified #
# #
####################################################################################

Red='\E[31m'
yellow='\E[33;47m'
green='\E[32;47m'
reset='\E[0m'

if [ $LOGNAME != "root" ] ; then
echo -e "${yellow}Trebuie sa fiti logat ca ${Red}root${yellow} sau sa folositi ${Red}[sudo]${yellow} pentru a executa acest script. Scriptul nu a fost executat...${reset}"
exit 1
fi

# se introduce folderul caruia i se salveaza permisiunile
echo -e "${Red}Introduceti directorul caruia doriti sa-i salvati permisiunile:${reset} "
read Folder
# verific daca directorul exista
if [ ! -d "$Folder" ]; then
echo -e "${Red}Folderul $Folder nu exista${reset}"
exit 1
fi

# permisiunile se salveaza in directorul ales in formatul An.Luna.Zi-Ora.Minut
# Puteti astfel sa aveti mai multe salvari a permisiunilor functie de modificarile succesive pe care le faceti.
# Daca doriti sa introduceti si secunda salvarii inlocuiti instructiunea de mai jos cu
# OF=$Folder/permisiuni_$(date +%Y.%m.%d-%H.%M.%s)
OF=$Folder/permisiuni_$(date +%Y.%m.%d-%H.%M)

# creem scriptul
echo "#!/bin/bash" > "$OF"
# atribui fisierul care contine scriptul de restaurare userului "root" si grupului "root" apoi atribui permisiunile
chown root:root "$OF"
chmod 770 "$OF"
# fac executabil fisierul rezultat
chmod +x "$OF"

echo "Red='\E[31m'" >> "$OF"
echo "yellow='\E[33;47m'" >> "$OF"
echo "reset='\E[0m'" >> "$OF"
# verific daca fisierul se executa sub userul "root" sau cu "sudo"
echo 'if [ $LOGNAME != "root" ] ; then ' >> "$OF"
echo ' echo -e "${yellow}Trebuie sa fiti logat ca ${Red}root${yellow} sau sa folositi ${Red}[sudo]${yellow} pentru a executa acest script. Scriptul nu a fost executat...${reset}" ' >> "$OF"
echo ' exit 1 ' >> "$OF"
echo 'fi' >> "$OF"

# ma mut in folderul caruia i se salveaza permisiunile
echo "cd '$Folder'" >> "$OF"
cd "$Folder"

# salvez fisierele
find . -type f > /tmp/fisiere

while read line
do
# salvez permisiunile pentru fisiere
permfisier=$( stat --format=%a "$line" )
echo "chmod $permfisier '$line'" >> "$OF"
# salvez owner-ul si grupul din care fac parte fisierele
oungroupfisier=$( stat --format=%U:%G "$line" )
echo "chown $oungroupfisier '$line'" >> "$OF"
done /tmp/directoare

while read line
do
# salvez permisiunile pentru directoare
directoare=$( stat --format=%a "$line" )
echo "chmod $directoare '$line'" >> "$OF"
# salvez owner-ul si grupul din care fac parte directoarele
oungroupdir=$( stat --format=%U:%G "$line" )
echo "chown $oungroupdir '$line'" >> "$OF"
done > "$OF"

# sterg fisierele temporare
rm /tmp/fisiere
rm /tmp/directoare

echo "permisiunile folderului $Folder au fost salvate in fisierul $OF"
echo "pentru restaurarea permisiunilor executati fisierul $OF logat ca root sau cu 'sudo $OF'"
exit

Spor la modificari !

Niciun comentariu: