两次调用setuid来清除保存的set-user ID是明智的策略吗?

问题描述

对于我正在开发的程序,没有理由为什么应该使用setuid位设置来运行它-始终代表用户方面的配置错误。作为深入防御的一部分,我想在程序中检测并修复它。

据我了解,要真正做到这一点,我必须打两次电话setuid

uid_t real_uid = getuid();
int ret = setuid(real_uid);
/* error checking here */
ret = setuid(real_uid);
/* error checking here */

据我了解,如果我只调用一次setuid,那么旧的有效UID将在保存的set-user-ID中,因此对setuid的任何注入调用(假定存在一个漏洞,某种程度上可以实现)可用于将有效UID设置回其原始值。对setuid的第二次调用将新值放入保存的set-user-ID中,以解决此问题。这是实现这一目标的合理方法吗?

或者,至少在Linux上(实际上总是在此运行),我可以使用setresuid一次性完成所有操作:

uid_t real_uid = getuid();
int ret = setresuid(-1,real_uid,real_uid);
/* error checking here */

(更多)合理吗?

所有这些是否也适用于GID?我是否需要担心补充组列表(我真的不知道这是什么)吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...