如何在“chmod -R 777 /usr/bin”之后修复 sudo?

如何在“chmod -R 777 /usr/bin”之后修复 sudo?

我输入了chmod -R 777 /usr/bin,但是现在 sudo 不起作用。

它说sudo must be setuid root

网上的一些建议说要运行chown root:root /usr/bin/sudo chmod 4755 /usr/bin/sudo

输入后chown root:root /usr/bin/sudo显示opened in readonly mode错误。

答案1

尽管已被录取,但我现在确信这个答案是错误的。(在与 OP 讨论过 accept 之后,我希望尽快改进它。)我记得其他人说这有效,但我相信他们的问题至少略有不同。此处描述的方法对于某些被+chmod -R 777 /usr/bin中断或无法完成的情况仍然有用。但一旦完成,CtrlCpkexec也是未设置的,并且它不会比sudo正如 Damien Roche 和 Oli 正确评论的那样。

在 Ubuntu 桌面系统上,PolicyKit已安装,因此pkexec可以用来修复损坏的sudo可执行文件或sudoers文件。您无需启动到恢复模式,也无需从实时 CD 启动。您甚至无需重新启动。

在这种情况下,运行以下命令:

pkexec chown root:root /usr/bin/sudo
pkexec chmod 4755 /usr/bin/sudo

这个问题了解更多信息。

答案2

即使从实时 CD/U盘运行,您也必须chmod在命令前加上前缀sudo。因此您的步骤将如下所示:

  1. 从实时 CD/U盘启动
  2. 检查磁盘是否已自动挂载(以及挂载到哪里)。如果没有,请挂载它(见下文)
  3. 用于sudo chmod 0755 <path>调整权限

如何确定磁盘的安装位置:从终端窗口运行mount(不带参数)。这将列出所有已安装的设备。检查type列出的内容——您可以跳过不使用“真实文件系统”的所有内容(您的磁盘可能使用 ext3 或 ext4——您肯定可以跳过诸如 proc、sysfs 等内容)。如果某事听起来很有希望(看起来像/dev/sda1 on /media/sda1 type ext3),请使用检查其内容ls /media/sda1以查看是否是那样。

如果未安装,您可以检查/dev磁盘可能所在的条目(使用ls /dev/ |grep '/dev/sd检查可用设备;您的磁盘应看起来像/dev/sdaX/dev/sdbX类似的东西——其中 X 是数字)。将其与已安装设备的列表进行比较。如果它不在那里,请尝试安装它并检查其内容(如上所示)。要安装它,首先创建一个安装点,例如sudo mkdir /mnt/mydisk,然后尝试使用 安装设备mount /dev/sda1 /mnt/mydisk并使用 检查其内容ls /mnt/mydisk

一旦您获得正确的磁盘,您就可以去更改您的 usr 目录中的权限:sudo chmod 0755 /mnt/mydisk/usr

chmod现在,如果您最初使用参数递归运行该命令,则可能仍会遇到麻烦-R。在这种情况下,您可以尝试手动修复每个条目 - 或者您可以直接进行全新安装...

答案3

我认为 Mat 是对的,您必须是 root 才能将位添加到 /usr/bin,但 sudo 当然是坏的。如果您有 root 密码,则可以使用该密码以 root 身份登录,然后使用上述命令修复权限。但是,如果您没有(我也没有),那么最好这样做:

  • 从 Linux Live CD 启动
  • 成为根
  • 使用上述系统挂载分区
  • 然后使用终端理顺该文件系统的权限。

Root 始终是用户编号 0,因此任何系统上的 Root 都可以对其他文件系统上的 Root 进行允许的更改。

答案4

在尝试设置本地脚本的权限时,我错误地破坏了 sudo 权限并更改了所有权。我可以通过执行以下操作将 sudo 的所有权改回 root:

步骤1:切换到ubuntu 恢复模式。如果你不了解这个过程,你可以参考这里的答案:https://askubuntu.com/a/172346/223901

第2步:进入恢复模式后,选择root — 进入 root shell 提示符

步骤3:执行以下命令

mount -o remount,rw /
chown root:root /usr/bin/sudo
chmod 4755 /usr/bin/sudo
reboot

等待系统启动通常情况下您将看到 sudo 的所有权已回到 root 手中。

相关内容