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

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

我最近输入了命令

sudo chmod 777 -R /

之后的一些事情

sudo -i

无法正常工作。所以我想知道是否有办法将文件夹权限重置为原始状态?

答案1

这是可能的从这混乱的局面中恢复过来。

我再次遇到了同样的问题(我编写的脚本中存在一些错误)并解决了它,但您需要寻求专家的帮助。要非常小心!

首先,我的情况更容易解决,因为我有双启动系统(Ubuntu 和我旧的 Fedora 安装),但从 CD/DVD 或 USB 密钥运行操作系统应该可以做同样的事情。

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)。您必须且应该只设置权限设置所有者。请保存完整的文件权限信息以及所有者信息。

韋克:

  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 子句的顺序。

答案2

恢复后须藤或选择恢复模式在引导处

可以使用以下方法恢复整个系统德布苏姆斯验证文件完整性和权限。

来自手册页:

apt-get install --reinstall $(dpkg -S $(debsums -c) | cut -d : -f 1 | sort -u)

重新安装包含已更改文件的软件包

或限制到特定路径,例如/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)

答案3

始终注意以 sudo 身份运行的内容。

此主题解释说您可以手动重新设置一些权限,那里有一个脚本可以帮助您完成此操作,但这仍然是一项艰巨的工作。最好按照本指南中的提示保存您安装的软件包(标记)并重新安装操作系统,然后应用您保存的软件包标记以恢复您的应用程序。

答案4

哇,你杀了它。它死了!尝试以 root 身份登录并使用机器(因为你启用了它),然后将 root 的组成员身份更改为用户。这可能有效也可能无效,因为我以前从未尝试过,但值得一试。

相关内容