Bonjour à tous,
J'ai malheureusement fait une connerie sur un serveur, j'ai exécuté la commande chmod 777 -R . Et j'étais sous / en root. Donc tous mes fichiers sont permissions 777.
Au début je pensais que cela ne poserai pas trop de problème. Mais pour se connecter en telnet, il faut que le fichier securetty soit en 600. Heureusement la connexion ssh fonctionne parfaitement donc j'ai pu le modifier. Pour l'instant pas d'autres probleme, mais pas vraiment envie de rebooter la machine
a t il une solution pour retrouver rapidement les bons droits sans réinstaller la machine ?
Merci d'avance de votre aide.
# Hum
Posté par cho7 (site web personnel) . Évalué à 2.
[^] # Re: Hum
Posté par totof2000 . Évalué à 3.
2/ J'espère au moins que tu as des sauvegardes? Si c'est le cas, peut-être que tu peux récupérer les droits des fichiers sauvegardés et faire le chmod qui va bien par script ....
Je pense que tu vas t'amuser ....
[^] # Re: Hum
Posté par totof2000 . Évalué à 2.
# Toutefois ...
Posté par Obsidian . Évalué à 3.
Si tu utilises Mandrake, msec devrait être capable de les recréer pour toi ...
# Un PERL fite fait ....
Posté par totof2000 . Évalué à 4.
En l'adaptant, et en supposant que tu as une sauvegarde, il devrait te sortir d'affaire.
Attention, il ne génère pas les SUID bits (c'est a dire les Ss sur les droits) . A toi (ou quelqu'un d'autre) de modifier le code.
Aparamment il ne gère pas non plus les fichiers cachés (.profile, etc ...).
A tester avant d'utiliser!!! Je ne peux être tenu responsable d'un quelconque dysfonctionnement lié a l'utilisation de ce script.
Licence: GPL.
Vous êtes fortement encouragés à l'améliorer.
PS: L'indentation a sauté lors de l'affichage.
-----------------------------------------------------------------------------------
#!/usr/bin/perl -w
sub convert_rights
{
my $Droits=shift;
my @tab=split(//,$Droits);
my $Count=0;
my $Rights=0;
foreach(@tab) {
#print ("Droit:$_\n");
SWITCH: {
if($Count==0) {
last SWITCH;
}
if($Count==1) {
if("$_" eq 'r') {
$Rights=$Rights+0400;
}
last SWITCH;
}
if($Count==2) {
if("$_" eq 'w') {
$Rights=$Rights+0200;
}
last SWITCH;
}
if($Count==3) {
if("$_" eq 'x') {
$Rights=$Rights+0100;
}
last SWITCH;
}
if($Count==4) {
if("$_" eq 'r') {
$Rights=$Rights+040;
}
last SWITCH;
}
if($Count==5) {
if("$_" eq 'w') {
$Rights=$Rights+020;
}
last SWITCH;
}
if($Count==6) {
if("$_" eq 'x') {
$Rights=$Rights+010;
}
last SWITCH;
}
if($Count==7) {
if("$_" eq 'r') {
$Rights=$Rights+04;
}
last SWITCH;
}
if($Count==8) {
if("$_" eq 'w') {
$Rights=$Rights+02;
}
last SWITCH;
}
if($Count==9) {
if("$_" eq 'x') {
$Rights=$Rights+01;
}
last SWITCH;
}
}
$Count++;
}
return $Rights;
}
sub changemod
{
my $Droits=shift;
my $Fichier=shift;
print "chmod sur $Fichier, nouveaux droits $Droits\n";
my $Rights= convert_rights($Droits);
printf("Attribution des droits %o sur $Fichier\n",$Rights);
unless(chmod $Rights,$Fichier) {
print STDERR " ->Changement de droit sur $Fichier impossible \n";
}
else {
print " -->Changement de droits sur $Fichier OK\n";
}
}
sub change_rights
{
my $Line=shift;
chomp $Line;
#print("Line: $Line\n");
if ($Line) {
@L=split(/\s+/,$Line);
#print ("Line2: $L[0]\n");
#print ("Line3: $L[8]\n");
if (-f $L[8]) {
#print ("$L[8]\n");
changemod($L[0],$L[8]);
}
else {
print STDERR "Le fichier $L[8] n'existe pas(plus) sur cette machine \n";
}
}
}
# Recuperation de la liste des fichiers
$Sauvegarde=$ARGV[0];
open (COMMAND, "tar -tvf $Sauvegarde |") or die "Impossible d'ouvritr le fichioer $Sauvegarde\n$!";
while (<COMMAND>) {
change_rights($_);
}
close(COMMAND);
[^] # Re: Un PERL fite fait ....
Posté par totof2000 . Évalué à 2.
Attention, il faut être à l'endroit ou la sauvegarde a eu lieu pour que ca marche. Mais je le rappelle, j'ai écrit ca vite fait, et j'ai un peu la flemme de l'améliorer (pas le temps ...).
[^] # Re: Un PERL fite fait ....
Posté par cho7 (site web personnel) . Évalué à 3.
Toute facon son systeme est déjà foutu :)
[^] # Re: Un PERL fite fait ....
Posté par totof2000 . Évalué à 3.
Mais c'est clair que le systeme ne doit pas se sentir très bien :)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.