Эта запись опубликована
24.08.2026 в 18:19. Рубрики: безопасность, пингвиньи забавы. Вы можете следить
за ответами к этой записи через RSS 2.0.
Вы можете оставить отзыв или трекбек со своего сайта.


Мессенджер MAX, подумаем еще раз
Поскольку в мессенджере на данный момент так и не реализовано закрытие отдельных сессий (вопрос «почему» даже не задаю — уверен, что «а патамучта») и в настройках мессенджера можно удалить только все, через некоторое время использования ранее описанной схемы работы список сессий становится длинной бородой. Да и сама по себе авторизация при каждом запуске слегка начинает надоедать к двадцатому разу.
Так что вместо заглушки все же пусть будет полноценное и штатное решение. Но без проброса ключевого хранилища с хоста, а наоборот: с хранением файла ключей контейнера на хосте.
Изменим Dockerfile
#cat Dockerfile
FROM ubuntu:26.04
# 1. Установка базовых инструментов, компилятора и настройка локали UTF-8
RUN apt-get update && apt-get install -y locales curl gpg fontconfig fonts-dejavu \
&& locale-gen ru_RU.UTF-8 \
&& update-locale LANG=ru_RU.UTF-8 LC_ALL=ru_RU.UTF-8
ENV LANG=ru_RU.UTF-8
ENV LC_ALL=ru_RU.UTF-8
# 2. Подключение официального репозитория мессенджера MAX
RUN mkdir -p /etc/apt/keyrings \
&& curl -fsSL https://download.max.ru/linux/deb/public.asc | gpg --dearmor -o /etc/apt/keyrings/max.gpg \
&& echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/max.gpg] https://download.max.ru/linux/deb stable main" | tee /etc/apt/sources.list.d/max.list
# 3. Установка мессенджера, графического/аудио стека и keyring
# Да, в том числе libxaw7/libxmuu1, на полном серьезе. Они используются приложением. Это интересно сочетается с заглавной проблемой libc.
RUN apt-get update && apt-get install -y max \
libglx0 libgl1 libgbm1 libegl1 \
libxrender1 libxtst6 libxi6 libxcomposite1 libxdamage1 libxrandr2 libxcursor1 libxkbfile1 \
libnspr4 libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 \
libxkbcommon0 libxkbcommon-x11-0 \
libxcb-cursor0 libxcb-util1 libxcb-shape0 libxcb-res0 \
libasound2t64 libxv1 libice6 libsm6 libfontenc1 libxaw7 \
libxinerama1 libxmu6 libxpm4 libxt6 libxmuu1 libxss1 libxft2 \
gnome-keyring dbus-x11 \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
# 4. Интеграция шрифтов DejaVu для Qt6 и настройка групп
# Копирование шрифтов нужно из-за наблюдаемой странности max-service (дочернего процесса для звонков)
RUN mkdir -p /usr/share/max/lib64/fonts \
&& cp /usr/share/fonts/truetype/dejavu/DejaVuSans*.ttf /usr/share/max/lib64/fonts/ \
&& chmod 1777 /tmp \
&& usermod -aG audio ubuntu
# 5. Делаем /ubuntu жесткой ссылкой на /home/ubuntu. Всплыла некая частная особенность старта max-service (дочернего процесса для звонков).
RUN ln -s /home/ubuntu /ubuntu
# 6. Переключение на пользователя ubuntu с его родным HOME
USER ubuntu
WORKDIR /home/ubuntu
# Автоматический запуск изолированной сессии D-Bus и разблокировка gnome-keyring при старте
ENTRYPOINT ["dbus-run-session", "--"]
CMD ["max"]
Создадим новый образ
docker build -t max-messenger:secure-dbus .
Интерфейс gnome-keyring сохраняет зашифрованные файлы ключей по локальному пути в контейнере /home/ubuntu/.local/share/keyrings/.
Значит, вынесем эту папку на хост. Например, в подпапку уже вынесенного профиля.
Создадим ее на хосте:
mkdir -p $HOME/.max_messenger_profile/.keyrings
Запустим контейнер из нового образа, указав все ранее актуальные и новые параметры. Также, к примеру, можно еще немного изменить заголовок итогового окна, передав hostname.
docker run -it --rm \
--name max-messenger-stable \
--hostname="Messenger" \
-e DISPLAY=$DISPLAY \
-e QT_QPA_PLATFORM=xcb \
-e TMPDIR=/home/ubuntu/.local/share/ONEME/.tmp \
-e TMP=/home/ubuntu/.local/share/ONEME/.tmp \
-e TEMP=/home/ubuntu/.local/share/ONEME/.tmp \
-v /tmp/.X11-unix:/tmp/.X11-unix:ro \
-v /run/user/$(id -u)/pulse/native:/tmp/pulse-socket \
-e PULSE_SERVER=unix:/tmp/pulse-socket \
-v $HOME/.max_messenger_profile:/ubuntu/.local/share/ONEME \
-v $HOME/max_downloads:/ubuntu/Downloads \
-v $HOME/.max_messenger_profile/.keyrings:/home/ubuntu/.local/share/keyrings \
--ipc=host \
--device /dev/dri \
--device /dev/video0 \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-e ELECTRON_DISABLE_SANDBOX=1 \
max-messenger:secure-dbus
Напоминаю: ONEME это оригинальное и реальное имя папки, создаваемой и используемой самим мессенджером.
При первом старте появится всплывающее окно, в котором можно не указывать пароль открытия кейринга и принять хранение без оного.
Тогда при каждом следующем старте контейнера мессенджер будет успешно открываться без любых вопросов.
По идее, можно совсем откопать стюардессу и добиться получения всплывающих уведомлений на хостовой системе.
В целом, достаточно добавить ключи запуска.
-v /run/user/$(id -u)/bus:/run/user/1000/bus \
-e DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus \
Но тогда и keyring может и будет использоваться хостовый, не нужно было бы городить предыдущий огород.
И с этого можно было начать. Разве что сейчас вспомнить про отговорки с безопасносностью, но они изначально не были актуальны.
Совсем другой вопрос, что есть опыт и чужие раздражающие привычки. Отсутствие уведомлений даже удобно. Входящий звонок при этом будет своевременно опознан по звуку. А пересылки лесенок потока сознания по двадцать сообщений подряд более беспокоить не будут.
Ваш отзыв

