如何解决两次调用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 举报,一经查实,本站将立刻删除。