[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