最近更新到 CentOS 6.4 后,两台机器都有 setuid() 限制,它们的作用类似于功能或 selinux,但是两者都被禁用。例如以下失败:
[root@host statd]# perl -e 'use POSIX; POSIX::setuid(99);system("id")'
[root@host statd]# echo $?
0
Run Code Online (Sandbox Code Playgroud)
什么时候应该返回类似的东西:
host:~# perl -e 'use POSIX; POSIX::setuid(99);system("id")'
uid=99(nobody) gid=0(root) groups=99(nobody),0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
Run Code Online (Sandbox Code Playgroud)
跟踪 perl 的调用,setuid() 调用成功,但是 system() 子项立即退出,就像它被 selinux 或类似的终止一样。但是,即使在 semodule -DB 之后,/var/log/audit/audit.log 中也没有日志条目。
setuid32(99) = 0
getuid32() = 99
geteuid32() = 99
pipe([3, 4]) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb7705728) = 10073
close(4) = 0
rt_sigaction(SIGINT, {SIG_IGN, [], 0}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGQUIT, {SIG_IGN, [], 0}, {SIG_DFL, [], 0}, …Run Code Online (Sandbox Code Playgroud)