我使用 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
,那么为什么它会把我锁在外面呢?
答案1
1. 为什么你没有 root 密码
当你能为超级用户帐户创建一个密码,以便您以 root 身份登录su
,值得一提的是,这不是 Ubuntu 的常用做法(或者越来越多地,其他发行版也是如此)。Ubuntu 选择不是出于某种原因,默认提供 root 登录名和密码。相反,默认 Ubuntu 安装将用于sudo
提供超级用户权限。在默认 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,必须使用exit
或退出logout
。这可能会导致人们停留在超级用户 shell 中的时间超过必要时间,只是因为这比注销并稍后再次登录更方便。
使用 sudo,您仍然可以选择使用以下命令打开永久(交互式)超级用户 shell:
sudo su
...并且这仍然可以在没有任何 root 密码的情况下完成,因为sudo
赋予了该命令超级用户权限su
。
类似地,您可以使用或其快捷方式su -
来代替登录 shell 。sudo su -
sudo -i
但是,在这样做时,您只需意识到您是作为每个命令的超级用户。 一个很好的安全原则是不要以超级用户身份停留超过必要的时间,只是为了减少意外对系统造成损害的可能性(没有它,您只能损坏用户拥有的文件)。
需要澄清的是,你能,如果您愿意,请为 root 用户提供一个密码,允许以 root 身份登录,如 @Oli 的回答中所述,如果您特别想以这种方式执行操作。我只是想让您了解 Ubuntu 的偏好惯例,sudo
并让您知道还有另一种选择。
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/ 中的配置,则这是一个警告信号,表明您做错了什么。
答案2
默认情况下,超级用户 ( root
) 帐户是禁用的,并且没有任何密码。您可以通过运行以下命令创建一个:
$ sudo passwd root
然后您将能够su
使用该密码运行并以 root 身份登录。
至于chmod
,正确的命令应该是:
$ chmod 777 -R foobs
您还可以使用:
$ sudo -i
使用您的密码以 root 身份登录(无需如上所述创建 root 密码)。