qetfw头像

Apache2 Bash CGI:动态时间页面与请求验证

Apache2 Bash CGI:动态时间页面与请求验证

1. 服务介绍

CGI 让 Apache 执行服务端程序并将输出作为 HTTP 响应。本文用固定 Bash 脚本输出系统时间,说明响应头后的空行、模块与执行权限;不接受用户输入或拼接系统命令。

2. 准备运行环境

UOS/Debian 系 Apache2、Bash、管理员配置权限及隔离测试站点。先确认 Apache MPM 和现有虚拟主机,不将整个上传目录开放为可执行脚本。浏览器请求以Web服务账号执行,不应获得root权限。

3. 相关知识与注意点

• CGI输出先写Content-Type,再空行分隔头和正文;空行不是装饰。

• Shell命令区分大小写,使用printf/date而非Echo和中文引号。

• threaded MPM一般使用cgid,prefork可用cgi;按实际模块依赖确认。

• 不启用目录索引,不对任意.sh全站启用ExecCGI;限制到受控CGI目录。

• 脚本由管理员维护,不可被Web账号或上传用户修改。

4. 实验步骤

Debian系按实际MPM启用对应CGI模块,例如:

apache2ctl -V
sudo a2enmod cgid

在受控虚拟主机中配置独立路径,实际目录替换为管理员创建的目录:

ScriptAlias /lab-cgi/ /var/www/lab-cgi/
<Directory /var/www/lab-cgi>
    Options -Indexes +ExecCGI
    AllowOverride None
    Require local
</Directory>

仅允许本机测试;若需远程客户端,按明确授权网段调整访问规则。将time.sh放入该目录:

#!/bin/bash
printf 'Content-Type: text/plain; charset=UTF-8\r\n'
printf 'Cache-Control: no-store\r\n\r\n'
printf 'Current system time is: %s\n' "$(LC_ALL=C date '+%Y/%m/%d %r')"

脚本须可被Web账号读取执行,父目录可遍历;不要chmod 777。配置验证后reload:

sudo apache2ctl configtest
sudo systemctl reload apache2
curl -i http://127.0.0.1/lab-cgi/time.sh

5. 原实验截图

image1

image2

image3

6. 验证命令

先 bash -n time.sh、apache2ctl configtest;curl -i 两次请求,间隔数秒,比较时间变化和Content-Type。apache2ctl -M 查看cgi/cgid模块;journalctl -u apache2 -n 50 --no-pager 以及 /var/log/apache2/error.log 排查500。403查Require与目录权限;源码直接返回时停止对外访问,修正CGI映射;不要添加sudo绕过权限。本文未实际部署,动态输出以现场请求为准。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/weixin_44524357/article/details/170420034

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--