Из PHP/Apache, exec() или system() программа от имени пользователя root: "sudo: невозможно открыть систему аудита: отказано в доступе"
Я потратил полдня, чтобы понять это, и я провел много исследований. Я также знаком со многими из существующих дискуссий по этой теме, например, такой: Как запустить PHP exec() от имени пользователя root?
К сожалению, ни одно из найденных мной предложений, похоже, не работает для меня.
Прежде всего, я пишу что-то в спецификации, поэтому я не могу избежать этого. Кроме того, все машины будут находиться в частной сети, которая не подключена к Интернету. Хотя важно иметь НЕКОТОРЫЕ средства безопасности, в большинстве случаев необходимо предотвращать ошибки. Моя цель - настроить несколько "тонких серверов". С помощью сценария PHP мне необходимо изменить конфигурацию сети (статическую или DHCP) и перезапустить сеть.
Первым делом я попытался написать программу на C, которая называется SUID root. Он читает, изменяет и записывает файл конфигурации сети. Если я запускаю его как обычный пользователь, он отлично работает и может получить доступ и изменить файл, принадлежащий пользователю root. Но если я запускаю его из скрипта PHP, я получаю ошибки доступа. Похоже, что Apache как-то мешает SUID-руту.
Основываясь на предложениях других обсуждений, я попробовал метод "sudo". Временно я добавил это в /etc/sudoers: apache ALL=(ALL) NOPASSWD: ALL
Я получаю сообщение об ошибке: sudo: невозможно открыть систему аудита: отказано в разрешении
Согласно этой странице на русском языке, это происходит потому, что такие системы, как RHEL (я использую Fedora), по умолчанию требуют requiretty для sudoers. Поэтому я добавил эту строку в / etc / sudoers: по умолчанию! Requiretty
Я все еще получаю ту же ошибку. sudo: невозможно открыть систему аудита: в доступе отказано
Я полностью застрял здесь. То есть, если я не хочу запускать сам Apache от имени root, то это будет более неудобно, чем что-либо еще.
Кто-нибудь может сделать какие-либо предложения здесь? Я понимаю, что я пытаюсь сделать это странно. Бьюсь об заклад, некоторые из вас укажут мне на какую-то существующую систему для удаленной настройки машин Fedora (и теперь, когда я об этом подумаю, я собираюсь разобраться в этом прямо сейчас).
Кстати, я использую SELinux, потому что именно так настроена Fedora 15 по умолчанию.
Благодарю.
РЕДАКТИРОВАТЬ:
Я нашел этот урок:
http://www.cyberciti.biz/faq/howto-disable-httpd-selinux-security-protection/
К сожалению, когда я запускаю "setsebool httpd_disable_trans 1", я получаю ошибку:
Не удалось изменить активные логические значения: недопустимое логическое значение
Я также попытался напрямую отредактировать "/etc/selinux/target /booleans", которого не было, и перезапустить apache, но он тоже не сработал.
1 ответ
Ты пробовал setenforce 0
(временно отключить SELinux), audit2allow
или полностью отключить SELinux? Смотрите: PHP-страница не запускает команду unix даже после обновления sudoers
Это сработало для меня после нескольких часов поиска. Удачи!:)
semanage fcontext -a -t httpd_sys_script_exec_t '/whatever/scripts(/.*)?'
restorecon -R -v / что угодно / скрипты /