[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:30229] Re: repair permission of directories
平本です。
In subject: [debian-users:30226] Re: repair permission of directories
masaki@xxxxxxxxxxxx (Masaki Ikeda) said:
> > find / -type d -exec chown a+rx {} \;
>
> chmod ?
ぁぅ。そうです。(^_^;)
> 力技なら、インストール済みのパッケージを持ってきて、arで開いて
> data.tar.gzからパーミッションを拾い、現状と食い違っている場合は修正する
> スクリプトを作るとか...
わざわざスクリプト例まで作成していただいて、ありがとうございます。
現状ですが、同じく potato の入ったマシンが別目的用にあったので、
su
cd /
( find usr -type d ; find var ... ) > dirlist
cat dirlist | xargs ls -d > permlist
のようにして usr, etc var, lib, dev のディレクトリのパーミッション
一覧を作成し、被害機(笑)の方と比較し、末尾に添付するスクリプトで
chmod の羅列を生成し、パーミッションを元に戻しました。
ただしこれだと、この 2台間で共通してインストールされているパッケー
ジについてしか修正できませんし、実際両機のパッケージのインストール
具合は異っています。よって、被害機の方にだけインストールされている
パッケージの分については、ご教示いただいた方法も使って、今後調査し
ようと思ってます。
#その過程で特記事項があるようだったら、また報告させていただきます。
不幸中の幸いなのか、上記の方法で調べた限りでは /var 以下しか変更
されてなかったようなので、その点では少し安心してるのですが。(^_^;)
#! /usr/bin/perl
open(IN, "permlist-good") or die; # 別の potato 機のリスト
while (<IN>) {
chomp;
split;
$Dir{$_[8]} = $_[0];
}
close(IN);
@O = ("u", "g", "o");
open(IN, "permlist-bad") or die; # 被害機のリスト
while (<IN>) {
chomp;
split;
next if (! $Dir{$_[8]});
if ($_[0] ne $Dir{$_[8]}) {
# print "#", $_, "\n";
# print "#", $Dir{$_[8]}, "\n";
$dir = $_[8];
$perm = $_[0];
print "chmod ";
$num = 0;
for ($i = 0; $i < 3; ++$i) {
$c = substr($perm, $i * 3 + 1, 3);
$c =~ s/-//g;
printf("%s=%s,", $O[$i], $c);
}
print " $dir\n";
}
}
close(IN);
#出力例:
#chmod u=rwx,g=,o=, var/lib/debconf
#chmod u=rwx,g=,o=, var/lib/nfs/sm
--
平本 光二 (Hiramoto Kouji) / HGF03317 @ nifty.ne.jp