似乎sudo
在同一个终端中运行的任何程序都可以运行sudo
它需要的任何命令。
证明:sudo ls
在终端中执行。然后在同一终端中运行此程序(当然是编译过的):
#include <stdlib.h>
int main() {
system("sudo whoami");
return 0;
}
它会说root
无需输入密码。
这难道不是一个很大的安全漏洞吗?Root 帐户和普通帐户是分开的,因此,除了其他问题之外,恶意软件无法以 root 身份运行。用户是否应该在sudo
超时之前小心执行的操作?
答案1
sudo
默认情况下,设置会在 15 分钟后重新提示输入密码,但你可以将其更改为每次使用 调用时都要求输入密码sudo
。确切的选项是timestamp_timeout
时间戳超时
Number of minutes that can elapse before sudo will ask for a passwd again. The timeout may include a frac‐ tional component if minute granularity is insufficient, for example 2.5. The default is 15. Set this to 0 to always prompt for a password. If set to a value less than 0 the user's time stamp will never expire. This can be used to allow users to create or delete their own time stamps via “sudo -v” and “sudo -k” respec‐ tively.
下面是我的 sudoers 文件的相关部分以及两次尝试sudo
,如您所见,它重新提示:
$ sudo cat /etc/sudoers
[sudo] password for xieerqi:
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults timestamp_timeout=0
Defaults passwd_timeout=0
(the rest cut out)
================
xieerqi:
$ sudo echo hello
[sudo] password for xieerqi:
另外一种选择是,您也可以使用pkexec
,据我所知,它总是要求输入密码
答案2
sudo
默认情况下,标准 Ubuntu 安装会sudo
在短时间内保留访问缓存(默认超时时间为 15 分钟)。
为了使假设情况奏效,您需要提前运行sudo
,然后sudo
在该功能的缓存超时之前运行您指定的代码。在大多数情况下,这并不像您想象的那么“不安全”——许多强化服务器的超时时间要短得多,或者在我的服务器上,我实际上将其配置为sudo
执行后立即超时,要求输入每个命令的密码sudo
。
为此,它sudo
是“安全的”,因为有超时时间,以确保sudo
一次使用后不能无限期地永久使用。
虽然有时看起来是这样,但这种方式并不“不安全”——当然,禁用凭证缓存可以解决这个问题,而且对于系统管理员来说,这很容易做到。
在默认安装中,默认的 15 分钟缓存似乎是“安全性”和“便利性”之间的平衡,因为我们不希望新用户每次都输入密码而头疼。话虽如此,在安全性很重要的地方,我们可以sudo
通过更改配置来锁定。
总结:不,sudo
一点也不不安全。这是默认缓存,假设在sudo
访问缓存时被调用,这引发了你的想法,但当sudo
配置了短超时或即时超时时,实际上并不不安全,这取决于系统管理员对这些系统是否更改默认设置的决定。
答案3
这难道不是一个很大的安全漏洞吗?
不。但是,确实为了方便而降低了安全性。你可以用 128 位密码保护系统,然后扔掉它,这样就没有人能访问系统了……安全吗?是的。方便吗?几乎不方便 ;-)
- 让处于活动状态的系统处于无人看管的
sudo
状态。 - 有一个解决方案:
sudo -k
取消当前超时。每次我离开系统时我都会执行此操作,我相信 15 分钟是有效的。
用户是否应该小心在 sudo 超时之前执行的操作?
是也不是。管理员每次使用“sudo”时都应该小心谨慎。不仅仅是在 15 分钟的时间范围内。所以你问题的第二部分并不重要 ;)
您是管理员。您有责任保证系统安全。