为什么不将OpenBSD中的SUID位设置为有效并将UID保存到可执行文件所有者?

时间:2013-09-16 16:19:05

标签: permissions user-permissions setuid openbsd suid

我正在使用全新安装的OpenBSD 5.3作为Parallels for Mac上的来宾操作系统:

$ uname -a
OpenBSD openbsd.localdomain 5.3 GENERIC#53 amd64

令我惊讶的是,root拥有的二进制文件及其SUID位设置使用UID运行,就像未设置SUID一样。也就是说,当UID 1000运行这样的程序时,程序以状态:

开始
 <real_uid, effective_uid, saved_uid> = <1000, 1000, 1000>
州内的

不是

 <real_uid, effective_uid, saved_uid> = <1000, 0, 0>

正如所料。

为什么会这样?

以下是有关我如何找到问题的详细信息:

我编写了一个交互式C程序(编译为 setuid_min.bin ),用于评估不同Unix系统中的setuid行为。该程序位于UID 1000主目录的子目录中, sudo 命令用于更改所有权和SUID;然后程序运行,我输入 uid 来报告该过程的真实,有效和保存的UID:

$ sudo chown root:staff setuid_min.bin
$ ls -l | grep 'setuid_min\.bin$'
-rwxr-xr-x  1 root   staff [...] setuid_min.bin
$ sudo chmod a+s setuid_min.bin
$ ls -l | grep 'setuid_min\.bin$'
-rwsr-sr-x  1 root   staff [...] setuid_min.bin
$ ./setuid_min.bin
uid
 1000 1000 1000 some_pid
exit
$

请注意,上面的 some_pid setuid_min.bin 进程的pid。该程序通过报告以下shell命令的输出来报告真实的UID,有效的UID和保存的UID:

ps -ao ruid,uid,svuid,pid | grep '[ ]my_pid$'

其中 my_pid 是由 getpid()报告的pid。关于为什么会出现这种情况的唯一猜测是OpenBSD有一些底层权限结构,它使用 setuid_min.bin 所在目录的所有权/权限,或者实际上并没有改变所有权/当非特权用户使用 sudo 更改文件权限时,SUID位。

1 个答案:

答案 0 :(得分:0)

很可能您的二进制文件位于“nosuid”挂载的默认分区之一。安装脚本创建的默认fstab将挂载所有nosuid,除非它已知包含suid二进制文件。