[英]Why many servers change its uid and gid,what's the benefit?
我在很多开源项目中看到了这样的逻辑:
if (setuid() == 0) {
if (setgid(ccf->group) == -1) {
...
if (initgroups(ccf->username, ccf->group) == -1) {
我对此有两个问题:
initgroups
有什么用? IMO,要更改 gid 和 uid, setuid()
和setgid()
就足够了。 大多数时候,系统守护进程是由 init 脚本生成的,因此以root
身份运行。 调用setuid()
和setgid()
允许他们放弃他们的超级用户权限并在系统上模拟另一个用户(通常远不如root
强大)。 这样,错误和安全漏洞对系统的致命性就会降低。
关于问题的第二部分,调用initgroups()来重新初始化组访问列表并将ccf->group
添加到ccf->username
所属的组列表中。 这可能是因为调用setgid()
不足以将与新组关联的访问权限传播到进程。
通常,您需要管理权限才能侦听 1023 及以下端口。 (以管理员身份开始还有其他原因,但这是最重要的。)但事情是这样的:您可以以管理员身份开始,绑定套接字,然后下拉成为用户。
现在,你为什么想成为用户? 好吧,如果您以尽可能少的权限运行,并且您的程序受到损害,那么损害将得到控制。
在某些操作系统上setgid()
为补充组敬酒。 因此在setgid()
)之前调用initgroups()
) 是无效的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.