>На сервер1 ставился софт. Был неправильно сконфигурирован, поставил везде rwxrwxr-x начиная с
>корня.
>Есть сервер2 похожего конфига. Можно с него взять список файлов, прав и
>применить на сервер1. Хочется сделать без лишнего гемора, а именно взять
>права в виде цифр типа 0755. Но каким образом взять в
>цисловом формате я так и ненашел.
>Может при таком _перетаскивании_ прав кому видны подводные камни? Посоветуйте как лучьше
>востановиться. Сервер пока не перезагружался, но уже были проблемы со службами.
>
>SuSE 9.3
Незнаю поможет ли тебе - но я написал скриптик на перле который выставит нужные вермишшены в сответствии с шаблоном.
должен работать...
на исправной машине делаешь
ls -alR / (или ls -alR /usr - в зависимости от того что попортил) в файл, например:
ls -alR / >root.ls
Далее копируешь на неисправную машину в рут и на ней выполняешь ниде приложеный скрипт примерно так:
# pwd
/
# ls | grep root.ls
root.ls
# perl chmoder root.ls /
....
Оно должно выставить все пермишшены не совпадущие а так же и группы и овнеров.
Первый параметр - имя слепка
Второй - имя каталога от которого ты всё делаешь.
ПРилагаю скрипт:
#!/usr/bin/perl
use strict;
my $wd = $ARGV[1];
open (FL, "<", $ARGV[0]);
while (<FL>) {
s/\n//g;
next unless $_;
next if (/^total/);
my @a = split /\s+/;
if (!$a[8] && /^(.*):$/) {
$wd = $1;
# print "New Dir: $wd\n";
next;
}
next unless $a[8];
next if ($a[8] =~ /^(\.|\.\.)$/);
my $perm = $a[0];
my $own = $a[2];
my $grp = $a[3];
my $file = $wd."/".$a[8];
my $flstat = `ls -al $file`;
# For dirs:
if ($perm =~ /^d/i) {
my @at = '';
while ($flstat =~ s/^(.*?)\n//) {
my @s = split /\s+/, $1;
if ($s[8] eq ".") { # Current dir
@at = @s;
$flstat = '';
}
}
if (scalar @at) {
# Permission check:
if ($at[0] ne $perm) {
$perm =~ s/^\d/-/g;
system ("chmod $perm $file");
}
# Owner check:
if ($at[2] ne $own) {
system ("chmod $own $file");
}
# Group check:
if ($at[3] ne $grp) {
system ("chmod $grp $file");
}
}
# For file processing:
} else {
my @at = split /\s+/;
# If needed file:
if ($at[8] eq $a[8]) {
# Permission check:
if ($at[0] ne $perm) {
system ("chmod $perm $file");
}
# Owner check:
if ($at[2] ne $own) {
system ("chmod $own $file");
}
# Group check:
if ($at[3] ne $grp) {
system ("chmod $grp $file");
}
}
}
}
close (FL);
exit(0);