CENTOS apache ALL=(root) NOPASSWD: /path/to/shell.sh 不起作用

CENTOS apache ALL=(root) NOPASSWD: /path/to/shell.sh 不起作用

尝试做一个web界面的IPtables管理。

创建了一个文件测试.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

我超级无知,有人能帮我指明方向吗?:'(

答案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;

相关内容