为什么我没有“ su”的密码?“ sudo”的问题


34

我已经使用GUI安装了Ubuntu,并给了自己一个密码和所有东西。我不记得这个过程。但是,让我担心的是我不知道以下密码:

$ su
Password: <the only password I've ever created on this machine>
su: Authentication failure

我只是不知道该怎么办。我没有麻烦,但是我只想知道这里发生了什么。我也可以将自己锁定在目录之外:

starkers@ubuntu:~/Desktop$ mkdir foobs
starkers@ubuntu:~/Desktop$ sudo chmod 777 -R foobs
sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700
[sudo] password for starkers: <the only password I've ever created on this machine> 
starkers@ubuntu:~/Desktop$ cd foobs
bash: cd: foobs: Permission denied

我有点困惑。我怎样才能这样把自己锁起来?我认为这sudo是关键命令。但是我foobs通过尽可能使文件处于打开状态chmod,那么为什么将它拒之门外?


6
chmod -R 777 whatever除非您要造成巨大的安全风险,否则几乎不应该这样做。

1
@BroSlow感谢您的关注。在这个问题之外,但是如何设置一个对目录的读写权限呢?666
Starkers 2014年

1
绝对更好,但是取决于您要执行的操作。例如,您是否真的需要所有用户都可以对所有内容进行读写访问。如果没有,您可以执行类似644的操作(仅对您以外的所有人可读)。通常,在进行递归操作时,我会非常小心,chmod因为它只会更改您想要的文件。

1
@broslow你高吗?666是1)仍可在世界范围内写入,因此具有相同程度的安全风险,以及2)删除了可执行位,这意味着他将不再能够chdir进入该目录。
Shadur

@Starkers我在这里看到的真正的安全问题是,出于某些疯狂的原因,该问题/var/lib/sudo被设置为世界可写的。这不应该发生,您应该尝试找出原因。
Shadur 2014年

Answers:


49

默认情况下,超级用户(root)帐户被禁用并且没有任何密码。您可以通过运行以下命令来创建一个:

$ sudo passwd root

然后,您将可以su使用此密码运行,以root用户身份登录。

至于chmod,正确的命令将是:

$ chmod 777 -R foobs

您还可以使用:

$ sudo -i

使用您的密码以root用户身份登录(无需如上所述创建root用户密码)。


4
@Oli也许您可以编辑要添加的问题sudo su。这也赋予了终端永久的su权利。
2014年

13
请勿使用sudo su,因为它会破坏环境,并且东西会破裂。改为使用sudo -i
2014年

20
不要设置root密码。不要设置root密码。
wchargin 2014年

4
chmod 777几乎总是不好的(粘滞位是免税的;与/ tmp一起使用)。这个答案是安全隐患。另外,设置root密码不是应使用Ubuntu的方式。再次带来安全风险。请遵循neon_overload的答案。
Rinzwind 2014年

4
@WChargin为什么您建议没有root帐户/密码?作为Archlinux用户,我真的很好奇。
罗布2014年

67

1.为什么没有root密码

尽管您可以为超级用户帐户创建密码,从而允许您以root用户身份登录su,但值得一提的是,这不是使用Ubuntu(或越来越多的其他发行版)的常用方法。由于某种原因,Ubuntu选择默认提供root登录名和密码。相反,默认的Ubuntu安装将用于sudo赋予超级用户特权。在默认的Ubuntu安装中,默认情况下,将为安装OS的人员授予“ sudo”权限。

具有完全“ sudo”权限的任何人都可以通过sudo在命令之前添加“超级用户”身份来执行某些操作。例如,要apt-get dist-upgrade以超级用户身份运行,可以使用:

sudo apt-get dist-upgrade

在网上阅读有关Ubuntu的教程时,几乎都会看到sudo的用法。这是替代方法。

su
apt-get dist-upgrade
exit

使用sudo,您可以预先选择哪些用户具有sudo访问权限。由于他们使用自己的密码,因此无需记住根密码。如果您有多个用户,则只需删除超级用户的sudo权限即可撤销其超级用户访问权限,而无需更改root密码并通知所有人新密码。您甚至可以选择允许用户使用sudo执行哪些命令,以及禁止该用户使用哪些命令。最后,如果存在安全漏洞,则在某些情况下可以留下更好的审核记录,以显示哪个用户帐户遭到入侵。

使用Sudo可以更轻松地使用超级用户权限执行单个命令。使用su,您将永久掉入必须使用exit或退出的超级用户外壳程序logout。这可能导致人们在超级用户外壳程序中停留的时间比必要的时间长,这是因为它比注销然后再登录更方便。

使用sudo,您仍然可以选择使用以下命令打开永久(交互式)超级用户外壳程序:

sudo su

...,并且仍然可以在没有任何root密码的情况下完成此操作,因为sudo它为su命令赋予了超级用户特权。

同样,su -您可以使用sudo su -或其快捷方式代替登录shell sudo -i

但是,这样做时,您只需要知道您正在充当每个命令的超级用户即可。这是一个很好的安全性原则,不要以超级用户身份停留超过必要的时间,而只是为了减少意外损坏系统的可能性(如果没有,则只能破坏用户拥有的文件)。

只是为了澄清,你可以,如果你选择,给root用户密码登录,允许以root身份在@奥利的回答说明,如果你特别希望做的事情,而不是这样。我只是想让您了解sudo代替的Ubuntu约定,并让您知道还有另一种选择。


2. chmod 777 -R命令的问题

您的问题还涉及第二部分:命令的问题sudo chmod 777 -R foobs

首先,以下警告表明您的计算机上可能存在严重的安全问题:

sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700

这意味着在某个阶段,您/var/lib/sudo将成为世界可写的。我想您已经在某个阶段使用了这样的命令了sudo chmod 777 -R /。不幸的是,这样做会使您几乎破坏了整个系统的所有文件权限。这不太可能是唯一的权限已更改为可写的重要系统文件。从本质上讲,您现在拥有一个容易被黑客入侵的系统,并且将其找回的唯一简便方法是重新安装。

其次,您正在使用的命令:

sudo chmod 777 -R foobs

在本例中的主目录中操作文件时~/Desktop,不必使用sudo。无论如何,您在主目录中创建的所有文件都应该可以被修改(如果没有,那将是一件有趣的事情)。

另外,您需要完全意识到更改文件权限的后果,例如以递归方式或对大量文件进行更改。在这种情况下,您需要将设置的文件权限更改为可全局写入。计算机上的任何其他用户或任何故障服务器软件都可以轻松访问以覆盖所有这些文件和目录。

几乎可以肯定,对于您要解决的任何问题,chmod 777 -R [dir]都不是合适的解决方案(并且如上所述,有证据表明您也已经对/ var / lib中的系统文件执行过此解决方案,并且我认为还有很多其他问题地方)。

一些基本的经验法则:

  • 如果您只是在自己的主目录,桌面等中弄乱了自己的文件,则永远不需要使用sudo或超级用户权限。如果这样做,则表明您做错了一个警告信号。

  • 您永远不要手动修改程序包拥有的系统文件。例外:除非您以这些软件包所记录的方式专门进行操作,例如通过修改它们的配置/etc。这也适用于更改文件权限。如果教程或试图解决问题的方法需要sudo超级用户权限,而不仅仅是对/ etc /中配置的更改,那么这是一个警告信号,表明您在做错事。


很棒的解释..竖起大拇指.. :)
Saurav Kumar 2014年

7
我认为“ sudo -i”是获得根shell的“官方”方式,而不是“ sudo su”
2014年

3
是的,您应该使用sudo -iover sudo su
赛斯2014年

sudo -i(或sudo su -)并非普遍更好,而是有所不同-它们启动了一个登录 Shell,该外壳模拟了root用户登录环境,该环境执行例如root用户的.profile文件或.login文件。如果您希望外壳程序中的环境更像是根登录外壳程序,而不是具有超级用户特权的交互式外壳程序,则这些方法会更好。如果使用外壳,最好使用基于登录的外壳,但这没有什么意义:答案是,Ubuntu主要设计用于sudo以超级用户权限运行命令。
thomasrutter 2014年
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.