Веб-страница PHP не запускает команду unix даже после обновления sudoers

В основном я пытаюсь перезапустить службу с веб-страницы php.

Вот код:

<?php exec ('/usr/bin/sudo /etc/init.d/portmap restart'); ?> 

Но, в /var/log/httpd/error_log , я получаю

не удалось изменить в sudoers gid: операция не разрешена

и в / var / log / messages, я получаю

Sep 22 15:01:56 ri kernel: audit (1222063316.536: 777): avc: denied {getattr} для pid = 4851 comm = "sh" name = "var" dev = dm-0 ino = 114241 scontext = root: system_r : httpd_sys_script_t tcontext = system_u: object_r: var_t tclass = dir
Sep 22 15:01:56 ri kernel: audit (1222063316.549: 778): avc: denied {setrlimit} для pid = 4851 comm = "sudo" scontext = root: system_r: httpd_sys_script_t tcontext = root: system_r: httpd_sys_script_t tclass = процесс
Sep 22 15:01:56 ri kernel: audit (1222063316.565: 779): avc: denied {read} для pid = 4851 comm = "sudo" name = "shadow" dev = dm-0 ino = 379669 scontext = root: system_r : httpd_sys_script_t tcontext = system_u: object_r: shadow_t tclass = файл
Sep 22 15:01:56 ri kernel: audit (1222063316.568: 780): avc: denied {read} для pid = 4851 comm = "sudo" name = "shadow" dev = dm-0 ino = 379669 scontext = root: system_r : httpd_sys_script_t tcontext = system_u: object_r: shadow_t tclass = файл
Sep 22 15:01:56 ri kernel: audit (1222063316.571: 781): avc: denied {setgid} для pid = 4851 comm = "sudo" возможность = 6 scontext = root: system_r: httpd_sys_script_t tcontext = root: system_r: httpd_sys_script_t tclass = возможность
Sep 22 15:01:56 ri kernel: audit (1222063316.574: 782): avc: denied {setuid} для pid = 4851 comm = "sudo" возможность = 7 scontext = root: system_r: httpd_sys_script_t tcontext = root: system_r: httpd_sys_script_t tclass = возможность
Sep 22 15:01:56 ri kernel: audit (1222063316.577: 783): avc: denied {setgid} для pid = 4851 comm = "sudo" возможность = 6 scontext = root: system_r: httpd_sys_script_t tcontext = root: system_r: httpd_sys_script_t tclass = возможность

В моем visudo я добавил эти строки

User_Alias ​​WWW = apache

WWW ALL = (ВСЕ) NOPASSWD: ALL

Не могли бы вы мне помочь ? Я делаю что-то неправильно ?

Спасибо за вашу помощь,

tiBoun

Проблема заключается не в sudo на данный момент, а в SELinux , который (разумно) настроен на отказ HTTPD от получения привилегий root.
Вам нужно либо явно разрешить это (для этого вы можете использовать audit2allow ), либо вместо этого установите SELinux. Я бы предложил первый.

Ошибка, которую вы получаете, похоже, связана с вашей конфигурацией SELinux. Вы можете попробовать временно отключить это.

В стороне, я настоятельно рекомендую вам настроить свою конфигурацию sudo на более ограничительную.

 User_Alias WWW=apache Cmnd_Alias WEBCMDS=/etc/init.d/portmap WWW ALL=NOPASSWD: WEBCMDS 

Я столкнулся с проблемой в последнее время, и принятый ответ выше помог. Тем не менее, я хотел бы опубликовать этот ответ, чтобы разработать то же самое, так что следующий человек не должен тратить много времени, как я!

Следуйте разделу 7 следующей ссылки: https://wiki.centos.org/HowTos/SELinux .

Сделайте grep с httpd_sys_script_t .

В основном этапы:

 # grep httpd_sys_script_t /var/log/audit/audit.log | audit2allow -M httpdallowsudo # semodule -i httpdallowsudo.pp 

Вероятно, это похоже на попытку выполнить sudo в неинтерактивной оболочке.

Если вы используете grep для 'sudo' в вашем почтовом журнале пользователей apache, вы можете найти такие вещи

sudo: извините, вы должны иметь tty для запуска sudo