我不小心在etc目录下执行了以下命令:
sudo chmod -R 700 /etc
我知道我做了一件非常错误的事情。我的终端现在打印:
I have no name!@ubuntu: /$
如何将我的 etc 目录恢复到之前的状态?
我尝试更改权限,但现在失败了。另外,如果有人可以解释当我在等上执行该命令时实际出了什么问题,那将非常有帮助。这只是文件权限。那么为什么整个系统看起来完全崩溃了呢?为什么现在登录密码不起作用?我知道etc目录中有一个与用户有关的文件。但是更改权限是如何危及一切的呢?有关于此的一些技术细节将非常有帮助。
答案1
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
是你的朋友。可能还有其他解决方案,但需要一个可用的系统。
答案2
让我们看看,您所做的是将整个 /etc 目录中的权限设置为仅允许文件/目录的所有者读取/写入/执行,拒绝其他人。如果您对文件权限感到困惑,可以阅读更多内容维基百科:传统 UNIX 权限。
您破坏系统的原因是许多进程无法再读取其设置,无法访问 /etc。将整个 /etc 目录恢复到之前的状态并不容易。如何做到这一点取决于您的发行版,但基本上这意味着重新安装包含 /etc 中任何文件的每个软件包。
作为能够使用系统的快速创可贴,为了正确修复它(重新安装 /etc 中包含内容的所有软件包,如上所述),您可以执行以下操作:
# sudo find /etc -type d -exec chmod 775 '{}' \;
# sudo find /etc -type f -exec chmod 664 '{}' \;
通过这两行,您将在所有 /etc 目录中设置自由权限,允许所有者和组读/写,并允许其他人读。两个 chmod 的原因是仅在目录上设置执行位。即使如此,某些进程也会抱怨或失败,包括 /etc 中的任何可执行文件,但您应该能够执行我上面概述的重新安装。
请注意,在您恢复原始权限之前,您的系统至少将处于不安全状态。
答案3
700 已删除组和世界用户对大量文件的访问权限(例如文件现在具有rwx------
权限)。例如,所有用户都需要能够阅读/etc/passwd
.通过您的设置,现在只有 root 可以读取/etc/passwd
.如果您以不可预测的方式破坏文件的权限,许多事情都会被破坏/etc/
。
您可以尝试根据工作服务器重建权限(假设您仍然可以切换到 root),但这很容易出错。
如果您有备份,我建议您/etc/
从备份中进行恢复(确保恢复恢复权限,或者,如果您的备份解决方案支持,则仅恢复权限)。