【问题标题】:CENTOS apache ALL=(root) NOPASSWD: /path/to/shell.sh is not workingCENTOS apache ALL=(root) NOPASSWD: /path/to/shell.sh 不工作
【发布时间】:2021-10-01 19:06:34
【问题描述】:

我正在尝试通过 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

这里超级无能,谁能帮我指路? :'(

【问题讨论】:

  • sudo 配置问题应该去 linux 管理支持站点。 SO 用于编程问题。
  • 我看不到您的代码实际调用sudo 的位置。你的shell_exec 命令调用的是bash,而不是/usr/bin/iptables.sh,所以即使有一个明确的sudo,它也不会匹配配置的路径。
  • 通常,/etc/sudoers 配置有 requiretty 标志集(默认标志集在文件的前面,高于您引用的内容)。作为守护进程的子进程运行的程序通常没有控制 TTY。但是 sudoers 配置在这里是题外话,应该在 Unix & Linux 询问。
  • 顺便说一句,请注意 shell_exec() 如果您将其参数化以让远程用户配置任何内容,则很危险。一般来说,使用机制来启动一个外部可执行文件要安全得多,它允许您将显式参数向量指定为一个数组,而不是一个字符串,然后 shell 开始拆分为一个数组(并可能做其他扩展/munging/等)。
  • 感谢您的帮助!已经解决了

标签: bash apache shell centos sudoers


【解决方案1】:

这个问题已经解决了。

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

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');

【讨论】:

    猜你喜欢
    • 2020-01-12
    • 2012-01-18
    • 2022-10-12
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 2014-11-22
    • 2014-04-17
    • 1970-01-01
    相关资源
    最近更新 更多