容器权限控制核心是“以谁身份运行、能访问什么、能做什么”,需通过用户命名空间映射、挂载隔离、能力限制、SELinux/seccomp加固及ACL/sudo精细化管控实现纵深防御。

容器化环境中的权限控制,核心不是“能不能运行”,而是“以谁的身份运行、能访问什么、能做什么”。单纯靠 Docker 默认的 root 运行或简单加个 USER 指令远远不够——真正安全的隔离必须让容器内看似有 root 权限的进程,在宿主机上连 /etc/passwd 都打不开。
用户命名空间:让容器 root 变成宿主机普通用户
User Namespace 是权限隔离的起点。它不取消 root 身份,而是重映射:容器里 UID 0 对应宿主机上某个非特权 UID(比如 100100),这个 UID 在宿主机上对绝大多数目录无写权限。
- 确认支持:内核 ≥ 3.8(建议 ≥ 5.4),且 cat /proc/sys/user/max_user_namespaces 返回非零值;若为 0,需在 /etc/sysctl.conf 中添加 user.max_user_namespaces=65535 并执行 sysctl -p
- 分配子 ID:在 /etc/subuid 和 /etc/subgid 中为运行容器的用户配置范围,例如 alice:100000:65536
- 启用方式:Docker 启动时加 --userns-remap=default;Kubernetes Pod 中通过 securityContext.runAsUser 配合 fsGroup 显式指定 UID/GID
挂载与文件系统:切断路径可见性,防止越权访问
仅做 UID 映射还不够。如果容器仍能挂载或看到宿主机的 /proc、/sys、/home 等路径,就可能绕过权限检查。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 默认禁用敏感挂载:避免自动挂载 /proc、/sys;如需使用,明确限定只读(--read-only + --tmpfs /tmp)
- 精准挂载:用 -v 显式声明所需目录,禁止递归绑定父目录(如不用 -v /home:/home,而用 -v /home/alice/app:/app:ro)
- 根目录隔离:启动时加 --read-only,再按需开放可写点(如 --tmpfs /run 或 -v /host/log:/var/log:rw)
能力限制与策略加固:砍掉多余权限,堵住逃逸路径
Linux Capabilities 把 root 权限拆成小块,容器不该拥有全部——就像给司机发驾照,不该把飞机、轮船、起重机的操作证全给他。
- 禁用高危能力:默认移除 CAP_SYS_ADMIN、CAP_DAC_OVERRIDE、CAP_SETUID 等;可用 capsh --print 进容器验证当前能力集
- 按需授权:只加必要项,如 --cap-add=NET_BIND_SERVICE(绑定 1024 以下端口)、--cap-add=CHOWN(配合非 root 用户修改属主)
- 叠加策略层:启用 seccomp(过滤危险系统调用如 mount、clone)、SELinux/AppArmor(限制资源访问路径),并确保镜像基础层设为只读
多租户与运维提权:ACL 与 sudo 的精细化落地
在共享服务器或 SaaS 场景中,权限隔离不能只靠容器,还得管好宿主机上的文件和操作边界。
- 租户目录隔离:在 /srv/multi-tenant 下建子目录,用 setfacl -m u:tenant-a:rwx tenant-a 实现单向授权;加默认 ACL(setfacl -d -m u:tenant-a:rwx tenant-a)保障新建文件继承权限
- 运维提权控制:编辑 /etc/sudoers,用命令别名限制可执行动作,例如只允许 /usr/sbin/useradd 和 /usr/bin/passwd [a-zA-Z]*,但禁止改 root 密码
- 审计与约束:开启 Defaults !authenticate 强制密码验证,设 timestamp_timeout=30 缩短会话有效期,所有 sudo 日志写入 syslog 供追踪

















