用大模型写运维配置,导致安全漏洞被利用
上周帮一个朋友排查服务器被扫站的问题,发现罪魁祸首是用大模型写的一小段 Nginx 配置。
看起来参数都对,但漏洞就藏在几个默认选项里。
如果你也刚刚开始用大模型写运维配置,下面这三个安全漏洞一定要提前知道,不然服务器很容易被别人利用。
漏洞一:自动开启目录遍历,网站根目录全裸奔
大模型生成的静态资源配置里,经常出现下面这种写法:
server {
listen 80;
server_name example.com;
location / {
root /var/www/html;
autoindex on;
}
}
autoindex on 会让访问者看到目录下的所有文件列表,如果根目录不小心指向了项目根目录(比如包含了 .env 或 .git),等于把整个项目暴露了出去。
如何测试:直接在浏览器访问 http://你的服务器IP/,如果能列出文件和文件夹,就中了。
修复:把 autoindex on; 改成 autoindex off;(或者直接删掉这一行,默认就是 off)。同时确认 root 指向的是 public 或 dist 这类对外目录,而不是项目根。
漏洞二:未屏蔽敏感路径,备份文件可被直接下载
很多大模型生成的 location 块只处理了前端路由,没有单独屏蔽 .git、.svn、backup.sql 这类敏感路径。
例如:
location / {
try_files $uri $uri/ /index.html;
}
这个配置会允许访问任何存在的文件。攻击者可以用扫描工具快速找到 .git/config 或者 wp-config.php 的备份文件。
如何测试:用 curl 试试:
curl -I http://你的服务器IP/.git/config
如果返回 200 OK 且内容包含 [core],说明严重泄露。
修复:添加显式拒绝规则:
location ~ /(\.git|\.svn|backup|dump) {
deny all;
}
注意这个块要放在 location / 之前,优先级更高才会生效。
漏洞三:服务器版本信息泄露,给攻击者递刀子
大模型默认不会帮你关掉 server_tokens,导致 HTTP 响应头里会带出 Nginx 版本号。
比如:
Server: nginx/1.18.0 (Ubuntu)
攻击者知道版本后,可以直接搜索该版本的已知漏洞。
如何测试:
curl -I http://你的服务器IP | grep Server
修复:在 http 块中加上:
server_tokens off;
然后重启 Nginx:nginx -s reload
再次测试,Server 头会变成 nginx 不显示版本。
几步验证你的配置是否安全
写完配置后,不要急着上线。
先跑下面几个检查:
- 用
curl -I测试敏感路径,看是否返回 403 或 404。 - 用在线扫描工具(如 Mozilla Observatory)扫一遍。
- 人工查看
location顺序,确保拒绝规则在根规则前面。
如果你也习惯让大模型帮忙写运维配置,记得每次都要补上安全审查这一步。
大模型能快速生成语法正确的配置,但安全上下文和业务逻辑还得靠人来把关。
遇到异常时优先回看上面三个漏洞,大部分被扫站的问题都出在这里。