Есть ли способ запустить "pkexec" из док-контейнера? - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь настроить образ Docker (мой Dockerfile доступен здесь, извините за французский README: https://framagit.org/Gwendal/firefox-icedtea-docker) со старой версией Firefox и старой версией Java для запуска старого Java-апплета взапустить VPN. Мой образ работает и успешно позволяет мне запускать апплет Java в Firefox.

К сожалению, указанный апплет пытается выполнить следующую команду в контейнере (я просто удалил --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?Или есть какой-нибудь способ заставить эту команду работать?

Sidenote : У меня нет никакого контроля над Java-апплетом, который я пытаюсь запустить, он ужасен и очень устарелпроприетарный черный ящик, который я должен использовать на работе, для которого у меня нет доступа к исходному коду, и который я должен использовать как есть.

1 Ответ

0 голосов
/ 26 июня 2019

Я решил свою проблему, заменив pkexec на sudo в образе докера и разрешив sudo без пароля.

Учитывая образ докера ubuntu, где был создан пользователь с именем 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 без запроса пароля, что прекрасно работает.

...