美好的一天,我正在尝试实施一个可以操作我的无线网络的网络界面。
其中一项操作是将我的卡配置为监控模式。很简单,如果你运行这个命令:
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");
当我检查卡是否已设置为监控模式时,没有!它还处于管理模式!! 你能告诉我哪里出错了吗?
答案 0 :(得分:0)
调试BASH脚本的一个好方法是启用调试模式(通过在-x
调用中将shell_exec
标记传递给bash,运行set -x
,或者在shebang中第#!/bin/bash -x
行。这将向您展示执行bash脚本期间发生的事情。在你的情况下,我建议第一种情况,因为你不知道脚本是否首先被加载。
$cmd = shell_exec("bash -x prepareCard.sh wlan0");
之后,你的$ cmd变量应该有更多。
答案 1 :(得分:0)
假设运行脚本的webserver用户没有足够的权限,您可以尝试这种方式来修复它:
使用命令visudo
修改/etc/sudoers
并添加以下行:
ALL ALL=(root) NOPASSWD: /absolute/path/prepareCard.sh
确保为脚本设置权限700
,因此其他任何人都无法对其进行编辑。然后使用sudo
执行您的脚本,如下所示:
$cmd = shell_exec("sudo /absolute/path/prepareCard.sh wlan0");
这应该以root身份执行脚本,而无需输入密码。