【问题标题】:Which capabilities are needed for statx to stop giving EPERMstatx 需要哪些功能才能停止提供 EPERM
【发布时间】:2018-08-06 08:12:00
【问题描述】:

我有一个使用插件接口的 Qt 项目,可以在我的系统上正常编译。但是,当在 docker 中编译同一个项目时,它会停止使用 Qt 5.10.1,并给出消息Error: Undefined interface。在strace 运行moc 之后,发现没有找到定义接口的头文件,因为对包含文件路径的statx 调用总是返回EPERM。文档甚至没有提到这个错误是如何产生的。

docker run --privileged 解决了这个问题,但我想避免过多的权限,所以我只想设置必要的权限。

到目前为止,我尝试添加所有这些功能(甚至同时添加)但没有成功:

  • CAP_DAC_OVERRIDE
  • CAP_DAC_READ_SEARCH
  • CAP_FOWNER
  • CAP_SETFCAP

我错过了什么吗?

更新

pull request 待处理。

【问题讨论】:

  • 同一个容器内,同样的配置,能不能通过其他方式访问同一个文件?也就是说,您是否确认该问题是特定于 statx 的?
  • 如果它特定于statx -- 你从docker info | grep 'Security Options' 的输出是什么?
  • @CharlesDuffy 我可以cat 容器内的文件内容没有问题。 docker info 的输出是 Security Options: seccomp Profile: default
  • 我猜 Docker 正在使用不允许 statx 的 seccomp 配置文件,但这与空白的“安全选项”列表不一致......除非它被重新格式化为多行。
  • @CharlesDuffy 是的,它被重新格式化为多行。我把它折叠成一个用于编辑的评论。

标签: linux docker linux-capabilities


【解决方案1】:

2018-03-06 之前

截至目前,statx 不包含在 Docker 使用的default seccomp whitelist 中。

您可以使用--security-opt seccomp=/path/to/seccomp/profile.json 指定不同的配置文件(可能是添加了此系统调用的配置文件)。


2018-03-06 之后

截至 2018 年 3 月 6 日,moby/moby#36417merged to master

它应该包含在以后的夜间构建中,并最终包含在 Docker 18.04 版本中。

【讨论】:

  • 是否可以只向当前配置文件添加系统调用,或者我是否需要始终镜像默认配置文件并添加自己的配置文件才能使其正常工作?
  • 我不知道添加系统调用的机制。不过,编写一个jq 表达式来编写向列表添加新条目的脚本并不难。
  • 此处打开了将 statx 列入白名单的拉取请求:github.com/moby/moby/pull/36417
猜你喜欢
  • 2014-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
  • 2023-03-28
  • 2016-05-29
相关资源
最近更新 更多