首页 > 解决方案 > CENTOS apache ALL=(root) NOPASSWD: /path/to/shell.sh 不工作

问题描述

我正在尝试通过 IPtables 管理来做一个 Web 界面。

我创建了一个文件,其名称是test.php

$output = shell_exec('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

这里超级无能,有人可以帮我指路吗?:'(

标签: bashapacheshellcentossudoers

解决方案


这已经解决了。

如果有人有同样的问题,答案就在这里

https://serverfault.com/questions/1070602/centos-apache-all-root-nopasswd-path-to-shell-sh-is-not-working/

bash 是多余的

只需删除 bash 并像这样运行

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

推荐阅读