在 Ubuntu 中从“chmod -R 777 /”恢复

在 Ubuntu 中从“chmod -R 777 /”恢复

可能的重复:
错误设置 chmod / 777。有问题吗?

我使用 Ubuntu 进行开发。

当我在数据库方面工作时,有很多事情需要文件权限才能根据要求访问数据目录或其他目录。

每次我收到这样的错误:

[ERROR] path/to/directory/ permission denied

为了避免这种情况,我必须从终端以 root root 身份登录,并使用以下命令授予对该目录的访问权限:

chmod -R 644 /path/to/directory

为了完全避免这个问题,我使用以下命令授予了完全访问权限:

chmod -R 777 /

现在我的系统出现了一些问题。

我无法从操作系统帐户或终端以 root 身份登录。如果我重新启动系统,我不确定它是否会顺利启动。

我认为一些不应该被授予完全访问权限的文件被授予了完全访问权限,但我不知道这些文件是什么。

谁能帮我吗?

答案1

chmod -R 777 /

如果您发现自己正在考虑将模式递归地777应用于任何目录,请停下来花点时间绝对确定这就是您想要做的。777是以下形式的简写:

  • 允许文件所有者读取、写入和执行
  • 允许文件组成员读、写和执行
  • 允许系统上的每个人读、写和执行

(为了简单起见,我将忽略setuid,setgid和粘性位的问题)

这几乎总是不是您想要的。

将此权限递归地应用到文件系统的 root( /) 将为计算机上的每个文件和目录设置这些权限。这绝对是不是你想要的

就从中恢复而言......纯粹是假设的,如果

  • 你的 Ubuntu 系统仍在运行,你可以以 root 身份sshd登录ssh

你还有另一台机器

  • 可以通过以下方式连接到您的开发机器ssh
  • 拥有与您的开发机器非常非常相似的文件系统(例如,相同版本的 Ubuntu 的全新安装以及您选择的 DBMS)

以下命令将该计算机的文件权限复制到您的开发盒中:

sudo find / -print0 | \
xargs -0 stat -c "chmod %a '%n'; chown -h %U:%G '%n';" | \
ssh user@your-development-machine

这将需要一些时间来运行。

777这很有可能修复你的 Ubuntu 机器上的大量'd 权限。但是,即使在最好的情况下,您也应该预料到会遇到更多与权限相关的错误,需要手动修复。

另一种选择,也是我推荐的选择,是完全重新开始。备份您的数据,重新安装 Ubuntu、DBMS 以及开发盒上所需的任何其他软件。

答案2

如果您不再拥有 root 访问权限,那么您就不走运了,重新安装是您最好的选择。

有些文件具有奇特的权限,例如4755命令susudo,如果没有这些权限,它们将无法运行。

答案3

给予全世界对文件系统的读、写和执行访问权限通常是一个非常糟糕的主意。一方面,有权访问您计算机的每个人基本上都可以对系统执行任何操作。此外,还有几个系统守护进程,例如ssh检查目录和文件的权限。如果它们不正确,这些守护进程通常无法启动。

针对您当前情况的最佳解决方案是从备份中恢复。因此,您可以轻松取回具有正确权限的所有文件。

如果您没有备份,下一个实用的解决方案是重新安装系统。因此,首先您备份文件,保存已安装的软件 ( dpkg --get-selection > installed-software.txt),然后安装新系统并安装您使用的软件 ( apt-get update && dpkg --set-selection < installed-software.txt && apt-get -u dselect-upgrade)。现在您拥有了一个全新的系统,您可以更新您的配置文件。

另一种解决方案是编写脚本。该脚本应该递归地遍历您的文件系统,并将每个文件和目录的权限与其他系统进行比较。它可以根据其他系统更改权限。您可能需要更改一些值,但此脚本可以为您完成主要工作。如果您可以物理访问计算机,则此解决方案也适用。只需从 Live-CD 或 USB 记忆棒启动并挂载文件系统即可。或者您也可以卸下硬盘并将其安装在另一台计算机上。

然而,从我的角度来看,恢复正常运行的系统的最快方法是备份并重新安装。

相关内容