如何将所有环境变量从root用户复制到另一个特定用户

时间:2016-09-09 01:14:07

标签: security docker environment-variables

在我的docker容器中,我从entrypoint.sh以类似于此的特定用户身份运行命令:

sudo -u appuser "$@"

这样可以正常工作,但是,它不会设置在运行容器时使用--link选项创建的任何环境变量。

问题

是否可以将root用户存在的所有环境变量设置为其他特定用户(在此示例中为appuser

注意:本次讨论的相关问题。这就是我不能只使用USER命令How to give non-root user in Docker container access to a volume mounted on the host

的原因

1 个答案:

答案 0 :(得分:2)

sudo命令,因为它被设计为权限提升工具,故意在切换到新用户ID之前清理环境。如果你看一下sudo手册页,你会发现:

 -E, --preserve-env
             Indicates to the security policy that the user wishes to preserve their existing
             environment variables.  The security policy may return an error if the user does not
             have permission to preserve the environment.

因此,只需使用sudo -u appuser somecommand而不是sudo -E -u appuser somecommand

runuser命令由最新版本的Ubuntu中的util-linux包提供,默认情况下不执行任何环境初始化。例如:

$ docker pull ubuntu
$ docker run -it --rm ubuntu /bin/bash
root@ded49ffde72e:/# runuser --help

Usage:
 runuser [options] -u <user> <command>
 runuser [options] [-] [<user> [<argument>...]]
[...]

这适用于Ubuntu Xenial(runuser命令似乎也可以在ubuntu:vivid上使用,但不在<{1}}下

所以你的选择是:

  • 使用ubuntu:trusty
  • 使用更新的Ubuntu映像