权限、ACL、Xattr、文件锁与配额
1. 权限
VFS permission 综合:
- inode mode uid/gid;
- POSIX ACL;
- capability;
- mount flags(noexec/nodev/nosuid/read-only);
- idmapped mount;
- immutable/append flags;
- LSM hooks;
- filesystem-specific policy。
inode_permission() 是核心入口之一,具体文件系统可实现 permission。
2. 属性修改
attr.c 的 notify_change() 处理 chmod/chown/truncate/time:
setattr_prepare()通用校验;- security hook;
- filesystem
setattr(); setattr_copy()更新通用字段;- mark inode dirty/notify。
truncate 还需处理 page cache、DIO、extent 和日志顺序。
3. Xattr
xattr.c 提供 get/set/list/remove。namespace:
user.*trusted.*security.*system.*
具体文件系统通过 xattr_handler 存取。SELinux label、capability、ACL 都可依赖 xattr;挂载/复制工具忽略 xattr 会改变安全语义。
4. POSIX ACL
posix_acl.c:
- 解析和校验 ACL;
- 计算 mode 与 mask;
- permission check;
- inheritance/default ACL。
CONFIG_FS_POSIX_ACL 只提供公共 helper,具体文件系统还需启用自身 ACL 支持。
5. 文件锁
locks.c 实现:
- POSIX record lock;
- BSD
flock; - lease;
- OFD lock;
- lock manager hooks。
advisory lock 只约束配合者;网络文件系统还涉及远端 lock protocol、grace period 和故障恢复。
6. Lease/delegation
lease 可在他人打开冲突模式时通知 owner;NFS delegation 与 VFS break lease 机制交互。open/unlink/rename 可能返回 delegation,调用者需 break 后重试。
7. Quota
quota/ 支持:
- user quota;
- group quota;
- project quota;
- quota format;
- dquot cache/charge;
- quota netlink warning。
quota 与 memcg 不同:前者限制持久存储 block/inode,后者限制内存。
8. 安全边界
- TOCTOU:权限检查应与实际 inode/path 操作在 VFS 内完成;
- 不用用户态
access()结果代替open(); - privileged helper 使用
openat2和 dirfd; - xattr 名称/长度需严格验证;
- idmapped mount 下 uid/gid 比较使用映射 helper;
- 网络文件系统缓存权限需考虑 server revalidation。
9. 排障
1 | namei -l /path |
正在加载留言…