仅有时要求输入 sudo 密码

仅有时要求输入 sudo 密码

这更多的是一种好奇,试图了解更多关于linux权限的知识。所以我不明白为什么我能够执行某些命令而不会提示输入密码,但其他命令却不能。我知道 /usr/bin/sudo 有一个 SUID 位,这显然是有意义的。我正在尝试将权限升级到 root,并且想知道是否能够以任何方式使用 /usr/bin/sudo。 (这是在授权机器上,不用担心)

在这里我表明我实际上是大卫

david@traverxec:~/bin$ id
uid=1000(david) gid=1000(david) groups=1000(david),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev)

显示 /usr/bin/sudo 的 SUID 位设置以及相关两个二进制文件的权限

david@traverxec:~/bin$ ls -la /usr/bin/sudo
-rwsr-xr-x 1 root root 157192 Oct 12 09:49 /usr/bin/sudo

david@traverxec:~/bin$ ls -la /usr/bin/ls
-rwxr-xr-x 1 root root 138856 Feb 28  2019 /usr/bin/ls

david@traverxec:~/bin$ ls -la /usr/bin/journalctl 
-rwxr-xr-x 1 root root 67672 Aug 20  2019 /usr/bin/journalctl

下面显示了使用 sudo 检查网络服务器日志的特定命令完美运行并且不会提示我输入密码!

david@traverxec:~/bin$ /usr/bin/sudo /usr/bin/journalctl -n5 -unostromo.service | /usr/bin/cat 
-- Logs begin at Mon 2020-03-02 12:00:21 EST, end at Mon 2020-03-02 12:11:05 EST. --
Mar 02 12:00:44 traverxec su[22169]: pam_unix(su:auth): authentication failure; logname= uid=33 euid=0 tty=pts/0 ruser=www-data rhost=  user=david
Mar 02 12:00:46 traverxec su[22169]: FAILED SU (to david) www-data on pts/0
Mar 02 12:07:26 traverxec nhttpd[23957]: /../../../../bin/sh sent a bad cgi header
Mar 02 12:07:38 traverxec nhttpd[24009]: /../../../../bin/sh sent a bad cgi header

当我尝试使用 sudo 运行任何其他命令时系统提示我输入密码

david@traverxec:~/bin$ /usr/bin/sudo /usr/bin/ls /etc/shadow
[sudo] password for david: 

为什么是这样?

答案1

正如 Kusalananda 已经提到的,您可以通过配置文件配置 sudo,您可以在其中存档您所描述的行为。

用户无需提供密码即可调用特定命令。这并不意味着您拥有完全sudo访问权限。您只有运行单个命令的权限。

示例配置:

david ALL=(ALL) NOPASSWD: /usr/bin/journalctl 

(更多在https://askubuntu.com/questions/147241/execute-sudo-without-password

  • 即使您有用户“david”的密码,这并不自动意味着您可以使用sudo.
  • 没有用于列出您通过 sudo 获得的权限的命令(无需访问/etc/sudoers)。它是通过 sudo 的工作原理来推理的。 Sudo 只是检查您调用命令时的配置 - 并且此过程需要超级用户权限。因此不可能有列出设置的非特权工具。

个人建议:尝试其他方法进行权限升级。如果配置正确,Sudo 是相当安全的。

答案2

sudo会记住您输入的密码,并且一段时间内不会再次提示(这取决于配置)。

/etc/sudoers文件具有sudo.您可以设置配置:

  • 哪些用户
  • 哪些命令
  • 是否需要密码。

可能是这样设置的,您可以在没有密码的情况下运行某些命令。

这一切都与set-uid 位无关。您似乎知道这一点赋予程序 root 权限(另请参阅功能:root 已死,功能万岁)。人们sudo可以做任何事情,它根据代码和配置文件决定做什么。

相关内容