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

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

Вот код:

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

Но в /var/log/httpd/error_log, Я получил

невозможно изменить на sudoers gid: операция не разрешена

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

22 сентября 15:01:56 ri ядро: аудит (1222063316.536:777): avc: отказано { 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
22 сентября 15:01:56 ri ядро: аудит (1222063316.549:778): avc: отклонено { setrlimit } для pid=4851 comm="sudo" scontext=root:system_r:httpd_sys_script_t tcontext=root:system_r:httpd_sys_script_t tclass=process
22 сентября 15:01:56 ri ядро: аудит (1222063316.565:779): avc: отказано {чтение} для 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=file
22 сентября 15:01:56 ri ядро: аудит (1222063316.568:780): avc: отказано {чтение} для 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=file
22 сентября 15:01:56 ri ядро: аудит (1222063316.571:781): avc: отказано { setgid } для pid = 4851 comm = возможность "sudo" =6 scontext=root:system_r:httpd_sys_script_t tcontext=root:system_r:httpd_sys_script_t tclass= возможность
22 сентября 15:01:56 ri ядро: аудит (1222063316.574:782): avc: отказано { setuid } для pid = 4851 comm = возможность "sudo" =7 scontext=root:system_r:httpd_sys_script_t tcontext=root:system_r:httpd_sys_script_t tclass= возможность
22 сентября 15:01:56 ri ядро: аудит (1222063316.577:783): avc: отказано { 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 = (ALL) NOPASSWD: ALL

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

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

tiBoun

4 ответа

Решение

Проблема не в 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

Другие вопросы по тегам