linux中acl配合进程约束构建轻量沙箱,关键在于“精准限权+运行约束”双轨并行:acl划清文件系统数据边界,systemd限制用户身份与capability,命名空间隔离进程视图,再辅以protectsystem、privatetmp和networknamespace等机制实现全栈防护。

Linux 中用 ACL 配合应用进程实现安全沙箱隔离,关键不在“加权限”,而在“精准限权+运行约束”双轨并行。ACL 负责文件系统层面的细粒度访问控制,但仅靠它无法阻止进程自身越权行为;必须搭配进程身份、能力裁剪和命名空间隔离,才能构成真正可用的轻量沙箱。
先用 ACL 划清数据边界
ACL 是多租户数据隔离最直接有效的手段,尤其适合同一目录下多个应用或用户互不干扰的场景:
- 为每个应用创建专用系统用户(如 app-a),不配登录 shell:
useradd -r -s /sbin/nologin -M -U app-a - 在共享根目录(如
/srv/sandbox)下建各自子目录:mkdir -p /srv/sandbox/app-a /srv/sandbox/app-b,父目录设为755保证可遍历 - 用
setfacl单向授权:setfacl -m u:app-a:rwx /srv/sandbox/app-asetfacl -m u:app-b:--- /srv/sandbox/app-a
同理反向设置app-b目录 - 启用默认 ACL,确保新建文件自动继承:
setfacl -d -m u:app-a:rwx /srv/sandbox/app-a
再用进程身份与 capability 锁死行为能力
ACL 管不了进程自己调用 open("/etc/shadow") 或发网络包——这必须靠运行时约束:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 用 systemd 启动应用时,强制指定用户和组:
User=app-a、Group=app-a - 禁用高危 capability:
CapabilityBoundingSet=~CAP_SYS_ADMIN CAP_NET_RAW CAP_IPC_LOCK - 只开放必要能力,例如监听端口:
CapabilityBoundingSet=CAP_NET_BIND_SERVICE - 配合 AppArmor 或 SELinux 策略,明确限制该进程只能读取
/srv/sandbox/app-a下的路径、写日志到指定位置、不能执行非白名单二进制
最后用命名空间补全运行视图隔离
即使文件和能力都锁住了,进程仍可能看到宿主机的全部进程、网络接口或挂载点——这对沙箱是重大风险:
- 启动时启用
PrivateTmp=yes和ProtectSystem=strict,自动挂载私有/tmp、只读系统目录 - 开启网络隔离:
NetworkNamespacePath=/run/netns/app-a或使用unshare --net启动 - 启用
MountFlags=slave+BindPaths=显式挂载所需路径,避免整个/可见 - 对敏感命令(如
cat、curl)封装进 OpenSandbox CLI,自动注入 PID/NET/MNT 命名空间和 seccomp 过滤器
验证是否真正隔离
不要只信配置,要实测进程视角:
- 切换到应用用户:
sudo -u app-a bash,尝试ls /srv/sandbox/app-b→ 应报Permission denied - 在沙箱中运行
cat /etc/passwd→ 若未做ProtectSystem或 bind mount,仍可能成功 - 检查进程实际 namespace:
ls -l /proc/$(pgrep -u app-a)/ns/,确认 net、pid、mnt 指向独立 inode - 用
getfacl和systemctl show app-a.service | grep Capability核对策略是否生效










