在服务器上安装二进制码头工人没有root访问权限

问题描述 投票:2回答:1

我有一个供应商的服务器没有任何的root访问权限。这是不可能写在/ etc /或/ var / lib中/泊坞窗脚本。泊坞窗没有安装。我的想法是,以安装并在目录中运行搬运工二进制文件。我将安装码头工人与一个shell脚本。该脚本应该能够从任何目录启动时没有root权限。

当脚本开始./docker/dockerd --data-root=docker/var/lib/docker我收到此错误信息。

警告[2018-11-17T18:26:19.492488618 + 01:00]错误,同时设定根守护程序传播,这通常不是关键的,但可能会导致某些功能不起作用,或回退到不太理想的行为DIR =搬运工的/ var / lib中/泊坞窗误差=“错误让守护进程根目录的父挂载:开放的/ proc /自/ mountinfo:Permission denied”错误启动守护程序:打开/var/run/docker.pid:许可被拒绝

dockerd有这么多的参数。这里的pidfile进程文件:-p | ** - *了pidfile [=的/ var /运行/ docker.pid]

http://manpages.ubuntu.com/manpages/cosmic/man8/dockerd.8.html

感谢您的帮助

#!/bin/bash

DOCKER_RELEASE='docker-18.06.1-ce.tgz'

wget https://download.docker.com/linux/static/stable/x86_64/$DOCKER_RELEASE
tar xzvf $DOCKER_RELEASE
rm $DOCKER_RELEASE

./docker/dockerd --data-root=docker/var/lib/docker
docker
1个回答
3
投票

由于今日(2019年2月4日)通过Akihiro Suda

最后,现在可以跑上游dockerd作为非特权用户!

moby/moby PR 38050

允许在非特权用户命名空间(无根模式)运行dockerd。 关闭#37375 "Proposal: allow running dockerd as an unprivileged user (aka rootless mode)",在2018年6月开业

了setuid / SETCAP二进制是必需的,除了newuidmap和newgidmap。

我怎么做的:

通过使用user_namespaces(7),mount_namespaces(7),network_namespaces(7),和slirp4netns

警告,也有限制:

限制:

  • 只有vfs graphdriver支持。 然而,在Ubuntu和几个发行版,overlay2和覆盖也支持。 使用Linux 4.18开始,我们也将能够实现FUSE snapshotters。

(参见Graphdriver plugins,其中泊坞图形驱动程序的插件使管理员使用一个外部输入/输出进程外图形驱动器,用于与泊坞发动机一起使用。 这是为了使用内置存储驱动程序,如AUFS /重叠/ devicemapper / BTRFS的替代方案。)

  • cgroup中(包括泊坞窗顶部)和AppArmor的是目前禁用。 在未来,当主机上配置代理权限的cgroup将是可供选购。
  • 检查点目前还不支持。
  • 在无根/ rootful dockerd运行无根dockerd也是可以的,但不是充分的测试。

文档现在是docs/rootless.md

请注意以下要求:

  • newuidmapnewgidmap需要在主机上安装。 这些命令由uidmap包上大多数发行版提供。
  • /etc/subuid/etc/subgid应该包含>= 65536的子标识。 例如penguin:231072:65536

那是:

$ id -u
1001
$ whoami
penguin
$ grep ^$(whoami): /etc/subuid
penguin:231072:65536
$ grep ^$(whoami): /etc/subgid
penguin:231072:65536

任一slirp4netns(V0.3 +)或VPNKit需要安装。 slirp4netns优选用于最佳性能。

你将不得不修改你的脚本:

你需要去运行dockerd-rootless.shdockerd

$ dockerd-rootless.sh --experimental"

更新2019年5月:Tõnis Tiigi做探索与“Experimenting with Rootless Docker”这个无根选项:

用户名称空间映射的范围内的用户ID-S,使得根用户在内部命名空间映射到父命名空间非特权范围。 在用户命名新的处理也拿起一套完整的加工能力。

无根模式以类似的方式工作,除了我们首先创建一个用户的命名空间,并且已经启动守护程序重新映射的命名空间。守护进程和容器都将使用相同的用户命名空间是主机不同。

https://cdn-images-1.medium.com/max/1636/1*SfAokC2YQ-f04Wc2WhSRCw.png

虽然Linux可以在不扩大权限创建用户命名空间这些命名空间只映射单个用户,因此不会与目前许多现有容器的工作。 为了克服这种情况,无根模式对uidmap软件包,可以为我们做用户重新映射的依赖。在uidmap包使用setuid位(或文件的能力),因此总是二进制内部作为root运行。

为了使不同的命名空间,并与uidmap整合的开展简单彰创建了一个名为rootlesskit项目。 Rootlesskit还负责建立网络的无根容器。默认情况下,无根泊坞窗采用联网基于moby/vpnkit项目,还用于在泊坞桌面产品网络。 此外,用户还可以安装slirp4netns并使用它。

再次:

注意事项:

的东西,不要在无根模式下工作的一些例子是cgroups资源控制,apparmor安全配置文件,检查点/恢复,覆盖网络等。 从暴露容器口目前需要手动socat助手进程。

只有Ubuntu的发行版基于支持无根模式覆盖文件系统。 对于其他系统,无根模式使用VFS存储驱动程序在许多文件系统不理想,不推荐用于生产工作负载。

© www.soinside.com 2019 - 2024. All rights reserved.