如何恢复 etc 目录上的 chmod?

Raf*_*fay 10 linux chmod files

我不小心在etc目录下执行了以下命令:

sudo chmod -R 700 /etc
Run Code Online (Sandbox Code Playgroud)

我知道我做错了什么。我的终端现在打印:

I have no name!@ubuntu: /$
Run Code Online (Sandbox Code Playgroud)

如何将我的 etc 目录恢复到早期状态?

我尝试更改权限,但现在失败了。此外,如果有人可以解释当我在等上执行该命令时实际出了什么问题,那将非常有帮助。这只是文件权限。那为什么整个系统似乎完全炸了?为什么现在没有登录密码有效?我知道 etc 目录中有一个文件与用户有关。但是更改权限如何危及一切?一些关于此的技术细节将非常有帮助。

Bra*_*iam 16

一件事出错了:sudo与该命令一起使用。该-R开关告诉chmod递归权限设置到该目录,也就是,在任何情况下,非推荐的动作(我们应该叫它:异端),如果你不知道你在做什么(这一次发生在我身上,我没有发出命令,但一个有缺陷的 GUI 发出了命令,我的系统就连线了)。

这只是文件权限。那为什么整个系统似乎完全炸了?

GNU/Linux 对文件权限非常敏感,因为它在构建时考虑了稳定性和安全性。这同样适用于在 GNU/Linux 中运行的大多数程序(即apache2删除 root 权限和使用www-data,或类似用户,并且您的700权限不允许它读/写它自己的文件)。

为什么现在没有登录密码有效?

正如您已经提到的,登录密码存储在一个文件中/etc/passwd,只有 root(我假设您没有更改)可以读取它,但登录提示(或 GUI 登录)使用非特权帐户,因此它无法读取文件。

但是更改权限如何危及一切?

如上所述,Linux 对文件权限非常敏感。一些程序甚至会检查其配置文件的权限,如果不期望它们,它们将根本不会运行。

如何将我的 etc 目录恢复到早期状态?

如果你使用基于 RPM 的发行版,这可以使用rpm --setperms命令来完成,它会一个一个地恢复软件包,在类 Debian 系统上apt-get --reinstall install是你的朋友。其他解决方案可能可用,但需要一个工作系统。


小智 5

让我们看看,您所做的是将整个 /etc 目录中的权限设置为仅允许文件/目录的所有者读取/写入/执行,而拒绝其他所有人。如果您对文件权限感到困惑,可以在维基百科中阅读更多内容:传统 UNIX 权限

您炸毁系统的原因是许多进程无法再读取其设置,无法访问 /etc。将整个 /etc 目录恢复到以前的状态并不容易。如何做到这一点取决于你的发行版,但基本上这意味着重新安装每个包含 /etc 中任何文件的包。

作为能够使用系统的快速创可贴,为了正确修复它(如上所述,重新安装所有包含 /etc 内容的包),您可以执行以下操作:

    # sudo find /etc -type d -exec chmod 775 '{}' \;
    # sudo find /etc -type f -exec chmod 664 '{}' \;
Run Code Online (Sandbox Code Playgroud)

使用这两行,您将在所有 /etc 目录中设置自由权限,允许所有者和组读取/写入,并允许其他所有人读取。两个 chmod 的原因是仅在 dirs 上设置执行位。即使如此,某些进程也会抱怨或失败,包括 /etc 中的任何可执行文件,但您应该能够进行我上面概述的重新安装。

请注意,在您恢复原始权限之前,您的系统至少会处于不安全状态。

  • 此外,某些程序将无法运行;例如,SSH 需要对某些文件进行限制性权限。`/etc/sudoers` 是另一个。 (2认同)