Проблема с TigerVNC для Yocto-Based Linux с SELinux: ошибки в контексте PAM и SELinux

Вопрос или проблема

Я использую TigerVNC версии 1.14.1 на системе Linux на основе Yocto с включенным SELinux. Проблема, с которой я сталкиваюсь, связана с запуском службы VNC сервера при наличии политик SELinux. Ниже приведена конфигурация и шаги, которые я выполнил:

  1. Конфигурация пользователя: я настроил файл vncserver.conf следующим образом:
    1:user1

  2. Политика SELinux: я использую модуль политики SELinux по умолчанию vncsession, который я успешно скомпилировал. Поскольку я не использую GNOME, я удалил строки, связанные с GNOME, из файла .te.

  3. Конфигурация Systemd и PAM: я использую файл службы tigervnc по умолчанию и конфигурационный файл PAM, предоставленные пакетом TigerVNC. Эти файлы изначально не изменялись.

  4. Ошибка: когда я запускаю службу 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.

  1. Временное решение: когда я закомментировал строку pam_systemd.so в /etc/pam.d/tigervnc, ошибка больше не наблюдается, и служба запускается без проблем.

  2. Дополнительная информация:

    • 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.

Пример

Ваше текущее конфигурационное состояние выглядит следующим образом:

  1. Конфигурация пользователя: vncserver.conf определен с 1:user1.
  2. Политика SELinux: используется стандартный модуль политики vncsession.
  3. Конфигурация PAM и systemd: используются дефолтные файлы из пакета TigerVNC.

На основании предоставленных логов видно, что проблема специфична для взаимодействия SELinux, PAM и TigerVNC:

pam_selinux(tigervnc:session): Unable to get valid context for user1
pam_selinux(tigervnc:session): conversation failed

Применение

  1. Проверка контекста SELinux:
    Убедитесь, что SELinux правильно сопоставляет пользовательские контексты. Вы можете проверить текущий контекст пользователя user1 с помощью команды:

    id -Z user1

    Если контекст не соответствует user_u, вам необходимо скорректировать контекст используя команду semanage или chcon для изменения контекста.

  2. Анализ политики SELinux:
    Когда вы создаете и компилируете модули политики SELinux, убедитесь, что они не нарушают связи между пользовательскими и системными контекстами. Проверьте ваш файл политики на правильность и полноту после того, как убрали GNOME-связанные элементы.

  3. Контроль PAM конфигурации:
    В PAM конфигурации исследованиййте необходимость использования pam_selinux.so. Если его присутствие вызывает ошибки, это может означать, что текущая конфигурация не совместима с автоматически создаваемыми контекстами. Попробуйте временно прокомментировать строки или обратиться к специфичным учетным данным:

    # -session optional pam_systemd.so
    session required pam_selinux.so open
  4. Настройка SELinux для TigerVNC:
    Изменение настроек контекста в systemd файле службы может быть необходимым. В частности, убедитесь, что SELinuxContext option в вашем systemd файле правильно устанавливает требуемый контекст для запуска TigerVNC.

  5. Логи и отладка:
    Используйте утилиты, такие как audit2why и audit2allow, которые могут предоставить более детальное объяснение того, какая часть политики SELinux вызвала отказ в доступе. Это может привести к созданию исключений или корректировке политики.

  6. Создание и проверка нового модуля SELinux:
    Если ни одно из решений не помогло, попытайтесь создать новый модуль SELinux для TigerVNC с помощью audit логов, что обеспечит только требуемые привилегии.

Использование данных шагов предоставляет систематический подход к решению проблемы с TigerVNC, PAM и SELinux в Yocto-based системах, что позволяет устранить неполадки и обеспечить безопасное функционирование VNC сервера без ошибок.

Оцените материал
Добавить комментарий

Капча загружается...