问题描述
我最近输入了命令
sudo chmod 777 -R /
之后,诸如
sudo -i
不能正常工作。所以我想知道是否有什么方法可以将文件夹权限重置为其原始状态?
最佳办法
可能会从这种混乱的情况中恢复过来。
我在问题上再次运行了相同的代码(我正在编写的脚本中存在一些错误),并解决了该问题,但是您需要寻求专家的帮助。要非常小心!
首先,我的情况比较容易解决,因为我有双引导系统(Ubuntu和旧的Fedora安装),但是从CD /DVD或USB密钥运行OS应该做同样的事情。
MPOINT=/mount/ubuntu
首先,我像这样挂载了文件系统(不要忘记创建挂载点):
mount /dev/ubuntu/root $MPOINT
mount /dev/ubuntu/home $MPOINT/home
然后我运行以下命令(我的问题仅在少数几个关键目录中)将权限从正在运行的系统复制到凌乱的目录(实际上,在我的情况下,我在fedora下的Virtual Box中安装了Ubuntu系统)并在那里获得许可):
find /etc /usr /bin /sbin -exec stat --format "chmod %a \"${MPOINT}%n\"" {} \; > /tmp/restoreperms.sh
然后,我运行了restoreperms.sh脚本。
我再次能够在Ubuntu上启动。
restoreperms.sh的内容将类似于:
(...)
chmod 755 /mount/ubuntu//etc/ppp
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up
chmod 2750 /mount/ubuntu//etc/ppp/peers
chmod 640 /mount/ubuntu//etc/ppp/peers/provider
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up.d
chmod 777 /mount/ubuntu//etc/ppp/resolv.conf
(...)
我没有测试它,但它也必须对所有者和所有者组起作用。就像是:
find /etc /usr /bin -exec stat --format 'chown %U:%G ${MPOINT}%n' {} \; > /tmp/restoreperms.sh^
(...)
chown root:root /mount/ubuntu//etc/obex-data-server/imaging_capabilities.xml
chown root:root /mount/ubuntu//etc/obex-data-server/capability.xml
chown root:dip /mount/ubuntu//etc/ppp
chown root:root /mount/ubuntu//etc/ppp/ipv6-up
chown root:dip /mount/ubuntu//etc/ppp/peers
chown root:dip /mount/ubuntu//etc/ppp/peers/provider
chown root:root /mount/ubuntu//etc/ppp/ipv6-up.d
chown root:root /mount/ubuntu//etc/ppp/resolv.conf
(...)
当然,您在这里必须注意,两个系统上的UID和GID相同,但是对于与系统相关的用户和组,这不应该成为问题。
编辑:
同样,设置所有者将使SGID和SUID标志无效,这将导致奇怪的问题(例如,除非允许为4755,否则您将无法执行sudo)。您必须而且仅应在设置所有者之后设置权限。请保存完整的文件许可权信息以及所有者信息。
Rk:
-
重要的是保持安装磁盘与您使用的版本同步,或者至少与当前的ubuntu版本一起使用。
-
现在,我将这个命令放在cronjob中,每天(可能是数周)运行一次,以保留该信息。它将使下一次的解决方案更加容易,但是,当然,正如我现在所拥有的,它将永远不会再发生。 ;-)像这样的东西:
0 12 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chmod %a %n" {} \; |/bin/bzip2 -c > /tmp/restore_chmod.$(/bin/date +%w).sh.bz2
0 13 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chown %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_chown.$(/bin/date +%w).sh.bz2
右(组合)命令更像是:
`/usr/bin/find / -exec /usr/bin/stat --format="[ ! -L {} ] && /bin/chmod %a %n" {} \; -exec /usr/bin/stat --format="/bin/chown -h %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_fileperms.$(/bin/date +%w).sh.bz2`
请注意,可能需要格外小心以解决文件名中的括号(例如,在语言环境下),并且chown可能会默默地取消设置chmod设置的setuid和setgid位。在后一种情况下,例如/bin /su和/usr /bin /sudo可能会中断,您可能需要交换上面exec子句的顺序。
次佳办法
在恢复sudo或在引导时选择恢复模式之后
可以使用验证文件完整性和权限的debsum恢复整个系统。
从手册页:
apt-get install --reinstall $(dpkg -S $(debsums -c) | cut -d : -f 1 | sort -u)
Reinstalls packages with changed files
或仅限于特定路径,例如:/usr
:
apt-get install --reinstall $(dpkg -S $(debsums -c | grep -e ^/usr ) | cut -d : -f 1 | sort -u)
或限制为多组路径,例如:/sbin /etc /var
apt-get install --reinstall $(dpkg -S $(debsums -c | grep -e ^/etc -e ^/sbin -e ^/var ) | cut -d : -f 1 | sort -u)