在 Debian(以及一般的 Linux)里,readdir 本身并不做权限控制,权限控制是由 内核 VFS + 文件系统权限 来完成的。readdir() 只是“读取目录项”,能不能读,取决于:
下面按“使用层面 → 编程层面 → 高级控制”来说明。
ls -ld /some/dir
r:可列文件名x:可进入 / readdirreaddir() 直接返回 EACCES示例:
chmod 700 /data
# 只有 owner 能 readdir
chown user:group /data
chmod 750 /data
Debian 默认支持 ACL(ext4/xfs 都支持)
setfacl -m u:alice:rx /data
查看:
getfacl /data
这样:
readdirDIR *d = opendir("/data");
if (!d) {
perror("opendir");
// EACCES = 权限不足
exit(1);
}
struct dirent *de;
while ((de = readdir(d)) != NULL) {
printf("%s\n", de->d_name);
}
closedir(d);
权限拒绝时:
opendir() 返回 NULLerrno == EACCES如果你要:
“用户能进目录,但看不到某些文件”
那 readdir 做不到,需要:
限制某程序能读哪些目录:
/etc/apparmor.d/myapp
示例:
/sensitive/ r,
/other/ deny r,
自己写文件系统:
readdir 回调里决定返回哪些项Debian 中 readdir 的权限控制 = 目录 x 权限 + ACL +(可选)AppArmor/SELinux
如果你愿意,可以告诉我:
我可以给你更具体的方案。