问题描述
所以我一直在阅读使用su
和sudo
之间的差异,所有人似乎都同意sudo
方法比允许访问root帐户本身更安全。他们说使用root帐户只需一个命令即可破坏整个系统。我明白了。但是,在系统上创建的初始用户也可以使用sudo访问所有命令。我可以通过运行su -l
找到它。如果是这种情况,那么我可以简单地运行sudo <game-ending command>
来破坏我的系统。那么这种方法如何更好或更安全,然后允许我直接访问超级用户帐户?我可以运行所有相同的命令……
是因为在命令行上使用sudo
我明确告诉计算机我想我知道我在做什么?他们是否认为人们会忘记他们属于超级用户帐户,除非他们明确这样说?
人们还说,如果系统遭到入侵并由外国人进入,那么在root帐户下会让他们对我的系统做出可怕的事情。但在我看来,如果他们已经可以访问我的帐户,并且知道我的密码,他们可以通过使用sudo并输入我的密码来做同样可怕的事情,因为他们甚至不需要知道超级用户的密码。我没有到这里来的是什么?
最佳解决方法
就个人而言,我不一定认为它更安全,并且(sudo)的大多数好处都在多用户系统上。在单个用户系统上,它可能是一个洗涤。
好处是(没有特别的顺序):
-
sudo有优越的伐木。 sudo记录每个命令。
-
sudo允许更精细的谷物控制。可以配置sudo来授予对某些命令但不是所有命令的root访问权限。
-
sudo使用登录密码。这可以保护必须提供root密码(就像你使用su一样),并且与上面关于更细粒度控制/访问root的关联点有关。
-
在Ubuntu中,默认情况下,root帐户被锁定。这会阻止破解者登录(远程通过说ssh)他们必须猜测用户名和密码。如果root帐户没有被锁定,就像su一样,那么他们只需要破解root的密码。
-
sudo -i
可能是从您的用户中分离root的环境变量的最佳方法。这种情况不时出现,但是中等深奥。请参阅https://help.ubuntu.com/community/RootSudo#Special_notes_on_sudo_and_shells -
有些人觉得必须在他们希望以root身份运行的每个命令之前键入sudo或者让sudo超时,这样他们就可以停下来思考更清楚并减少错误或运行错误的命令。如果这样做对你有帮助,那也是一个好处。
可能有更多的好处,但是,那些是主要的,恕我直言。
另请参阅 – https://help.ubuntu.com/community/RootSudo
试着回答一些其他的想法:
-
只要您知道密码,su或sudo就无法阻止您运行恶意代码。既不安全也不更好。
-
破解者可以通过多种方法获得shell访问权限。当你在安全通知中看到“运行任意代码” – https://usn.ubuntu.com/usn/ – 这意味着一个破解者可以运行/bin /bash或任何其他代码。因此,通过各种攻击,破解者可以在不知道您的登录名或密码的情况下获得shell访问权限。 sudo或su都没有帮助。
-
如果一个破解者有shell访问权限,他们可以在没有root权限的情况下造成很大的破坏。例如,加密所有个人数据的勒索软件。
-
如果一个破解者通过su或sudo对具有root访问权限的帐户进行shell访问,则破解者可以通过本讨论范围之外的多种方法获取root访问权限。在这方面,sudo或su都不是优越的。
因此,虽然你已经观察到sudo存在问题或缺陷,但su具有完全相同的漏洞,并且su在这些方面并不优于sudo,恕我直言
次佳解决方法
想象一下,你有20分钟做一些复杂的事情。你有点宿醉,你必须赶时间。你说,“让我们用su”。 “它会节省一些时间”是你的推理。
你不小心打字
rm -rf /*
代替
rm -rf ./*
你的系统现在正在自行封锁,你有10分钟直到你的截止日期。
如果您明确选择何时需要root,则可以最大限度地减少发生这种情况的可能性。 rm -r ./*
可能不需要Root,为什么要使用它?为什么要承担风险?
这就是“safety”在这里的含义。最大限度地降低用户(所有用户,而不仅仅是初学者)犯下致命错误的风险。
当然,这是一个极端的例子,不应该允许在生产环境中发生(我保证它发生在生产环境中)。
安全方面也有一些sudo更好的东西。作为@Panther says – 日志记录,限制,root密码是SPOF等)
第三种解决方法
我想为其他答案添加一些历史视角。不幸的是,除了我自己对Usenet讨论和杂志文章的 memory 之外,我没有任何消息来源。
前段时间,在20世纪90年代,即使没有太多的计算机知识,发行版也使得在自己的硬件上安装Linux变得更加容易.1因此,Linux开始吸引越来越多的人,这些人以前没有像以前那样被系统管理员用过一些UN * X方言。相反,许多人习惯于(单用户)系统,如Windows 95/98。他们了解到大多数Linux系统管理任务使得必须在奇怪的”root”帐户下工作。
因此,一些用户只是以root身份登录并使用该帐户进行所有日常工作。为什么他们必须一次又一次地键入su
和root密码,或者只为某些管理命令登录到新的tty?但是使用root作为一切当然不是一个好主意,因为你可以在错误的地方用一些不明智的命令对你的系统造成更大的伤害。这甚至导致一些发行版(是SuSE?)修改root用户的桌面背景,以显示一个大警告,你应该只将该帐户用于管理任务。
因此,使用sudo
的Ubuntu方式有一些优点(除了那些已经是listed by Panther)。
-
你不能直接登录到root帐户.²:-)
-
安装过程不会要求您提供(附加)root密码,只需要一个(您的用户)密码。
-
sudo
缓存您的凭据,因此对于多个管理命令,您只需输入一次密码(与su
相反)。这减少了以root权限打开shell或新终端的冲动。 -
并且它可以更容易地在线和文档中告诉用户他们必须以管理员身份输入哪些命令
¹对于那些不敢自己做的人,有安装派对。 ²但是,以普通用户身份登录后,可以使用sudo -i
或sudo su - root
等命令获取root shell。 ³但你知道你当然是should not simply copy&paste commands from the Internet,对吗?
第四种方法
几十年来,已经可以通过ssh禁用root登录。 Ubuntu禁用root帐户并让人们sudo所有东西的方式只不过是一个噱头。只是“sudo -s”而你有一个root shell。通过ssh禁用root登录并将其保留在那里。