Differences

This shows you the differences between two versions of the page.

Link to this comparison view

unix:bkp_permissions [2010/01/12 13:29] (current)
Line 1: Line 1:
 +Dans un souci de sécurisation,​ j'ai voulu faire différents essais sur les permissions de mon systeme.\\
 +Il me fallait un moyen simple pour pouvoir revenir en arrière et je n'ai pas assez de Go libres pour pouvoir tout sauver...\\ ​
 +J'ai donc eu l'​idée de ce script, il necessite uniquement une version convenable de perl.
  
 +Son utilisation :
 +
 +<​code>​
 +# ./getrights > perms
 +</​code>​
 +
 +(tapez ENTER une fois le programme executé)
 +Cela enregistre les droits et les utilisateurs pour le répertoire '/'​ récursivement dans "​perms",​\\
 +regardez le début du script pour changer qques variables (pour ne pas TOUT sauvegarder par exemple).\\
 +Sur mon systeme, 600ko son suffisant pour tout enregistrer.
 +
 +<​code>​
 +# ./getrights < perms
 +</​code>​
 +
 +Restaure les droits/​utilisateurs/​groupes pour tous les fichiers ki ont été placés dans "​perms"​
 +
 +Voici le script :
 +
 +<code perl>
 +#​!/​usr/​bin/​perl -W
 +#
 +# small tool to backup files & directories permissions
 +# by fab <​fab@gcu.info>​
 +#
 +# HOWTO:
 +# - backup
 +#   ​./​getrights.pl > owns
 +#   ​(after the program is run, press ENTER)
 +#   This store informations in the file "​owns"​
 +# - restore
 +#   ​./​getrights.pl < owns
 +#   This will restore informations contained in the file "​owns"  ​
 +#
 +use strict;
 +use File::Find;
 +my $DIR='/';​
 +my $SEP=' = ';
 +my $KEY='​BACK';​
 +my $DEBUG=1;
 +
 +my($dev,​$ino,​$mode,​$nlink,​$uid,​$gid);​
 +$_=<>;​
 +chomp;
 +/​$KEY/?&​undo():&​list();​
 +
 +sub nouveau {
 +    if(not scalar(stat)) {
 +        print STDERR "Error with $File::​Find::​name. (maybe not a real file)\n";​
 +        return;
 +    }
 +    ($dev,​$ino,​$mode,​$nlink,​$uid,​$gid)=stat;​
 +    printf "​%o",​ ($mode&​07000)>>​9;​ # spe
 +    printf "​%o",​ ($mode&​00700)>>​6;​ # usr
 +    printf "​%o",​ ($mode&​00070)>>​3;​ # grp
 +    printf "​%o",​ ($mode&​00007);​ # others
 +    my $rmode=sprintf("​%o",​$mode&​00777);​
 +    print ($SEP,​$uid,​$SEP,​$gid,​$SEP,​$File::​Find::​name,"​\n"​);​
 +}
 +
 +sub list {
 +    print "​$KEY\n";​
 +    my $File=find({wanted=>​\&​nouveau},​$DIR);​
 +}
 +
 +sub undo {
 +    my $cnt=0;
 +    while(<>​) {
 +        chomp;
 +        /​^([0-9]{4})$SEP([0-9]+)$SEP([0-9]+)$SEP(.*)$/;​
 +        ($mode,​$uid,​$gid,​$dev)=($1,​$2,​$3,​$4);​
 +        print "​$1\n"​ if($dev=~/​^\/​(\w+)\/​$/​);​
 +        print "​.";​
 +        $cnt++;
 +        if($cnt>​70) {
 +            $cnt=0;
 +            print "​\n";​
 +        }
 +        if(not $DEBUG) {
 +            chown $uid,$dev;
 +            chown $uid,​$gid,​$dev;​
 +            chmod oct($mode),​$dev;​
 +        }
 +    }
 +    print "​\n";​
 +}
 +</​code>​
unix/bkp_permissions.txt · Last modified: 2010/01/12 13:29 (external edit)