DAY004 - 上传目录权限错误
故障场景
故障现象:nginx 正常,API 请求返回 500,应用无法写入上传目录
服务器状态:
server1:状态 INJECTED;开始时间 2026-07-14 21:00:16 +0000;影响范围 练习项目局部不可用,SSH 不受影响。。
server2:状态 INJECTED;开始时间 2026-07-15 05:00:25 +0800;影响范围 练习项目局部不可用,SSH 不受影响。。
排障过程
查看项目结构文档
先看实际返回状态码
nginx正常
500错误,应该先看应用日志什么情况
日志显示“Permission denied”权限拒绝,我们可能要去看看/opt/hermes-drills/day004/data/uploads/.write-test这文件及包含其的目录的可读写权限与项目程序所属用户
根据程序文档描述,先看api相关程序,没有的话再看grep其他程序,看这个正在运行的程序所属的用户是谁
ps -ef | grep api
由monika用户运行
看看api.py的代码逻辑是否是写/opt/hermes-drills/day004/data/uploads/.write-test
grep -R -C 5 ".write-test\|uploads\|data" app
后续补录:最好还是加上-R递归搜索程序目录下的所有相关信息,能看到环境变量等其他地方也出现相关目录
可以不加-R先查我们已经确认运行的api.py
grep -C 5 ".write-test\|uploads\|data" app/api.py
看看这.write-test文件是什么权限
看来这.write-test文件还没创建出来,大概是monika用户没有这个uploads或者上级目录的x可执行权限,所以没办法创建这个文件
ps:创建一个文件时,目标目录(也就是文件所在的目录)需要 w+x 权限;所有上级目录只需要 x 权限即可
应该用更专业的namei -l命令逐级看目录和文件的权限
看得出来,api.py的执行用户monika没有uploads目录的写操作w权限,虽然可以看到目录下面的文件,也可以进入目录,却没有办法改变目录下面的文件,因此无法创建.write-test文件
如果我不是monika用户,可以用sudo -u monika touch /opt/hermes-drills/day004/data/uploads/.write-test模拟monika身份创建文件测试是否报“Permission denied”
现在我是monika用户,直接
一般赋予monika用户或者这个组uploads目录的写权限即可
sudo chmod u+w /opt/hermes-drills/day004/data/uploads
这就创建成功了
测试本地访问API成功
公网也访问成功
- 点赞
- 收藏
- 关注作者
评论(0)