ACL可实现多租户编译缓存精准隔离:为/srv/build-cache下各tenant子目录设置用户级rwx权限与显式拒绝规则,启用默认ACL使新建文件自动继承,并为admin赋予全权、common-readonly设为只读。

在多租户编译服务器中,不同团队或开发者共用同一台机器进行源码编译(如构建内核、Rust 项目、C++ 工程),常需共享缓存目录(如 ~/.cache/ccache、/var/cache/cargo 或自建的 /srv/build-cache),但又必须防止租户 A 误读/覆盖租户 B 的缓存对象。ACL 是比传统用户组方案更轻量、更精准的隔离手段——它不依赖建组、不改动文件主属关系,直接为指定用户授予或屏蔽特定目录的访问权限。
明确租户边界与缓存目录结构
假设所有租户缓存统一挂载在 /srv/build-cache 下,每个租户有独立子目录:
-
/srv/build-cache/tenant-a→ 仅 tenant-a 可读写 -
/srv/build-cache/tenant-b→ 仅 tenant-b 可读写 -
/srv/build-cache/common-readonly→ 所有租户只读(如预置的 sysroot、toolchain)
父目录 /srv/build-cache 权限设为 755,保证可遍历;各租户子目录初始属主可设为 root,避免属组继承干扰。
用 setfacl 设置租户专属读写权限
对每个租户子目录,分别添加其用户的 rwx 权限,并显式拒绝其他租户访问:
setfacl -m u:tenant-a:rwx /srv/build-cache/tenant-asetfacl -m u:tenant-b:--- /srv/build-cache/tenant-asetfacl -m u:tenant-b:rwx /srv/build-cache/tenant-bsetfacl -m u:tenant-a:--- /srv/build-cache/tenant-b
注意:ACL 规则按顺序匹配,拒绝(---)应紧随对应允许规则之后,避免被后续更宽泛规则覆盖。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
启用默认 ACL 实现新建文件自动继承
编译过程会生成大量临时文件和目录(如 ccache 的 hash 子目录、cargo 的 target/ 缓存),必须确保它们自动继承租户权限:
setfacl -d -m u:tenant-a:rwx /srv/build-cache/tenant-asetfacl -d -m u:tenant-b:rwx /srv/build-cache/tenant-b
默认 ACL(-d)只影响新创建项,不影响已有内容;且仅对本目录下新建的文件/子目录生效,不会跨级传播。
管理员与只读共享区的特殊处理
运维人员(如 admin 或 buildops)需保留完全访问权,可统一加一条:
setfacl -R -m u:admin:rwx /srv/build-cache
对于只读共享区(如 /srv/build-cache/common-readonly),设置:
setfacl -m u:tenant-a:r-x /srv/build-cache/common-readonlysetfacl -m u:tenant-b:r-x /srv/build-cache/common-readonly- 不设默认 ACL,避免误写入
验证是否生效:用 getfacl /srv/build-cache/tenant-a 查看完整规则;再以租户身份执行 sudo -u tenant-a touch /srv/build-cache/tenant-a/test 和 sudo -u tenant-a ls /srv/build-cache/tenant-b,确认读写符合预期。

















