如何通过perl实现,恢复系统文件默认权限?

如何通过perl实现,恢复系统文件默认权限?

现在有两台solaris,由于DBA的误操作.可能将/etc,/usr下的文件都设置成了777,这样导致了系统不能远程连接SSH,以及一些其它的错误.


请问,如何实现从一台末被改过权限的系统上,到得这些文件的权限设置.
然后到被改过权限的系统上,进行对比设置.


Solaris A:
chmod -R 777 /etc
chmod -R 777 /usr

Solaris B:
是系统默认的权限.正确.

如何从Solaris B上取得文件权限.设置solaris A上所有被改过的系统文件权限?
把权限取出来,
把权限信息生成便于解析的文本文件,
然后在另一台机器上加载这个文本文件,
逐个文件修改权限。
就好了。
用stat获取权限, 生成一个文件, 包含文件和权限的对应关系,
再故障机上比较文件名, 然后chmod
或者直接生成一个批处理:

find / | perl -lne 'printf "chmod %o %s\n", (stat)[2]&0777, $_' > /tmp/bat
scp /tmp/bat <target>
<on target>
sh /tmp/bat
flw兄的方法.正是我想要的..

如果写个脚本,比较花时间..

感谢楼上各位..
flw兄.此方法是不是没取到suid,sgid这类属性?
[root@voole-umsauth-01 tmp]#cat /tmp/bat |grep "/usr/lib/ssh"
chmod 755 /usr/lib/ssh
chmod 555 /usr/lib/ssh/ssh-keysign
chmod 555 /usr/lib/ssh/sftp-server
chmod 555 /usr/lib/ssh/sshd
chmod 555 /usr/lib/ssh/ssh-http-proxy-connect
chmod 555 /usr/lib/ssh/ssh-socks5-proxy-connect
[root@voole-umsauth-01 tmp]#ls -l /usr/lib/ssh
total 1170
-r-xr-xr-x   1 root     bin        44172 Jan 23  2005 sftp-server
-r-xr-xr-x   1 root     bin        10260 Jan 23  2005 ssh-http-proxy-connect
-r-sr-xr-x   1 root     bin       156112 Jan 23  2005 ssh-keysign
-r-xr-xr-x   1 root     bin        10236 Jan 23  2005 ssh-socks5-proxy-connect
-r-xr-xr-x   1 root     bin       350644 Jun  6  2006 sshd
[root@voole-umsauth-01 tmp]#



suid与sgid属性,怎么才能取得,并且正确设置?

find / | perl -lne 'printf "chmod %o %s\n", (stat)[2]&7777, $_' > /tmp/bat


改成这样也不对.取不到suid,sgid,粘连位. ..

find / | perl -lne 'printf "chmod %04o %s\n", (stat)[2]&07777, $_' > /tmp/bat


QUOTE:
原帖由 Ecore 于 2007-8-22 10:53 发表
flw兄.此方法是不是没取到suid,sgid这类属性?

你 chmod 777 foo 会使这些文件原有的 suid sgid 属性丢失吗?
flw在北京不??说成啥也得取吃饭啊??