【问题标题】:CGI script not executing bash commands such as 'CP'CGI 脚本不执行 bash 命令,例如“CP”
【发布时间】:2015-12-25 08:05:31
【问题描述】:

我设置了一个 Web 服务器 (apache2) 来执行具有 .cgi 文件扩展名的文件。这适用于某些命令。但是,我需要将文件 /var/www/on.html 复制到 /var/www/a1.html 的位置。

我正在使用 Debian Linux。脚本如下:

#!/bin/bash
echo "Content-type: text/html"
echo "<html><head><title>Light on"
echo "</title>"
echo "<meta http-equiv='refresh' content='1; url=http://86.11.221.243' />"
echo "</head><body>"
echo "$(gpio mode 8 out) #this turns the light on"
echo "$(cp /var/www/on.html /var/www/a1.html)"
echo "</body></html>"

我正在使用 cp 复制具有绿色背景的 html 网页以替换具有黑色背景的文件。这用于指示 LED a1 的状态(第 1 列)。

【问题讨论】:

  • 请通过编辑您的问题来解释您为什么要做cp /var/www/on.html /var/www/a1.html...
  • &lt;meta 的行可能缺少引号
  • 编辑您的问题以改进和激励它(解释为什么cp
  • 我正在使用 CP 将名为 on.html(只有绿色背景)的网页复制到 /var/www/a1.html 的新目的地,以便向用户指示 LED亮了。

标签: linux bash apache raspberry-pi cgi


【解决方案1】:
echo "$(cp /var/www/on.html /var/www/a1.html)"

$( ... ) 正在运行括号内的命令,并被该命令的输出(到stdout)替换。成功的cp 没有任何输出。失败的cp 正在向stderr 而非stdout 提供错误消息。在这两种情况下,效果都是echo "" 的效果(输出一个空行,即一个换行符),可能还有复制文件的额外副作用。并且该副本以www-data 用户(运行您的Web 服务器的用户)身份运行....如果/var/www/ 不能被它写入(在我的系统上/var/www/root:root 拥有并且是不是世界可写的,所以www-data 不能在里面写)。

因此,无需在特定的 cp 行上使用 echo。你可以用cp /var/www/on.html /var/www/a1.html ; logger cp got $?替换它(但是使用cp不是很好,见下文)

顺便说一句,cp 不是原子操作。如果两个这样的 CGI 进程同时运行会发生什么并没有完全定义。也许您想强制使用ln -f原子操作)而不是cp

的硬链接

你可以让/var/www/www-data 所有,或者是世界可写的。在这两种情况下,这都是一个安全漏洞(您可以在专用的 internal 网络服务器上负担得起,只能从您的家庭网络访问)。如果您负担得起将/var/www/on.html/var/www/a1.html 替换为/var/www/mydir/on.html/var/www/mydir/a1.html(因此更改引用它们的HTML 代码),您可以简单地拥有一个/var/www/mydir/ 目录,该目录由www-data 拥有和/或可写

您可以将您的 shell 脚本包装在 setuid 可执行文件中(例如,编写一个小型 C 程序,该程序将 execve(2) 您的脚本)和 chmod u+srx 编译后的可执行文件。

您可以将一些logger(1) 命令添加到您的脚本(和/或一些syslog(3) 到您的C 程序包装它)中(至少为了便于调试),然后查看/var/log/ 下的消息

顺便说一句,在 Rasberry Pi 上,您可以用专用的 C 程序替换 apache Web 服务器(例如,使用一些 HTTP 服务器库,如 libonion

也许还要考虑浏览器端的AJAX 技术(也许与websockets 结合使用)。

【讨论】:

    猜你喜欢
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 2020-06-24
    • 1970-01-01
    • 2016-07-25
    • 2012-10-16
    相关资源
    最近更新 更多