问题描述
对于我正在开发的程序,没有理由为什么应该使用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 (将#修改为@)