为什么su world可执行?


20

我有一台无头服务器,该服务器由多个用户远程登录。sudoers文件中没有其他用户,因此他们不能通过获得root用户sudo。然而,由于权限上su-rwsr-xr-x没有什么东西尝试暴力破解root密码阻止他们。

有人可能会争辩说,如果用户知道root密码,他们仍然会危害系统,但我认为情况并非如此。OpenSSH使用PermitRootLogin no和进行配置,PasswordAuthentication no其他用户均无权访问该服务器。据我所知,世界上的执行权限/usr/bin/su是试图在我的服务器上获得root 权限的用户的唯一途径。

更令我困惑的是,它似乎根本没有用。它使我可以su直接运行而不需要执行操作sudo su,但这并不麻烦。

我在俯视什么吗?世界是否su出于历史原因就在那里执行许可?删除我尚未遇到的权限是否有不利之处?


9
“它使我可以直接运行su而不需要执行sudo su,但这并不麻烦。” -没有sudo安装可选件的系统呢?我想说这是个很大的不便;)
marcelm

1
您始终可以限制对/ bin / su的访问,但请记住对/ usr / bin / pkexec也要进行同样的操作。
jpa

6
我似乎无法理解这个问题背后的动机。听起来您想知道su为什么需要在世界范围内执行,但是替代方法的目的是什么?也就是说,如果su只能由root(?)执行,那么您认为它可以用于什么?
David Z

1
@DavidZ实际上,它对于root确实有用!您可以使用它快速切换用户。
瓦尔说莫妮卡

1
@val是的,是的。root可以使用su的事实不在这里。(在重读时,我可以看到以前的评论会提出其他建议,但这不是我的意思。)我很好奇Altay_H在问这个问题之前是怎么想的。
David Z

Answers:


39

ilkkachu的答案中缺少的一点是,提升到root只是的一种特定用法su。su的一般用途是在另一个用户的登录帐户下打开一个新的shell。该其他用户可能root(并且也许经常是)其他用户,但是su可以用来假定本地系统可以验证的任何身份。

例如,如果我以user身份登录jim,并且想要调查mike已报告但无法重现的问题,则可以尝试以身份登录mike并运行给他带来麻烦的命令。

13:27:20 /home/jim> su -l mike
Password:(I type mike's password (or have him type it) and press Enter)
13:27:22 /home/mike> id
uid=1004(mike) gid=1004(mike) groups=1004(mike)
13:27:25 /home/mike> exit  # this leaves mike's login shell and returns to jim's
13:27:29 /home/jim> id
uid=1001(jim) gid=1001(jim) groups=1001(jim),0(wheel),5(operator),14(ftp),920(vboxusers)

使用原因-l选项su会使它模拟完整登录(man每页)。

但是,以上要求知道mike的密码。如果可以sudo访问,mike即使没有密码也可以登录。

13:27:37 /home/jim> sudo su -l mike
Password:(I type my own password, because this is sudo asking)
13:27:41 /home/mike>

综上所述,原因在权限su可执行文件是为您展示,是因为su是一个通用的工具,可用于系统上的所有用户。


1
这很有意义。由于我有使用习惯,sudo我忘记了它不仅su可以使用sudo -s。而且,如果不做得更轻松,这将是在不更改ssh密钥的情况下切换用户的唯一方法。对于我的用例,这是删除权限的另一个原因,但是我现在理解为什么默认情况下设置世界执行权限。谢谢!
Altay_H

1
另一点是sudo,也可以用来假设用户的身份,而不是root。它只是允许对谁可以做什么进行更细粒度的控制,包括假设另一个身份无需该身份的密码。
chepner

造成混淆的部分原因是,人们认为su代表“超级用户”,当没有指定用户(或明确指定根用户)但代表“切换用户”时,代表“超级用户”。su因此,很容易忘记第二次使用。
蒙迪·哈德

20

历史上(在非GNU unice上)不是,或者至少手动检查了您是否在允许使用的“ wheel”组中susu由于RMS当时关于访问控制的思想,GNU的GNU版本没有重现此功能:

Why GNU `su' does not support the `wheel' group
===============================================

   (This section is by Richard Stallman.)

   Sometimes a few of the users try to hold total power over all the
rest.  For example, in 1984, a few users at the MIT AI lab decided to
seize power by changing the operator password on the Twenex system and
keeping it secret from everyone else.  (I was able to thwart this coup
and give power back to the users by patching the kernel, but I wouldn't
know how to do that in Unix.)

   However, occasionally the rulers do tell someone.  Under the usual
`su' mechanism, once someone learns the root password who sympathizes
with the ordinary users, he or she can tell the rest.  The "wheel
group" feature would make this impossible, and thus cement the power of
the rulers.

   I'm on the side of the masses, not that of the rulers.  If you are
used to supporting the bosses and sysadmins in whatever they do, you
might find this idea strange at first.

您可以通过谷歌搜索“轮组rms”或类似内容找到更多信息。


3
这是唯一正确的答案。该设置是有意的,历史性的,这恰恰是其原因。所有技术上的谴责就是这样-blabla。您可以绝对重新引入现代Unix中的“ wheel”组。
汤姆

10

然而,由于权限上su-rwsr-xr-x没有什么东西尝试暴力破解root密码阻止他们。

是。假设您使用的是普通的Linux系统,该pam_unix.so模块会将认证尝试失败的时间延迟了大约2秒钟,但是我认为没有什么可以阻止同时尝试的。

当然会记录失败的尝试:

Aug 16 22:52:33 somehost su[17387]: FAILED su for root by ilkkachu

如果您有用于监视密码的任何系统,则暴力破解密码应该在日志中突出显示。如果您拥有不受信任的本地用户,也许应该。不受信任的本地用户还可以尝试使用任何仅本地特权升级漏洞,并且比远程特权升级更为普遍。

更令我困惑的是,它似乎根本没有用。

当然,它很有用root,如果您知道密码,它可以使您提升为。

它使我可以su直接运行而不需要执行操作sudo su,但这并不麻烦。

sudo su有点多余。无需使用两个程序即可让您以另一个用户身份运行程序,一个程序就足够了。如果要运行shell,只需使用sudo -isudo -s(或其他sudo /bin/bash)。

我在俯视什么吗?世界是否出于历史原因才对su执行许可?

往上看。好吧,并非所有系统都sudo可以替代,我不确定您是否认为这是历史性的。

删除我尚未遇到的权限是否有不利之处?

据我所知,不是真的。我认为某些系统已su设置为仅特定组(“ wheel”)的成员可以运行它。sudo如果喜欢(chown root.sudousers /usr/bin/sudo && chmod 4710 /usr/bin/sudo),也可以执行相同的操作。

或者,如果不需要它们,则可以仅删除其中一个或两个程序。尽管在Debian上,软件包su附带了login,所以从整体上删除软件包可能不是一个好主意。(并且像这样配对loginsu在一起似乎有些历史性。)


1
BSD系统要求用户在wheel组中才能使用su。有些BSD系统(我只能说OpenBSD)根本不附带sudo(这是第三方软件包)。OpenBSD具有doas对的基础的重新实现sudo,但是在安装新系统时默认情况下处于禁用状态。
库萨兰达

@Kusalananda wheel如果您想su生根,则只需要进入即可。任何帐户都可以su访问具有密码的任何非root用户帐户,而不管其在该wheel组中的成员身份如何。
Jim L.

我运行“ sudo su-”以确保我获得的root shell是完整的root登录名,而用户帐户没有受到污染的环境。RHEL上的默认sudoers包含许多可执行的环境变量(例如PS1)。
jsbillings

@jsbillings,嗯,好的。不su清除环境呢?在Debian上似乎没有做到这一点
ilkkachu,

在我所知道的每个Linux中,“ su-”都可以使用。注意破折号。
jsbillings,

7

您已经有了一些不错的答案,但是您的帖子中有一部分是他们没有解决的。

据我所知,/ usr / bin / su上的世界执行权限是试图在我的服务器上获得root权限的用户的唯一途径。

这是一个危险的假设。如果您为root设置了一个很好的密码,那么在大多数情况下成功进行特权升级的可能性更大是由于利用了内核中的错误或setuid二进制文件(您当然也可以删除setuid从中获取一些信息,但是passwd是setuid,如果您想提高安全性,还应该向用户提供此信息,并且拒绝他们更改密码的选项与此不兼容)。


1

su必须是世界可执行的,以便每个人都可以运行它。在许多系统中,可以通过提供其密码来将其更改为另一个用户。

如果您担心有人强行使用root密码,则可以将其禁用。(使哈希无效,因此没有给定的密码可以匹配它)

我不了解共识,但我考虑能够直接以root用户身份登录本身就是一个安全问题。


-2

其他答案是正确的,说“ su”允许您登录除root以外的帐户。

关于“ sudo su”的注释。实际上,这使您无需知道root密码即可登录到root帐户。您必须知道运行sudo所使用的帐户的密码,并且该帐户位于sudoers文件中。


3
这完全取决于是否sudoers拥有targetpwrootpw设置。
大师

1
这与su所有人都可以执行无关。
库萨兰达
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.