apache - Perl cgi 脚本无法读取与其父目录具有相同权限的目录
问题描述
我们的新 Apache 服务器出现了一个奇怪的问题。当我的 cgi 脚本尝试读取目录时,系统给了我权限被拒绝:
CGI 脚本:
#!/usr/bin/perl
print "Content-Type: Text/html\n\n";
# print `ls -altr / 2>&1`;
print `ls -altr /opt 2>&1`;
print `ls -altr /opt/NA 2>&1`;
相同的代码在我们的旧 apache 服务器(v.2.2.15)上运行。我可以得到“/”和“/opt”的输出,但是当我尝试列出“/opt/NA”时,我得到了 Permission Denied。
而且我看不出这两个目录之间有什么区别:
[root@myapache ~]# curl -k https://10.14.13.1/cgi-bin/listfile.cgi
total 12
drwxr-xr-x. 2 root root 6 Aug 25 2018 rh
drwxr-xr-x. 9 root root 110 Aug 18 15:17 . ##### this is the /opt
drwxr-xr-x. 5 root root 4096 Nov 18 14:22 chef
drwxr-xr-x. 5 root root 43 Nov 18 14:28 mcafee
drwxrwxr-x. 6 root root 4096 Nov 18 14:29 unified-monitoring-agent
drwxr-xr-x. 7 root root 80 Dec 16 14:59 McAfee
dr-xr-xr-x. 20 root root 4096 Dec 20 06:05 ..
drwxr-xr-x. 4 root root 32 Dec 20 06:05 isec
drwxr-xr-x. 4 root root 40 Jan 12 18:24 NA ##### this is the /opt/NA
ls: cannot open directory /opt/NA: Permission denied
知道这如何成为一个问题吗?
解决方案
感谢 Dave Mitchell 的建议,我这样做并更新了安全上下文位:
[root@nccm-prod-dr-mt5 opt]# ls -Z
drwxr-xr-x. root root system_u:object_r:usr_t:s0 chef
drwxr-xr-x. root root system_u:object_r:usr_t:s0 isec
drwxr-xr-x. root root system_u:object_r:usr_t:s0 mcafee
drwxr-xr-x. root root system_u:object_r:usr_t:s0 McAfee
drwxr-xr-x. root root system_u:object_r:unlabeled_t:s0 NA
drwxr-xr-x. root root system_u:object_r:usr_t:s0 rh
drwxrwxr-x. root root system_u:object_r:usr_t:s0 unified-monitoring-agent
[root@nccm-prod-dr-mt5 opt]# chcon system_u:object_r:usr_t:s0 NA
[root@nccm-prod-dr-mt5 opt]# ls -Z
drwxr-xr-x. root root system_u:object_r:usr_t:s0 chef
drwxr-xr-x. root root system_u:object_r:usr_t:s0 isec
drwxr-xr-x. root root system_u:object_r:usr_t:s0 mcafee
drwxr-xr-x. root root system_u:object_r:usr_t:s0 McAfee
drwxr-xr-x. root root system_u:object_r:usr_t:s0 NA
drwxr-xr-x. root root system_u:object_r:usr_t:s0 rh
drwxrwxr-x. root root system_u:object_r:usr_t:s0 unified-monitoring-agent
它现在正在工作。
推荐阅读
- javascript - 通过io.sockets.sockets解析时如何获取socket id
- autodesk-forge - 如何更改两个选定模型的几何形状?
- c - 如何实现 fsm
- android - Android onCreate 在退出后被调用两次
- css - 带有 Next.js 图像组件的线性渐变
- javascript - 为什么在收到新值后这个 var 不被传递?
- python - 如何使 SQLite 数据库文件作为文本文件可读?
- python - 快速API | 羽毛文件压缩下载(zl4 和 zstd)
- php - 上传文件到linux服务器,报错POST net::ERR_CONTENT_DECODEDING_FAILED 200 (OK)
- php - LinkedIn 视频 Beta 端点给出 500 个错误