问题描述
我已经使用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
是这里的关键命令。但我正在通过chmod
将foobs
文件打开,那么为什么它会把我锁定?
最佳解决思路
默认情况下,超级用户(root
)帐户被禁用,并且没有任何密码。您可以通过运行创建一个:
$ sudo passwd root
然后,您可以使用此密码运行su
以root身份登录。
至于chmod
,正确的命令是:
$ chmod 777 -R foobs
您还可以使用:
$ sudo -i
使用您的密码以root身份登录(不创建如上所述的root密码)。
次佳解决思路
1.为什么你没有root密码
虽然您可以为超级用户帐户创建密码,允许您使用su
以root身份登录,但值得一提的是,这不是”Ubuntu”的处理方式。出于某种原因,Ubuntu默认选择不提供root登录名和密码。相反,默认的Ubuntu安装将使用sudo
。
Sudo是为人们提供root密码以执行超级用户职责的替代方案。在默认的Ubuntu安装中,默认情况下,安装操作系统的人员将获得”sudo”权限。
任何拥有”sudo”权限的人都可以通过pre-pending 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
命令提供了超级用户权限。
同样,对于登录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
设置为world-writable。我想你已经在某个阶段使用像sudo chmod 777 -R /
这样的命令完成了这个。不幸的是,通过这样做,你可能几乎破坏了整个系统的所有文件权限。这不太可能是唯一一个权限已更改为world-writable的重要系统文件。从本质上讲,你现在拥有一个易于破解的系统,唯一可以轻松获得它的方法是re-install。
其次,您使用的命令:
sudo chmod 777 -R foobs
在操作主目录中的文件时,在本例中为~/Desktop
,您不必使用sudo
。无论如何,您在主目录中创建的所有文件都应该可以修改(如果没有,那么有趣的事情就会发生)。
此外,您需要充分了解整体更改文件权限的后果,例如递归执行或大量文件。在这种情况下,您正在将小心设置的文件权限更改为world-writable。任何其他用户或计算机上的任何错误服务器软件都可以轻松访问以覆盖所有这些文件和目录。
几乎可以肯定的是,chmod 777 -R [dir]
对于你要解决的任何问题都不是一个合适的解决方案(正如我上面提到的,有证据表明你已经对/var /lib中的系统文件做过了,我假设有很多其他地方)。
一些基本的经验法则:
-
如果您只是在主目录,桌面等中弄乱自己的文件,则永远不需要使用
sudo
或超级用户权限。如果你这样做,这是一个警告信号,表明你做错了什么。 -
您永远不应该手动修改包所拥有的系统文件。例外:除非您以这些软件包记录的方式专门执行此操作,例如通过在
/etc
中修改其配置。这也适用于更改文件权限。如果教程或尝试解决问题需要sudo
或超级用户权限,并且它不仅仅是对/etc /中配置的更改,那么这是一个警告信号,表明您做错了。