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

我已经使用GUI安装了Ubuntu,给自己一个密码和一切。 我不会错过这个过程。 但是,让我担心的是我不知道以下密码:

$ su Password:  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:  starkers@ubuntu:~/Desktop$ cd foobs bash: cd: foobs: Permission denied 

我有点困惑。 我怎么能这样锁定自己? 我认为sudo是这里的关键命令。 但我正在将foobs文件打开,因为它可能是通过chmod ,所以为什么它会锁定我?

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

 $ sudo passwd root 

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

至于chmod ,正确的命令是:

 $ chmod 777 -R foobs 

您还可以使用:

 $ sudo -i 

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

1.为什么你没有root密码

虽然您可以为超级用户帐户创建密码,允许您以root身份使用su登录,但值得一提的是,这不是“Ubuntu”的处理方式。 出于某种原因,Ubuntu默认选择提供root登录名和密码。 相反,默认的Ubuntu安装将使用sudo

Sudo是为人们提供root密码以执行超级用户职责的替代方法。 在默认的Ubuntu安装中,默认情况下,安装操作系统的人员将获得“sudo”权限。

任何拥有“sudo”权限的人都可以通过预先挂起的sudo对其命令执行“作为超级用户”的操作。 例如,要以超级用户身份运行apt-get dist-upgrade ,您可以使用:

 sudo apt-get dist-upgrade 

在您阅读有关Ubuntu的网络教程的任何地方,您都会看到sudo的这种用法。 这是另一种选择。

 su apt-get dist-upgrade exit 

使用sudo,您可以提前选择哪些用户具有sudo访问权限。 他们不需要记住root密码,因为他们使用自己的密码。 如果您有多个用户,则可以通过删除其sudo权限来撤消一个用户的超级用户访问权限,而无需更改root密码并通知每个人新密码。 您甚至可以选择允许用户使用sudo执行哪些命令,以及禁止该用户使用哪些命令。 最后,如果存在安全漏洞,它可以在某些情况下留下更好的审计跟踪,显示哪些用户帐户遭到入侵。

Sudo使用超级用户权限执行单个命令变得更容易。 使用su ,您将永久删除超级用户shell,必须使用exitlogout 。 这可能导致人们在超级用户shell中停留的时间超过了必要的时间,因为它比退出和以后再次使用更方便。

使用sudo,您仍然可以使用以下命令打开永久(交互式)超级用户shell:

 sudo su 

…这仍然可以在没有任何root密码的情况下完成,因为sudosu命令提供了超级用户权限。

同样地,对于登录shell,您可以使用sudo su -甚至是sudo -i而不是su -

但是,在这样做时,您只需要知道您是每个命令的超级用户。 这是一个很好的安全原则,不能让超级用户保持超过必要的时间,只是为了减少意外造成系统损坏的可能性(没有它,你只能损坏用户拥有的文件)。

只是为了澄清一下,如果你选择的话,你可以给root用户一个密码,允许以root身份登录,如@ Oli的回答所述,如果你特意想用这种方式做事。 我只是想让你知道更喜欢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 /中配置的更改,那么这是一个警告信号,表明您做错了。