Веб-страница 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