权限、ACL、Xattr、文件锁与配额

权限、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.cnotify_change() 处理 chmod/chown/truncate/time:

  1. setattr_prepare() 通用校验;
  2. security hook;
  3. filesystem setattr()
  4. setattr_copy() 更新通用字段;
  5. 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
2
3
4
5
6
namei -l /path
getfacl /path
getfattr -d -m- /path
lsattr /path
lslocks
quota -vs

文章互动

阅读 --

留言

0 条留言

正在加载留言…