You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Photon OS下Docker user-remap挂载目录权限及提权风险求解

问题原因说明

你遇到的权限问题本质是Docker user remap机制会把容器内的UID/GID偏移映射到宿主机/etc/subuid、/etc/subgid配置的区间,你配置的偏移起点是100000,所以容器内的任意UID在宿主机侧的实际身份都是100000 + 容器内UID,如果宿主机挂载目录的属主/属组没有对这个映射后的ID开放权限,就会出现访问失败。你之前开o+w等于给所有用户开放权限,自然有安全风险。

方案1:仅授权dockremap映射用户访问挂载目录(符合第一个要求)

不需要给目录开全局写入权限,直接调整挂载目录的属主为映射后的UID/GID即可:

  1. 先确认容器内运行进程的UID:如果容器默认用root运行(user remap后已经是宿主机非root用户),对应宿主机UID就是100000;如果容器内指定了普通用户运行,比如UID为1000,对应宿主机UID为100000 + 1000 = 101000
  2. 宿主机侧执行权限配置:
# 替换为你实际的挂载目录路径,以及对应映射后的UID/GID
chown -R 100000:100000 /path/to/host/mount/dir
# 仅允许属主读写,其他用户无任何权限
chmod -R 700 /path/to/host/mount/dir

该配置下只有dockremap映射的对应容器用户可以访问目录,宿主机其他普通用户无权限,完全规避权限提升风险,Photon OS默认内核支持该配置,无需额外调整。

方案2:替代user remap的安全实现方案(符合第二个要求)

如果不想处理UID映射的计算,可以改用以下方案实现容器非root运行+防提权:

方案2.1 改用Rootless Docker模式

整个Docker守护进程以宿主机普通用户身份运行,天然杜绝守护进程层面的权限逃逸风险,容器默认无法获取宿主机root权限:

  • Photon OS侧安装依赖:tdnf install docker-rootless slirp4netns fuse-overlayfs
  • 创建用于运行Docker的普通用户(如dockeruser),切换到该用户执行dockerd-rootless-setuptool.sh install,按照提示配置对应的环境变量即可
  • 容器启动时指定--user <容器内普通用户UID>:<容器内普通用户GID>运行,宿主机挂载目录直接设置属主为dockeruser即可,不需要做UID偏移计算,权限控制更直观

方案2.2 全局强制容器非root运行+禁用提权

保留user remap配置的同时,在Docker daemon层面全局禁止权限提升:
修改/etc/docker/daemon.json添加以下配置:

{
  "userns-remap": "default",
  "no-new-privileges": true
}

重启Docker服务后生效,no-new-privileges参数会禁止容器内的SUID/SGID程序执行提权操作,哪怕容器内存在漏洞也无法获取更高权限,挂载目录的权限配置参考方案1即可。

内容的提问来源于stack exchange,提问作者Subhanu Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:45:04