%20NOPASSWD%3A%20%2Fpath%2Fto%2Fshell.sh%20%D0%BD%D0%B5%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82.png)
Пытаюсь реализовать веб-интерфейс управления 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;