В основном я пытаюсь перезапустить службу с веб-страницы 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