在 CentOS(其实是 Linux 下通用的做法)里,readdir 本身是系统调用,你不能“隐藏 readdir”,但可以从文件系统层 / 应用层 / 权限层来“让 readdir 看不到某些内容”。下面按常见需求分类说明:
readdir 列出来(最常见). 开头(最简单)mv secret.txt .secret.txt
readdir 会返回,但很多程序(ls、readdir 上层封装)默认忽略 . 开头文件。
注意:
readdir()仍会返回.文件,只是ls默认不显示。
chmod 000 secret.txt
chown root:root secret.txt
其他用户:
readdir 直接失败mkdir /hidden
chmod 700 /hidden
其他用户 opendir("/hidden") 直接失败,readdir 根本拿不到。
mount --bind /empty /path/to/dir
原目录内容被“盖住”,readdir 只看到空目录。
常用于:
overlayfsencfscryptfs真实文件在底层,readdir 只看到挂载层内容。
如果你是自己写程序:
struct dirent *de;
while ((de = readdir(dir)) != NULL) {
if (strncmp(de->d_name, "hide", 4) == 0)
continue;
}
getdents64 / filldir⚠️ 风险极高,CentOS 有 Secure Boot / 签名限制。
| 需求 | 推荐方式 |
|---|---|
| 简单隐藏 | .文件名 |
| 防止别人看 | 权限 / 目录权限 |
| 程序级过滤 | readdir 里判断 |
| 系统级隐藏 | mount / overlay |
| 安全级隐藏 | 内核 hook(不推荐) |
如果你能说清楚:
我可以给你更精确的方案。