Вопрос или проблема
Я использую TigerVNC версии 1.14.1 на системе Linux на основе Yocto с включенным SELinux. Проблема, с которой я сталкиваюсь, связана с запуском службы VNC сервера при наличии политик SELinux. Ниже приведена конфигурация и шаги, которые я выполнил:
-
Конфигурация пользователя: я настроил файл vncserver.conf следующим образом:
1:user1
-
Политика SELinux: я использую модуль политики SELinux по умолчанию vncsession, который я успешно скомпилировал. Поскольку я не использую GNOME, я удалил строки, связанные с GNOME, из файла .te.
-
Конфигурация Systemd и PAM: я использую файл службы tigervnc по умолчанию и конфигурационный файл PAM, предоставленные пакетом TigerVNC. Эти файлы изначально не изменялись.
-
Ошибка: когда я запускаю службу VNC сервера с помощью systemctl start vncserver@:1, я наблюдаю следующие ошибки в журналах:
root@Test:/etc/pam.d# systemctl status vncserver@:1 -l
● vncserver@:1.service - Remote desktop service (VNC)
Loaded: loaded (/usr/lib/systemd/system/[email protected]; enabled; vendor preset: disabled)
Active: active (running) since Fri 2025-01-17 16:53:37 UTC; 3s ago
Process: 48507 ExecStart=/usr/libexec/vncsession-start :1 (code=exited, status=0/SUCCESS)
Main PID: 48514 (vncsession)
Tasks: 0 (limit: 4637)
Memory: 468.0K
CGroup: /system.slice/system-vncserver.slice/vncserver@:1.service
‣ 48514 /usr/sbin/vncsession user1 :1
Jan 17 16:53:37 Test systemd[1]: Starting Remote desktop service (VNC)...
Jan 17 16:53:37 Test vncsession[48514]: pam_selinux(tigervnc:session): Unable to get valid context for user1
Jan 17 16:53:37 Test vncsession[48514]: pam_selinux(tigervnc:session): conversation failed
Jan 17 16:53:37 Test vncsession[48514]: pam_unix(tigervnc:session): session opened for user user1(uid=1001) by (uid=0)
Jan 17 16:53:37 Test systemd[1]: Started Remote desktop service (VNC).
Критические строки в журнале:
pam_selinux(tigervnc:session): Unable to get valid context for user1
pam_selinux(tigervnc:session): conversation failed
Несмотря на эти ошибки, служба VNC сервера запускается, но, похоже, есть проблема с назначением контекста SELinux во время процесса аутентификации PAM.
-
Временное решение: когда я закомментировал строку pam_systemd.so в /etc/pam.d/tigervnc, ошибка больше не наблюдается, и служба запускается без проблем.
-
Дополнительная информация:
- user1 сопоставлен с контекстом SELinux user_u.
- Проблема, кажется, связана с взаимодействием SELinux, PAM и TigerVNC во время процесса инициализации сессии.
Ниже приведен файл tigervnc.pam по умолчанию,
#%PAM-1.0
# THIS IS AN EXAMPLE CONFIGURATION
# MODIFY AS NEEDED FOR YOUR DISTRIBUTION
# pam_selinux.so close should be the first session rule
-session required pam_selinux.so close
session required pam_loginuid.so
-session required pam_selinux.so open
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session required pam_limits.so
-session optional pam_systemd.so
session required pam_unix.so
-session optional pam_reauthorize.so prepare
Файл службы Systemd:
[Unit]
Description=Remote desktop service (VNC)
After=network.target systemd-user-sessions.service
[Service]
Type=forking
ExecStart=@CMAKE_INSTALL_FULL_LIBEXECDIR@/vncsession-start %i
PIDFile=/run/vncsession-%i.pid
SELinuxContext=system_u:system_r:vnc_session_t:s0
[Install]
WantedBy=multi-user.target
Могу ли я упускать какие-либо шаги в этом процессе? Буду признателен за любую помощь.
Ответ или решение
Вопрос об обнаружении ошибок PAM и контекста SELinux при использовании TigerVNC на системе на базе Yocto-Linux с включенной политикой SELinux требует от нас точного и детального подхода для его решения. Работая с сочетанием SELinux и PAM в контексте TigerVNC, можно столкнуться с проблемами, связанными с контекстами безопасности и аутентификацией. Давайте рассмотрим шаги, которые могут помочь устранить эти ошибки.
Теория
На системах Linux, использующих SELinux, безопасность и управление правами доступа основаны на комбинировании определенных контекстов безопасности с пользователями и процессами. Модуль PAM (Pluggable Authentication Modules) обеспечивает динамическую аутентификацию для приложений и служб. В контексте ваш вопроса, проблема заключается в том, что PAM не может определить "валидный контекст" SELinux для пользователя user1
при запуске службы VNC, что приводит к сбою в процессе аутентификации, о чем свидетельствует сообщение об ошибке pam_selinux(tigervnc:session): Unable to get valid context for user1
.
Пример
Ваше текущее конфигурационное состояние выглядит следующим образом:
- Конфигурация пользователя: vncserver.conf определен с
1:user1
. - Политика SELinux: используется стандартный модуль политики
vncsession
. - Конфигурация PAM и systemd: используются дефолтные файлы из пакета TigerVNC.
На основании предоставленных логов видно, что проблема специфична для взаимодействия SELinux, PAM и TigerVNC:
pam_selinux(tigervnc:session): Unable to get valid context for user1
pam_selinux(tigervnc:session): conversation failed
Применение
-
Проверка контекста SELinux:
Убедитесь, что SELinux правильно сопоставляет пользовательские контексты. Вы можете проверить текущий контекст пользователяuser1
с помощью команды:id -Z user1
Если контекст не соответствует
user_u
, вам необходимо скорректировать контекст используя командуsemanage
илиchcon
для изменения контекста. -
Анализ политики SELinux:
Когда вы создаете и компилируете модули политики SELinux, убедитесь, что они не нарушают связи между пользовательскими и системными контекстами. Проверьте ваш файл политики на правильность и полноту после того, как убрали GNOME-связанные элементы. -
Контроль PAM конфигурации:
В PAM конфигурации исследованиййте необходимость использованияpam_selinux.so
. Если его присутствие вызывает ошибки, это может означать, что текущая конфигурация не совместима с автоматически создаваемыми контекстами. Попробуйте временно прокомментировать строки или обратиться к специфичным учетным данным:# -session optional pam_systemd.so session required pam_selinux.so open
-
Настройка SELinux для TigerVNC:
Изменение настроек контекста в systemd файле службы может быть необходимым. В частности, убедитесь, что SELinuxContext option в вашем systemd файле правильно устанавливает требуемый контекст для запуска TigerVNC. -
Логи и отладка:
Используйте утилиты, такие какaudit2why
иaudit2allow
, которые могут предоставить более детальное объяснение того, какая часть политики SELinux вызвала отказ в доступе. Это может привести к созданию исключений или корректировке политики. -
Создание и проверка нового модуля SELinux:
Если ни одно из решений не помогло, попытайтесь создать новый модуль SELinux для TigerVNC с помощью audit логов, что обеспечит только требуемые привилегии.
Использование данных шагов предоставляет систематический подход к решению проблемы с TigerVNC, PAM и SELinux в Yocto-based системах, что позволяет устранить неполадки и обеспечить безопасное функционирование VNC сервера без ошибок.