在 CentOS 上遇到 readdir 权限问题,通常表现为:
opendir() / readdir() 失败ls 某目录时报 Permission deniedreaddir: Permission denied 或 EACCES下面按常见原因 → 排查方法 → 解决办法来说明。
Linux 中:
如果目录缺少 x 权限,readdir 会失败。
✅ 检查:
ls -ld /path/to/dir
示例(错误):
drw-r--r-- 2 root root 4096 ...
✅ 修复:
chmod +x /path/to/dir
即使目标目录权限正常,父目录缺 x 权限也会导致 readdir 失败。
例如:
/home/user/data
如果 /home/user 没有 x,就无法访问 data
✅ 检查:
namei -l /path/to/dir
✅ 修复:
chmod +x /home/user
目录属于其他用户/组,而当前用户不在组内。
✅ 查看:
id
ls -ld /path/to/dir
✅ 解决:
usermod -aG groupname user
CentOS 默认启用 SELinux,可能导致 权限看起来正确但 readdir 失败。
✅ 检查:
getenforce
ls -Z /path/to/dir
✅ 查看拒绝日志:
ausearch -m avc -ts recent
✅ 临时测试(不推荐长期使用):
setenforce 0
✅ 正确方式(示例):
semanage fcontext -a -t httpd_sys_content_t "/path/to/dir(/.*)?"
restorecon -Rv /path/to/dir
如果是:
可能:
✅ 检查:
mount | grep /path
如果你是在 C / C++ / Python / PHP 中遇到:
DIR *d = opendir("/path");
if (!d) {
perror("opendir");
}
常见 errno:
EACCES:权限不足ENOENT:目录不存在ENOTDIR:不是目录# 1. 检查目录权限
ls -ld /path/to/dir
# 2. 检查父目录
namei -l /path/to/dir
# 3. 检查 SELinux
getenforce
ausearch -m avc -ts recent
# 4. 检查用户
id
# 5. 手动测试
sudo -u username ls /path/to/dir
cat /etc/centos-release)我可以给你更精确的修复命令。