如何在Ubuntu上找回sudo?


12

我已经做到了:

sudo chown -R myname /usr/

现在sudo由于这个错误我无法使用命令:

sudo:必须是setuid root

当我读到这意味着该文件的所有者/usr/bin/sudo不是根。现在是我的用户,因为/usr文件夹上有chown 。

在许多论坛和博客上,人们建议以root身份这样做:

# chown root:root /usr/bin/sudo
# chmod 4111 /usr/bin/sudo

...但是问题是我需要以root用户身份登录,但是我不能,因为如果我su在终端中写密码错误(实际上,我使用的密码就是我添加到用户中的密码):

$ su
Password:
su: Authentication failure

那么我可以取回sudo命令吗?

编辑:我的Ubuntu在我的Mac OS X上的Paralells下。


“我使用添加到用户的密码”是​​什么意思?使用时su,系统会提示您输入root的密码,而不是诸如的用户密码sudo。您知道这台机器的root密码吗?
卡莱布

不,我不需要添加或修改它,是否有默认设置?
亚当

您需要以单用户模式重启。您正在运行什么发行版?
吉尔斯(Gilles)'所以

1
只是很好奇,但是是什么让您决定经营一家sudo chmod -R cirk:cirk /usr?您试图完成什么?
loosecannon

1
一个程序安装在/ usr /中的某个位置,因为我不知道该程序的确切位置,所以我决定在整个usr文件夹中使用chown,并且由于我是菜鸟,所以我再次搞砸了一切:P
Adam

Answers:


5

如果您有一个类似的系统可以用作指南,以查看所有文件的正确所有权是什么,那么您可以启动到救援模式,放到root shell,然后手动将正确的所有权恢复到所有文件。中的文件/usr

最快的方法可能是重新安装操作系统或从备份还原。

在Ubuntu或类似版本中,默认情况下没有root密码(该帐户已禁用),这就是您不能这样做的原因su


8
哇,这很容易,这并不是Windows重新安装并非总是最简单或最快的方法,而且当然也不会教人们如何解决问题。在这种情况下,他需要做的就是扭转他所采取的操作,可以通过将文件系统安装在另一个环境(如LiveCD或您建议的救援模式(取决于发行版))中轻松地完成。
卡莱布

当您完全放弃对文件系统主要部分的权限时,@ Caleb。他不只是搞砸了sudo,大概他忘了在帖子中提到他使用了-R(否则它将只更改/ usr目录本身的所有者,而不是sudo)。我也确实描述了如何逆转该过程,但这是一项非常耗时且艰巨的任务。
psusi,2011年

1
这是的情况下chownchmod。由于/usr文件夹中的所有内容都应该为root:root,所以这应该是一个简单的修复程序,而不是一个chmod麻烦的修复程序。
卡莱布

2
@Caleb并非/ usr中的所有内容都应该是root:root。
psusi 2011年

6
@Caleb chown复位setxid比特。/usr根目录中不包含一些文件;属于不同组的更多信息(尤其是中的setgid程序/usr/bin)。
吉尔(Gilles)“所以,别再邪恶了”,

11

由于已对唯一授予根级访问权限的权限进行了权限控制,因此您将需要当前软件环境之外的一些帮助来解决此问题。

我建议最简单的方法是为发行版启动LiveCD,安装驱动器并使用chmod此处列出的名称更改文件权限。

您也可以尝试引导到单用户模式以获取root shell。

请注意,通常/usr/目录中的所有内容都应归所有所有,root因此您应该能够进行递归chown修复任何损坏的内容。(编辑:每条@Gilles注释显然在运行时chown会破坏setuid和setgid位,因此一旦再次修复所有权,您需要与现有系统进行手动比较以恢复所有这些。)

但是,非常FEW应该是4111。额外的权限是一种特殊权限,但是即使以用户身份运行,它也可以以root用户身份执行!只有sudo少数几个命令应设置此权限位。如果您没有使用a chmod开头,则可能根本不需要修复此问题,那么所有权限应该已经正确。在不chmod知道所有权限应该是什么的情况下,请不要进行大量操作。


操作系统是否可以在虚拟机中?
亚当

是的,没有区别。您可以使用运行级别1(可以在启动过程开始时从grub / lilo或启动加载程序进行任何操作),也可以将VM设置为使用LiveCD的ISO映像作为启动设备。
卡莱布

亚罕(Aham),在重新安装之前,我会尝试您的建议:)
亚当(Adam)

好的,我想我在LiveCD中,现在我需要在终端中写这个吗?sudo chown -R root /usr/
亚当

/usr从此开始,但不在LivdCD上,您需要将其安装在某个位置并沿该路径运行,例如/mnt/mydrive/usr。然后,您需要将setuid位固定在上/mnt/mydrive/usr/bin/sudo。然后浏览livecd上的/ usr,查看除root之外是否还有其他所有权。find /usr -not -uid 0并更改它们以使其匹配。然后查找设置了不同setuid或setgid位的对象,并确保它们也匹配。如果您有一个真正的Ubunutu系统进行比较,那将是最佳选择。
卡莱布

4

在Ubuntu恢复模式下,输入以下命令。这已解决了我的问题。

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

希望这能解决您的问题(或其他人的问题)

我在这篇博客文章中找到了这个。


2

这比其他答案建议的要容易得多。无需格式化,重新引导或使用实时CD。

su root # then enter your password to switch to root user
chown root:root /usr/bin/sudo && chmod 4755 /usr/bin/sudo
exit # to get back to the original user

这是解决此问题的最简单方法。解释,sudo已损坏(我知道rupted是错误的术语,但是它不起作用,因此,我们需要避免使用sudo)

  • 使用命令1 (su root),我们将用户更改为root,而无需使用sudo。
  • 使用命令2 (chown root:root / usr / bin / sudo && chmod 4755 / usr / bin / sudo),我们修复了sudo的权限/所有权。
  • 使用命令3 (退出),我们回到原始用户。

我已经在Linux Mint上测试了此方法。这是一个像ubuntu一样的系统。让我知道此方法不适用于任何其他OS。将相应地更新答案。

谢谢


据我了解,默认情况下,root帐户没有密码,因此第一步无法提供密码su root,并且由于sudo无法正常工作,因此无法设置root密码
TitanFighter

1
谢谢,它帮助了我。
阿伦(Arun)

1

这比人们做的要简单。请尝试以下操作:

  1. 不用尝试使用broken su命令以root用户身份登录,而是以当前用户身份登录,然后通过普通的Display Manager(即登录屏幕)以root用户身份再次登录。
  2. 在终端上执行以下操作: chown root:root /usr/bin/sudo && chmod 4755 /usr/bin/sudo

这应该可以修复sudo命令,并让您立即启动并运行。


0

要以root用户身份登录,而无需su或sudo,可以使用pkexec:

pkexec su

现在更改文件的权限:

chmod 440 /etc/sudoers
chmod 775 /etc/sudoers.d
chmod 440 /etc/sudoers.d/README
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.