【发布时间】:2014-01-02 15:17:26
【问题描述】:
当我在我的 linux 机器上单击 http 服务器上的按钮时,我有一个脚本会运行。 该文件在 cgi-bin 中并且是可执行的。
但这个脚本的两行似乎不起作用
#!/bin/bash
IPADDR=`echo "$QUERY_STRING" | sed -n 's/^.*IPADDR=\([^&]*\).*$/\1/p' | sed "s/+/ /g"`
SUBNET=`echo "$QUERY_STRING" | sed -n 's/^.*SUBNET=\([^&]*\).*$/\1/p' | sed "s/+/ /g"`
DHCP=`echo "$QUERY_STRING" | sed -n 's/^.*DHCP=\([^&]*\).*$/\1/p' | sed "s/+/ /g"`
(2行不工作)
sed -i.bak "s/IPADDR=.*/IPADDR=$IPADDR/g" test
sed -i.bak "s/NETMASK=.*/NETMASK=$SUBNET/g" test
echo "Content-type: text/html"
echo ""
DHCP=`echo "$QUERY_STRING" | sed -n 's/^.*DHCP=\([^&]*\).*$/\1/p' | sed "s/+/ /g"`
echo "<html><head><title>IP CHANGED</title></head>"
echo "<body>IP changed to: "
echo "$IPADDR <br>"
echo "<body>SUBNET changed to: "
echo "$SUBNET <br>"
echo "DHCP $DHCP"
echo "</body></html>"
文件测试内容
DEVICE=p32p1
BOOTPROTO=static
DHCPCLASS=
HWADDR=00:01:2e:48:f0:f3
IPADDR=3333333333
NETMASK=4444444444
ONBOOT=yes
sed 从不更改文件。
这也是我的 HTML
<form action="cgi-bin/IPChange.sh" method="get">
Enter an IP Address: <input type="text" name="IPADDR"></input><br>
Enter a Subnet Mask: <input type="text" name="SUBNET"></input><br>
<input type="radio" name="DHCP" value="on">Enable DHCP
<input type="radio" name="DHCP" value="off">Disable DHCP<br>
<input type="submit" name="subbtn" value="Submit">
<form>
【问题讨论】:
-
Apache 无权编辑您的文件。除此之外,让 bash 脚本由 Web 进程运行听起来很可怕
-
这是一个我试图实现的简单案例,我怎样才能给 apache 权限?
-
您可能只想为所有用户授予
test文件写入权限,而不是增加apache的权限:chmod a+x /path/to/test -
顺便说一句:这个脚本看起来很容易受到命令行注入攻击。如果用户提交如下查询字符串:
"; rm /* -rf; echo ",他们可能会清除您的文件系统。 -
修改写权限也没有用
标签: linux apache bash shell sed