【问题标题】:Executing a bash script via php通过 php 执行 bash 脚本
【发布时间】:2016-11-02 09:04:15
【问题描述】:

大家好,我正在尝试实现一个 Web 界面来操作我的无线网络。

其中一项操作是将我的卡配置为监控模式。很简单,如果你运行这个命令:

bash prepareCard.sh wlan0

脚本prepareCard.sh如下:

#! /bin/bash
IFACE=$1
ifconfig $IFACE down
iwconfig $IFACE mode monitor
ifconfig $IFACE up

现在我想通过一个 php 脚本来执行这个脚本:

$cmd = shell_exec("bash prepareCard.sh wlan0");

当我检查卡是否已设置为监控模式时,什么都没有!它仍然处于管理模式! 你能告诉我我哪里出错了吗?

【问题讨论】:

  • 我不确定。请检查您的 php fileprepareCard.sh 是否在同一文件夹路径中。并尝试使用 $cmd = shell_exec("./prepareCard.sh wlan0"); 执行 shell
  • 检查运行 php 脚本的用户是否有权限运行这些命令,我​​猜这些需要以 root 权限运行。
  • @prasad 我也检查过了,两个文件都在同一个目录中,我正在运行 KALI linux,它使用 root 用户作为默认用户
  • 你检查prepareCard.sh文件chmod +x prepareCard.sh的文件权限吗
  • 您是在命令行还是通过 Web 服务器执行 php 脚本? Web 服务器以特殊用户(通常是www-data:www-data)的身份执行脚本,默认情况下通常没有最高权限。

标签: php linux bash shell


【解决方案1】:

假设运行脚本的webserver用户没有足够的权限,可以试试这个方法修复:

使用命令visudo编辑/etc/sudoers并添加这一行:

ALL    ALL=(root) NOPASSWD: /absolute/path/prepareCard.sh

确保为脚本设置权限700,这样其他人就无法编辑它。然后像这样使用sudo 执行你的脚本:

$cmd = shell_exec("sudo /absolute/path/prepareCard.sh wlan0");

这应该以root身份执行脚本,无需输入密码。

【讨论】:

  • 你是一个救生员!!非常感谢!!
【解决方案2】:

调试 BASH 脚本的一个好方法是将调试模式设置为打开(通过在您的 shell_exec 调用、运行 set -x 或在 shebang 行 #!/bin/bash -x 中将 -x 标志传递给 bash)。这向您展示了在执行 bash 脚本期间发生了什么。在你的情况下,我建议第一种情况,因为你不知道脚本是否一开始就被加载了。

$cmd = shell_exec("bash -x prepareCard.sh wlan0");

之后,您的 $cmd 变量中应该有更多内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-29
    • 2022-06-30
    • 2020-08-18
    • 2017-03-21
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    相关资源
    最近更新 更多