CENTOS apache ALL=(root) NOPASSWD: /path/to/shell.sh не работает

CENTOS apache ALL=(root) NOPASSWD: /path/to/shell.sh не работает

Пытаюсь реализовать веб-интерфейс управления IPtables.

Создал файлтест.php

$output = shell_exec('sudo bash /usr/bin/iptables.sh 2>&1');
echo $output;

Дал /usr/bin/iptables.sh NOPASSWD, чтобы я мог выполнить файл с помощью sudo через apache без использования пароля

sudo iptables -L

Файл sudoers:

apache ALL=(root) NOPASSWD: /usr/bin/iptables.sh

Но я все еще получаю сообщение об ошибке

Мы надеемся, что вы получили обычную лекцию от местного системного администратора. Обычно она сводится к следующим трем вещам: #1) Уважайте конфиденциальность других. #2) Думайте, прежде чем печатать. #3) С большой силой приходит большая ответственность. sudo: для чтения пароля требуется терминал; либо используйте опцию -S для чтения из стандартного ввода, либо настройте askpass helper{"mode":"full","isActive":false}

Однако, если я использую

apache ALL=(root) NOPASSWD: ALL

Все работает отлично.

Я дважды проверил свой каталог и указал точный путь.

[root@CentOS bin]# readlink -f iptables.sh
/usr/bin/iptables.sh

Полный ноль знаний, может кто-нибудь подсказать мне направление? :'(

решение1

Вызываемая вами команда sudoдолжна соответствовать той, что находится в sudoersфайле, но в вашем случае они не совпадают.

Вы пытались бежать bash /usr/bin/iptables.sh, но sudoersвам позволяют только бежать /usr/bin/iptables.sh.

решение2

Попробуйте с помощью sudo, так как /usr/bin/iptables.shссылки на root-пользователя root.

$output = shell_exec("sudo -u root sh -c 'bash /usr/bin/iptables.sh 2>&1'");
echo $output;

Связанный контент