For示例
这样做是否更安全:
$ sudo [cmd] [args]或
我总是假设它们是完全相同的,因为sudo使用setuid- root,所以作为sudo的第一个arg运行的进程是使用sudo的有效ID (即根)运行的。
my的问题是: sudo最终是否会将其有效ID降到普通用户的?那么,在这种情况下,上面的第1号将是一个更安全的赌注,因为如果sudo运行的程序/服务被攻击者破坏了,那么攻击者就有可能不会以root身份运行,因为特权已经被删除了(有点像竞争条件)?但是与数字2相比,任何程序在以root的形式运行时都是有害的。
发布于 2021-10-03 22:53:21
Sudo是它自己的程序(正如您注意到的,它是setuid ),它启动另一个程序。启动程序继承了sudo在启动程序时所具有的UID、GID等,但在此之后,它们是具有自己的PID和自己的UID/GID的独立进程,对一个进程的ID的更改将不会对另一个进程产生影响。
sudo [cmd] [args]启动一个程序(例如/bin/sudo),该程序作为根用户运行,并读取sudoers文件(/etc/sudoers),以确定当前用户(调用sudo的用户,“真实的”UID)授权做什么。在典型的用户情况下,只有当用户进行身份验证(使用自己的密码或其他密码)时,才能授权用户执行命令;然后,sudo将提示并验证凭据。一旦授权用户通过身份验证,sudo将fork (或类似的调用)创建子进程(具有新的PID,但具有包括UID和PID在内的相同权限),子进程将通过execve系统调用使用指定的参数启动指定的程序(或脚本),该调用将用指定的进程替换当前进程,但维护其PID。
无论新命令--或者产生它的sudo命令运行多长时间--它都不会改变它的访问权限或ID,因为sudo所做的任何事情都是如此。如果它被编程来编辑in,它可能会自己编辑,但sudo不是(新命令启动后就不会了;在启动新进程之前,它可能能够响应sudoers文件中的参数或其他内容)。
发布于 2020-04-11 09:26:19
据我所知,使用sudo启动服务将以根权限运行该服务。这些服务将不会在服务的生命周期内放弃。
但是,如果使用su root,则切换到根用户,您发出的每个命令都将作为根用户执行。您应该注意到这一点,而不是启动不需要根权限的其他服务。从这个意义上说,使用sudo可能更安全。但这更多的是用户/管理员的风险。
发布于 2021-01-06 13:28:52
您可能想看看‘djb方式’。您可以使用此方法以根用户身份启动流程(例如,将服务绑定到低编号端口),然后它将在进程启动后立即将进程的控制权交给指定的用户(例如,低权限用户)。
有关更多信息,请参见:http://thedjbway.b0llix.net/daemontools/uidgid.html
https://security.stackexchange.com/questions/229640
复制相似问题