【问题标题】:shell_exec() doesn't change qdisc in linuxshell_exec() 不会改变 linux 中的 qdisc
【发布时间】:2016-04-23 06:49:19
【问题描述】:

对于我的项目,我正在创建 WEB 界面来控制 Linux 中的 QoS。我正在尝试使用 shell_exec() 函数 PHP 与终端通信。如果尝试像这样简单的事情,它会起作用:

shell_exec("ip link show");

但是如果尝试使用(在终端中工作)更改 qdisc:

shell_exec("sudo tc qdisc replace dev eth0 root pfifo");

什么都没有发生。如果我尝试回显 shell_exec(...); ,我也没有得到任何输出;

我正在运行 Ubuntu 14.04。我已经在 sudoers 文件中添加了行来执行没有密码的 shell 命令:

#includedir /etc/sudoers.d

%www-data ALL=NOPASSWD: /var/www/html

也许我对 sudoers 文件做错了什么,或者在运行 shell_esc 命令之前我还有什么需要做的吗?

【问题讨论】:

    标签: php linux shell-exec


    【解决方案1】:
    %www-data ALL=NOPASSWD: /var/www/html
    

    这条 sudoers 行只允许 www-data 执行文件 /var/www/html。 (这可能是一个目录,而不是可执行文件,所以它什么都不做。)

    如果您想允许 www-data 执行 tc,您需要在 sudoers 文件中指定,使用可执行文件的完整路径。

    【讨论】:

    • 已将其更改为%www-data ALL=NOPASSWD: /var/www/html/php/ajax.php,但仍然出现相同的错误。
    • @Ignotas 它应该类似于%www-data ALL=NOPASSWD: /usr/bin/tc,您将/usr/bin/tc 替换为tc 程序的实际路径。
    • 已答复。 Sudoers 行必须是 www-data ALL=NOPASSWD: /sbin/tc 和 shell-exec 行 - shell_exec("sudo tc qdisc replace dev eth0 root pfifo");
    【解决方案2】:

    这不是确切的答案,但请尝试这样。它对我有用。

    2>&1 产生错误消息。

    if(exec("sh  whatever your cammand 2>&1", $output, $return_var))
    {
        print_r($output);
        exit;
    }
    

    【讨论】:

    • 它返回:sudo: no tty present and no askpass program specified 如果我尝试不使用 sudo:RTNETLINK answers: Operation not permitted 所以我猜它仍然要求密码。
    • 这如何解决sudo权限的问题?
    • 它没有,但它帮助我看到了失败的 shell 命令的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多