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


15

我进入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
您必须是root用户才能运行这些命令

Manoj Kumar:我的答案中pkexec方法(您已标记为接受)是否为您解决了此问题?我已经确信,正如Damien Roche和Oli所评论的那样,在sudo chmod -R 777 /usr/bin命令成功完成之后,该方法实际上不起作用像一样sudopkexec必须是setuid root才能工作。(我不知道为什么,因为它使用polkit 服务,但确实如此。)但是,我想我听说其他人说这对他们有用,这很好奇!在777chmod命令完成之前是否按过Ctrl + C ?
伊利亚·卡根

你好。在我意外成功运行后sudo chmod -R 777 /usr/bin,但仅在登录root帐户后,此方法才对我有效。
iHowell

Answers:


10

尽管处于接受状态,但我现在确信这个答案是错误的。(我希望在与OP协商接受之后,尽快对其进行改进。)我想我还记得其他人说过的方法,但是我相信他们的问题至少稍有不同。本文描述的方法对于某些chmod -R 777 /usr/binCtrl+ 中断C或无法完成的情况仍然很有价值。但是一旦完成,它也将pkexec变得不安定,并且不会比sudo Damien Roche和Oli正确地评论过的要好

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

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

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

有关更多信息,请参见此问题


9
pkexec must be setuid root!什么样的恶梦!
Damien Roche 2013年

1
正如Damien所指出的,这种方法的问题与pkexec完全一样sudo。它通常是setuid并生活在中/usr/bin。我已经测试过了,但之后一直无法使用chmod -R 777 /usr/bin
奥利

@ DamienRoche,Oli:很抱歉没有尽快解决这种问题!你们都是对的 我不确定为什么pkexec必须要以setuid root身份工作(它不能像其他非setuid进程一样通过polkit守护程序工作吗?),但是确实需要这样做我对问题进行了评论,以了解OP(接受此操作的人)是否可以阐明该答案的正确之处或帮助之处(如果有的话)。而且我在帖子的顶部添加了一个临时横幅,因此我不会进一步误导。如果此答案继续存在,则其改进形式可能会包含该横幅中当前的一些信息。
伊莱亚·卡根

您可以使用su/ bin下的,
FliiFe

@FliiFe修复文件的权限(或所有权)/usr/bin需要root特权,但是您不能su在大多数Ubuntu系统上成为root用户,因为默认情况下禁用root登录。与sudo和不同pkexec,当您用于su获取root用户的shell或以root用户身份运行命令时,必须提供root用户的密码,而不是您自己的密码。但是默认情况下,root在Ubuntu中没有密码(也就是说,基于密码的root身份验证将始终失败,而不是输入空白密码会起作用)。有关详细信息,请参见RootSudo
伊莱亚·卡根

4

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

  1. 从实时CD / Pendrive启动
  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参数递归运行命令,则可能仍会遇到麻烦。在这种情况下,您可以尝试手动修复每个条目-或直接进行全新安装...


我试图创建挂载点,但我得到了它读了错误的安装点MNT / mydisk不存在是mydisk到一些东西,只为我写的记录来代替mount /dev/sda /mnt/mydiskroot@Ubuntu:/dev#
VIN

你做的)创建安装发出mount命令(如之前描述点(目录))和b)照顾的领先斜线呢?尝试mkdir -p /mnt/mydisk && mount /dev/sda1 /mnt/mydisk(我不认为你有没有分区/dev/sda,所以你一定错过了分区编号,以及确保您指定正确的设备(或安装会失败)。
的Izzy

1

我认为Mat是正确的,您必须是root用户才能将该位添加到/ usr / bin,但是sudo当然是坏的。如果您具有root密码,则可以使用该密码以root用户身份登录,然后使用上述命令修复权限。但是,如果您不这样做(并且我也不这样做),则最好执行以下操作:

  • 从Linux live CD引导
  • 在那里扎根
  • 用上述系统挂载分区
  • 然后使用终端理顺该文件系统上的权限。

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


1

我没有太多知识。但是即使不重新启动计算机,这些步骤也解决了我的问题。按着这些次序:

su root
<enter root password>
cd /usr
chmod -R 755 *

1
您至少缺少一个“ cd”命令。如果您这样做,您将在根目录的主目录中执行“ chmod”。这会使情况变得更糟。
Rinzwind 2015年

thaks ...编辑了我的答案...我在/ usr文件夹中
Manu Mohan Thekkedath

2
仅当为设置了密码(root这不是Ubuntu的默认配置)时,此方法才有效。
David Foerster,2015年

1

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

步骤1:切换到ubuntu恢复模式。如果您不知道该过程,则可以在此处参考答案:https : //askubuntu.com/a/172346/223901

第2步:进入恢复模式后,选择root-Drop to root shell提示

步骤3:执行以下命令

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

等待系统正常启动,您将看到sudo的所有权恢复为root。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.