为什么要以su身份而不是root身份登录?


33

我经常听到,使用su而不是直接以root用户身份登录是更好的选择(当然,人们也说使用sudo更好)。我从不真正理解为什么洞见比别人更好?


2
您是在考虑ssh登录还是从物理机登录?
Telemachus

Answers:


43

推论仅针对susudo在需要时进行。

大多数日常任务不需要root shell。因此,优良作法是使用无特权的Shell作为默认行为,然后仅在需要执行特殊任务时提升为root。

这样,您可以减少所使用的任何应用程序中的危险错误(错误的脚本,错误的通配符等)和漏洞的范围。特别是那些连接到Internet的服务器-看到一句老话“ Do n't IRC as root”

sudo 通常建议您这样做,因为它可以让您细化并审核此类特权的使用。

通过遵守这些做法,您还可以禁用远程root登录。这增加了任何潜在攻击者的进入门槛,因为他们将需要损害既是“ wheel”组成员的常规用户帐户,又要在理想情况下仅通过SSH公钥授权,然后再破坏root帐户本身。


1
您能否充实为什么远程root登录是“相当大的漏洞”。
thepocketwade

5
因为全世界都知道用户名(“ root”),所以这只是弄清楚密码的问题。他们可以用蛮力做到这一点,并接管您的计算机。
Shalom Craimer 09年

2
sudo的另一个优点:记录执行的命令。
Manuel Faux

那是审计;)
丹·卡利

1
虽然sudo是高级的,但su还允许您-m在根终端中使用该标志来使环境变量保持相同。没有什么可以驱使我更多傻瓜然后su扎根一点,只是~在目录名称中做一些事情而使其无法工作。
tj111

27

您应该从远程禁用root用户访问权限,这样攻击者就不会在没有先损害用户然后升级到root用户的情况下损害root用户。我们仅在控制台上启用root访问。

此外,它还建立了责任感。:)


+1短短并指向重点
lexu

15

主要原因是要创建审核跟踪。如果您需要先以普通用户身份登录系统,然后再执行su,则可以跟踪谁负责给定的操作。


在某人运行su-root之后,如何确定他们运行了哪些命令?这是记录在某处吗?
Dobes Vandermeer

10

sudo还会自动将每个命令记录到syslog中,您可以定义每个用户可以使用的命令。


3
至于日志记录:对于每个以“ sudo”开头的命令都是这种情况,但是在使用sudo提升到根shell的情况下,命令仅记录在传统区域(特别是shell历史记录)中。
Zenham

2
的确,sudo vim foo.txt然后从vim中放到shell中将为您提供根shell,而无需常规的sudo日志记录。
Ophidian

或者只是sudo -i为了进行互动式会议……
Kamil Kisiel

我不了解sudo vim foo.txt的问题。我运行了该代码,然后退出vim,仍然是我自己,我是否缺少某些东西?
thepocketwade

您可以通过输入sudo su-或sudo vim来“欺骗” sudo给您一个shell,然后进入一个新的subshel​​l。但是,如果您使用sudo是因为您希望将所有内容都登录到syslog中(集中式),并且您知道它也可以用于获取另一个subshel​​l,那么我认为它没有任何问题,只要有好处,我不仅依赖它。
Jure1873

9

另一个很好的理由:通过sudo提升为root用户时,用户将使用其自己的凭据进行身份验证,这意味着不必为他们提供root密码,这使得在有人离开您的组织时更容易将其锁定。


4

如果要创建审核跟踪,并且不想成为此处提到的“ sudo su-”或“ sudo vim foo.txt”问题的受害者,则可以使用“ sudosh”。通过sudo分发根访问权限,但使唯一允许的命令运行“ sudosh”。

sudosh是一个日志记录外壳,您可以稍后重播整个终端会话,以准确显示用户在终端上看到的内容。


那当然是假设sudosh在系统上可用。我只是检查了一下,而我的任何Linux机器上都没有。
约翰·加迪尼尔

您也可以在启用了审计跟踪日志的情况下使用新的ksh93。检查这篇文章在IBM developerWorks中国:ibm.com/developerworks/aix/library/au-korn93/...

只需运行一个shell脚本(然后您随后擦除它)就可以轻松绕开它。以无害的名称(以未经审核的用户身份)创建脚本(或从工作站中将其脚本化),然后执行sudo并运行它。您甚至可以通过将其命名为'ls'或类似的名称并将其放入$ PATH中(如果需要可以更改$ PATH)来真正隐藏它,并在调用/ bin / ls时使其变得肮脏,使其看起来很正常。然后擦拭。审核日志不会知道/ home / anthony / bin曾经包含“ ls”。
derobert

是的,这并不完美;我们知道这一点-但这比纯朴的“ sudo su-”恕我直言更好。是的,默认情况下未在AFAIK的任何位置安装它。但是,它确实很容易在Solaris和Linux上运行。
mibus

1

您应该深入练习安全性。

禁止远程根访问(或至少通过密码进行根访问)。(如果您允许通过密钥进行根访问,请仔细控制这些密钥,或者最好使用像kerberos这样的方法来允许集中撤销密钥)。

我会禁用su并使用sudo。这样,用户使用密钥(最好是加密的)来访问系统,然后他们仅密码用于特权升级。您可以使用sudo限制人们访问哪些程序,但是大多数情况下,您只限于对知道root密码的用户进行访问。

在理想的情况下,即使您允许人们访问您的计算机(但没有将它们放在/ etc / sudoers文件中),您也应该能够在Internet上发布您的root密码,这没关系。当然,您不应该发布root密码,但是其想法是使用同心的保护层来保护系统。


0

这个想法是禁用root登录,因此没有默认的管理员帐户。这样,攻击者必须猜测用户名和密码(而不仅仅是密码)。


0

如果您定期使用root用户,则您的权限可能是错误的,或者您可能需要授予sudo权限或新的组权限来对文件或目录进行r / w / x。

好的权限机制甚至是长期使用Linux的用户都会犯错,或者甚至没有意识到他们拥有的范围。

甚至不让我开始了解Ubuntu所做的事情!


-2

它使您无法运行rm -r -f / 2天前我才运行(作为非特权用户,我打算运行rm -r -f *)


接受的答案已包含所有信息。
Theuni 2012年
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.