我正在使用全新安装的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位。
答案 0 :(得分:0)
很可能您的二进制文件位于“nosuid”挂载的默认分区之一。安装脚本创建的默认fstab将挂载所有nosuid,除非它已知包含suid二进制文件。