当前位置: 首页>>技术教程>>正文


如何在Ubuntu中将文件夹权限重置为其默认设置?

, ,

问题描述

我最近输入了命令

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:

  1. 重要的是保持安装磁盘与您使用的版本同步,或者至少与当前的ubuntu版本一起使用。

  2. 现在,我将这个命令放在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)

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/11074.html,未经允许,请勿转载。