Docker容器映像中没有root权限

标记

我测试了使用以下命令启动的Docker容器(从Nvidia CUDA映像创建):

docker run -i -t xxxxxx /bin/bash

我可以看到root提示符,但是仍然没有某些操作的特权。例如,当我执行时:

dmesg

我看到“权限被拒绝”。为什么?

丹妮拉·基佛(Danila Kiver)

在现代Linux中,成为root并不一定意味着拥有最终权限。功能机制通过中断可能分别授予/从特定任务授予/撤销的部分中的root权限来提供对权限的更细粒度控制,并且Docker使用此机制。

默认情况下,即使启动了容器化进程,Docker也会放弃许多危险的功能,即使该进程代表root用户运行这是因为主机内核在所有容器和主机系统之间共享,因此,来自特权容器化过程的某些系统调用可能会揭示有关(您的情况)的信息,甚至会影响“外部世界”。这就是为什么即使您dmesg(1)root身份运行时也会看到“权限被拒绝”的原因

在内部,dmesg(1)调用syslog(2)系统调用以获取内核日志。按照规定man capabilities,此系统调用需要特定的功能- CAP_SYSLOG

CAP_SYSLOG (since Linux 2.6.37)
    * Perform privileged syslog(2) operations.
      See syslog(2) for information on which operations require privilege.

默认情况下,此功能已在Docker容器中删除,因此,dmesg(1)在您的容器中会失败。

如果您信任图像的供应商,或者只是不太在意安全性,则可以使用其他功能(--cap-add syslog启动容器

docker run -it --cap-add syslog nvcr.io/nvidia/cuda:9.0-devel-ubuntu16.04

这样可以解决您的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Grafana Docker容器中拥有root权限?

具有root权限的Jenkins Docker容器?

有没有一种方法可以将Docker映像合并到一个容器中?

在Docker中,容器和映像之间有什么区别?

没有 vmlinux 的 Linux 容器 (LXC) 映像

Docker容器中的“权限被拒绝”

有没有简单的方法可以在Bitbucket Pipelines Docker容器中更改为非root用户?

docker中没有root的Mariadb init

删除所有Docker映像和容器

Docker映像/容器内部有什么?

在ubuntu中没有root访问权限的puppet apply命令

无特权的Docker映像中的权限被拒绝

在Docker容器中挂载Linux映像

在Gitlab Runner容器中构建Docker映像

在Azure容器实例中更新Docker映像

在Jenkins容器中构建docker映像

如何从Docker容器中删除Posgresql映像并安装新的映像

如何授予Docker容器中的非root用户访问主机上安装的卷的权限

在Docker容器中以非root用户身份运行Nginx会导致权限被拒绝错误

有没有办法将 docker 容器作为 sudo 运行,如果它是在非 sudo 基础映像上构建的?

在带有Linux容器的Win 10中安装的Docker For Desktop无法运行hello-world映像

Docker-无法从带有入口点的导入映像中运行容器

在Jenkins(在Docker容器中)管道中构建Docker映像

保存Docker容器映像

Docker:容器中没有生成输出文件

tmpfs docker容器中没有足够的可用空间

在Docker容器中,cronjobs没有得到执行

在Docker容器中时,Systemd没有获得pid 1

Jenkins Docker映像没有make或sudo