本实验支持两条路线、三种环境:
| 环境 | 反向代理 | HTTPS 方案 | systemd |
|---|---|---|---|
| WSL / VirtualBox (有 root) | Nginx | openssl 自签名 | 完整支持 |
| 共享服务器 (无 root) | Caddy | Caddy 自动 HTTPS | 使用 --user 模式 |
两条路线都能完成实验。推荐:在 WSL/VirtualBox 中使用 Nginx 路线(完整体验)。
创建静态页面,用 Python 启动 HTTP 服务:
mkdir -p ~/www
echo "<h1>Hello Linux4AI - 学号: YOUR_ID</h1>" > ~/www/index.html
cd ~/www && python3 -m http.server 8080 &
curl http://localhost:8080 # 验证服务运行路线 1 — Nginx(有 root 环境):
参考 assets/nginx-reverse-proxy.conf,创建配置:
# 复制模板到 Nginx 配置目录
sudo cp assets/nginx-reverse-proxy.conf /etc/nginx/sites-available/myweb
sudo ln -sf /etc/nginx/sites-available/myweb /etc/nginx/sites-enabled/myweb
sudo nginx -t # 检查语法
sudo systemctl reload nginx # 重载配置验证:curl http://localhost:8000
路线 2 — Caddy(共享服务器 / 无 root):
# 下载 Caddy(参考课件中的链接)
# 启动反向代理
caddy reverse-proxy --from :8000 --to :8080 &验证:curl http://localhost:8000
参考 assets/myweb.service.template,编写你的 service
文件:
# 路线 1:系统级服务(有 root)
sudo cp assets/myweb.service.template /etc/systemd/system/myweb.service
# 编辑文件中的 用户名 和路径
sudo systemctl daemon-reload
sudo systemctl enable --now myweb
sudo systemctl status myweb
# 路线 2:用户级服务(无 root)
mkdir -p ~/.config/systemd/user/
cp assets/myweb.service.template ~/.config/systemd/user/myweb.service
# 编辑文件,去掉 User= 行,调整路径
systemctl --user daemon-reload
systemctl --user enable --now myweb
systemctl --user status myweb关键验证:杀掉之前手动启动的 Python 进程,确认 systemd 管理的服务仍然运行:
kill %1 # 杀掉之前的后台进程
curl http://localhost:8080 # 仍然能访问 = systemd 生效路线 1 — Nginx + openssl 自签名:
# 参考 assets/gen-selfsigned-cert.sh 生成证书
bash assets/gen-selfsigned-cert.sh
# 证书生成在 ~/certs/ 目录下
# 修改 Nginx 配置添加 SSL(参考课件中的 HTTPS 配置段)
# 在 server 块中添加:
# listen 443 ssl;
# ssl_certificate /home/你的用户名/certs/cert.pem;
# ssl_certificate_key /home/你的用户名/certs/key.pem;
sudo nginx -t && sudo systemctl reload nginx
curl -k https://localhost # -k 跳过自签名证书警告路线 2 — Caddy 自动 HTTPS:
# 停止之前的 Caddy 进程
# 重新启动,监听 443
caddy reverse-proxy --from :443 --to :8080 &
curl -k https://localhost验证:curl -kv https://localhost 2>&1 | grep -i "subject\|issuer"
查看证书信息。
grep 和 awk 完成以下分析:# 统计登录失败次数最多的前 5 个 IP
grep "Failed password" auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head -5
# 统计登录成功记录
grep "Accepted" auth.log | wc -l
# 找出尝试登录次数最多的用户名(含无效用户)
grep "Failed password" auth.log | awk '{
if (/invalid user/) print $(NF-5)
else print $(NF-5)
}' | sort | uniq -c | sort -rn | head -5在任务 A 的服务运行一段时间后(或使用教师提供的样本日志),分析 Nginx/Caddy 的访问日志:
# 日志位置:
# Nginx: /var/log/nginx/access.log
# Caddy: 查看 Caddy 进程输出
# 1. 状态码分布 — 服务健康吗?
awk '{print $9}' access.log | sort | uniq -c | sort -rn
# 2. 访问量 Top 5 IP
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -5
# 3. 找出所有 404 请求(可能有人在扫描你的网站)
awk '$9 == 404 {print $7}' access.log | sort | uniq -c | sort -rn
# 4. 找出响应最慢的请求(假设日志中包含 $request_time)
awk '{print $NF, $7}' access.log | sort -rn | head -5使用任意 AI 工具(ChatGPT / Claude / DeepSeek / GitHub Copilot 等),输入以下 Prompt:
“写一个 Bash 脚本,自动检测 CPU 使用率超过 80% 的进程并将其杀死。”
保存 AI 生成的原始脚本为 lab04/kill-cpu-hog-raw.sh。
对照课件中的 AI 危险案例,审计该脚本:
kill -9 vs
kill -15)将审计结论写入报告,至少识别 2 类安全风险。
对原始脚本进行修正,要求增加以下功能:
./kill-cpu-hog.sh (dry-run)
或 ./kill-cpu-hog.sh --force (真正执行)保存修正后的脚本为 lab04/kill-cpu-hog-fixed.sh。
在 WSL/VM 中运行修正后的脚本:
chmod +x lab04/kill-cpu-hog-fixed.sh
# dry-run 模式(安全,不杀进程)
./lab04/kill-cpu-hog-fixed.sh
# 确认 dry-run 输出合理后,可选执行 --force 模式
# ./lab04/kill-cpu-hog-fixed.sh --force记录 dry-run 的输出结果。
提交 lab04/report.md:
.cast(建议命名 lab04/lab04.cast,便于后续转为
text 进行智能批改)。