【问题标题】:Is there any way to run "pkexec" from a docker container?有没有办法从 docker 容器运行“pkexec”?
【发布时间】:2019-11-06 05:05:07
【问题描述】:

我正在尝试使用旧版本的 Firefox 和旧版本的 Java 设置 Docker 映像(我的 Dockerfile 可在此处获得,抱歉法语自述文件:https://framagit.org/Gwendal/firefox-icedtea-docker)以运行旧 Java 小程序来启动虚拟专用网。我的图像确实有效,并且成功地允许我在 Firefox 中启动 Java 小程序。

不幸的是,上述小程序随后尝试在容器中运行以下命令(我只是从命令中删除了 --config 部分,因为它在这里无关紧要):

INFO: launching '/usr/bin/pkexec sh -c /usr/sbin/openvpn --config ...'

然后小程序以错误方式静默退出。在调查时,我尝试使用 pkexec 使用相同的 Docker 映像运行命令,它给了我这个结果:

$ sudo docker-compose run firefox pkexec /firefox/firefox-sdk/bin/firefox-bin -new-instance
**
ERROR:pkexec.c:719:main: assertion failed: (polkit_unix_process_get_start_time (POLKIT_UNIX_PROCESS (subject)) > 0)

但是我根本不懂 polkit,也无法理解这个错误。


编辑:重现问题的更简单方法是使用此 Dockerfile:

FROM ubuntu:16.04

RUN apt-get update \
    && apt-get install -y policykit-1

然后运行:

$ sudo docker build -t pkexec-test .
$ sudo docker run pkexec-test pkexec echo Hello

这又导致:

ERROR:pkexec.c:719:main: assertion failed: (polkit_unix_process_get_start_time (POLKIT_UNIX_PROCESS (subject)) > 0)

我是否应该得出结论,pkexec 不能在 docker 容器中工作?或者有什么方法可以使这个命令起作用?

旁注:我无法控制我尝试运行的 Java 小程序,这是一个可怕且非常过时的专有黑匣子,我应该在工作中使用它,我有无法访问源代码,我必须按原样使用。

【问题讨论】:

    标签: docker polkit


    【解决方案1】:

    我已经解决了我自己的问题,方法是在 docker 映像中将 pkexec 替换为 sudo,并允许无密码 sudo。

    给定一个 ubuntu docker 映像,其中创建了一个名为 developer 的用户并使用 USER 语句进行了配置,添加以下行:

    # Install sudo and make 'developer' a passwordless sudoer
    RUN apt-get install sudo
    ADD ./developersudo /etc/sudoers.d/developersudo
    
    # Replacing pkexec by sudo
    RUN rm /usr/bin/pkexec
    RUN ln -s /usr/bin/sudo /usr/bin/pkexec
    

    文件developersudo包含:

    developer ALL=(ALL) NOPASSWD:ALL
    

    这将替换在容器中运行的进程中对pkexec 的任何调用,通过在没有任何密码提示的情况下调用sudo,效果很好。

    【讨论】:

      猜你喜欢
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多