试图做一个web界面IPtables管理。
创建了一个文件test.php
$output = shell_exec('sudo bash /usr/bin/iptables.sh 2>&1');
echo $output;
给 /usr/bin/iptables.sh NOPASSWD 这样我就可以通过 apache 使用 sudo 执行文件,而无需使用密码
sudo iptables -L
sudoers 文件:
apache ALL=(root) NOPASSWD: /usr/bin/iptables.sh
但我仍然收到错误
我们相信您已经收到了本地系统管理员的常规讲座。它通常归结为以下三件事:#1) 尊重他人的隐私。#2) 打字前三思。#3) 权力越大,责任越大。sudo:需要终端才能读取密码;使用 -S 选项从标准输入读取或配置 askpass 助手{"mode":"full","isActive":false}
但是,如果我使用
apache ALL=(root) NOPASSWD: ALL
一切正常。
我仔细检查了我的目录并使用了确切的路径
[root@CentOS bin]# readlink -f iptables.sh
/usr/bin/iptables.sh
这里超级无能,有人可以帮我指路吗?:'(
您调用的命令
sudo
必须与sudoers
文件中的内容匹配,但在您的情况下它们不匹配。你试图跑
bash /usr/bin/iptables.sh
,但sudoers
只允许你跑/usr/bin/iptables.sh
。尝试使用 sudo,因为
/usr/bin/iptables.sh
对 root 的引用。