是否适合在 setresuid()/setreuid()/seteuid() 上使用 setuid()?

拉法加奇

我有一个从 C 源文件编译的可执行二进制文件

可执行文件具有 setuid 权限

我注意到,如果可执行文件的所有者是root,我可以使用

setuid(geteuid());

在编译文件以将运行可执行文件的进程的真实 UID设置为root时。然后,运行可执行文件的任何人都可以以root身份运行它。

但是,我注意到只有当可执行文件的所有者是root时才会发生这种情况。当我尝试授予test_user可执行文件的所有权(并修复权限以再次包含 setuid)时,它不起作用。在阅读了这些文档页面(123)并阅读了这篇文章后,我注意到这setuid(new_euid)是为了更改有效 UID而不是运行可执行文件的进程的真实 UID只是碰巧,在特定情况下(有效的 UID是 root),setuid(new_euid)还设置了真实的 UID保存的 UID运行可执行文件的进程到new_euid.

我通过使用setreuid代替解决了这个问题setuid,如下:

setreuid(geteuid(), geteuid());

这允许我将进程的真实 UID设置为有效 UID(可执行文件的所有者)并将有效 UID重置为其值(冗余)。

我知道这setuid()在某些条件下会起作用,但同样适用于使用setreuid(),setresuid()seteuid()更改真实 UID保存的 UID或需要有效的 UID时,因为它们总是有效的?

此外:我知道这seteuid()似乎与此处setuid()解释的差异相同有效的 UID是 root)。这应该不允许 root 特权程序在删除它们后重新获得特权(因为所有 3 个 UID 都将使用 更改为相同的值)?那么我是否应该只使用root 特权程序,即使它与例如相比不那么清楚?setuid()setuid()setresuid()

我认为这setuid()可能是安全的,因为它不允许 root 特权程序在删除后重新获得特权,但是可以使用其他提到的功能来实现这种行为,而不会造成太大的混乱。

另一件事getuid()返回进程的真实 UID,同时setuid()用于修改有效 UID(除非特权),这也令人困惑。

伊尔卡丘

这一切背后可能有一些骇人听闻的历史。正如您所说,setreuid()更清晰,并且由于它在标准中指定,我会使用它。然后虔诚地检查返回值,然后进行getuid()验证geteuid()

setresuid()不在 POSIX 中,所以它可能没有那么广泛可用(不过,FreeBSD 和 OpenBSD 似乎有它)。如果实现setreuid()与文档匹配,则不需要显式设置保存的 UID,因为setreuid()应该为您设置它:

如果设置的是真实用户ID(ruid不是-1),或者设置的有效用户ID不等于真实用户ID,则设置当前进程保存的set-user-ID等于新的有效用户 ID。

再说一次,如果可能的话,完全避免使用 setuid 程序来支持例如单独运行的特权进程并通过套接字与其通信可能是一个好主意。有很多东西从一个进程继承给它的子进程,并且使用 setuid,特权较低的人可以将它们设置为特权较高的人。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

mysql / mongodb集群是否适合在kubernetes上安装?

是否适合在c中使用usleep作为Timer

CouchDb 是否适合在客户端桌面(Windows 10)上使用?

Vue 3 是否适合在静态对象上使用反应式

正确使用setuid位

这种继承模式是否适合在其上构建 python 包?

责任链设计模式是否适合在硬件组件上运行的Python解决方案

Task.Run或TaskFactory.StartNew是否始终不适合在异步方法中使用?

我是否适合在构建系统中使用 shell 脚本而不是 AX_CHECK_COMPILE_FLAG?

使用setuid更改root的密码

Go [lang]二进制文件上的SetGID / SetUID是否安全?

哪种方法最适合在JavaScript中创建对象?对象属性之前是否必须使用“ var”?

Windows是否有等效于Setuid的Windows?

在SUID程序中使用setuid()的目的

使用find -perm查找setuid文件

为什么使用 capset 后 setuid 失败?

哪个文件系统更适合在外部HDD上使用?ExFAT或NTFS?

哪种迭代构造更适合在Scala中使用?

Python脚本上的Setuid位:Linux vs Solaris

哪种事件处理程序最适合在VB.net上的Click上使用Data Grid View触发?

使用 git 为文件设置位“setuid”并在存储库上存储更改

在 updateb 上使用 root 权限设置 setuid 有什么危险吗?

SetUID在Ubuntu 16.04上无法与Samba一起正常使用

是否可以仅将setuid应用于特定用户?

使用SETUID时,/ proc / PID / status中的eUID错误

setuid为什么不能与mount一起使用?

哪些编解码器最适合在Windows XP上使用Windows Media Player播放?

哪种Java版本最适合在Raspberry Pi 3上运行Java应用程序

什么程序最适合在Ubuntu 18.04上加密文件夹和文件