5. Реализация кэширования NSS для доменной машины

LDAP - относительно простой протокол, использующий TCP/IP и позволяющий производить операции аутентификации (bind), поиска (search) и сравнения (compare), а также операции добавления, изменения или удаления записей. Обычно LDAP-сервер принимает входящие соединения на порт 389 по протоколам TCP или UDP.

NetworkManager - программа для управления сетевыми соединениями в Linux. Для использования NetworkManager в графическом интерфейсе, существует программа nm-applet, которая соответствует стандарту Freedesktop.org System Tray Protocol, включая KDE, XFCE, GNOME. NetworkManager использует D-Bus, udev и PolicyKit. Компоненты взаимодействуют через D-Bus.

D-Bus - система межпроцессного взаимодействия, которая позволяет приложениям в операционной системе общаться друг с другом.

PolicyKit - набор инструментов разработки для контроля системных привилегий в Unix-подобных операционных системах. Он даёт возможность непривилегированным процессам общаться с привилегированными.

Для авторизации сетевых пользователей Calculate Linux Desktop использует LDAP сервер. Во время работы доменного пользователя при продолжительном отключении сети могут возникнуть следующие проблемы:
  • недоступен LDAP;
  • нет возможности авторизовать пользователя (авторизация через LDAP);
  • если сеанс пользователя заблокирован - его не разблокировать;
  • нет возможности восстановить сетевое соединение (действие с сетью требуют информацию о пользователе).

Эти же сложности могут возникнуть и при выходе компьютера из спящего режима.

Использование Nscd

Получение информации о пользователях осуществляется при помощи диспетчера службы имён NSS (Name Service Switch). Порядок и источники данных описываются в файле /etc/nsswitch.conf. В случае введенной в домен машины источника данных два: files (/etc/passwd, /etc/group) и LDAP. Для того, чтобы NSS информация из LDAP не пропадала при отключении сети, в Calculate Linux Desktop начиная с версии 13.11 работает демон Nscd.

Nscd - это служба, которая кэширует запросы службы имён. Она содержит два кэша на каждую категорию: попаданий (найденный элемент) и промахов (ненайденные элемены). Каждый кэш имеет для своих данных отдельный TTL (время жизни). Эти параметры настраиваются в /etc/nscd.conf. Для того, чтобы программа использовала кэширование, nscd должен быть запущен перед ней. Таким образом NSS кэш может решить проблему отключения сети, благодаря тому, что информация о пользователе будет получаться из кэша, пока он не устареет, даже если нет соединения с LDAP.

Ранний запуск nscd порождает проблему связанную с аутентификацией доменного пользователя до поднятия сети. В pam.d/system-auth используется модуль pam_client для ожидания соединения с LDAP если введен пользователь и пароль до поднятия сети. Проблема возникает из-за кэша промахов: менеджер входа в сеанс (lightdm) успевает до вызова pam_client запросить от NSS информацию об аутентифицируемом пользователе, а так как соединения с LDAP на этот момент нет, то пользователь попадает в кэш промахов и в течении времени жизни этого кэша программы будут получать результат о том, что пользователь не существует, даже если LDAP уже доступен. Для решения этой проблемы, при запуске демона кэш промахов отключён. Включается он уже в конце загрузки системы службой "local". Для реализации этого, в системе содержатся два файла настроек /etc/nscd.conf (без кэша), /etc/nscd-cache.conf (с кэшем).

Для того, чтобы можно было переводить компьютер в спящий режим на несколько часов/дней и при этом не терять закэшированную информацию после пробуждения, TTL кэша попаданий установлено на 7 дней. В этом случае возникает проблема актуальности записей в кэше: пользователь может быть удален из LDAP, но при этом он будет присутствовать в кэше. Для решения этой проблемы кэш обновляется при входе доменного пользователя в сеанс, при пробуждении компьютера из спящего/ждущего режима, а также по cron-у раз в три часа (интервал в часах может быть изменен при помощи переменной client.cl_client_nscd_cache), при условии, что LDAP сервер доступен. Для принудительно вызова обновления кэша можно использовать команду nscd-refresh.

Назначение pam_client

Pam_client предназначен для ожидания LDAP сервера перед аутентификацией и выполняет следующие действия:
  1. на основании файлов /etc/passwd и /var/lib/calculate/calculate-client/cache/passwd определят является ли аутентифицируемый пользователь локальным;
  2. если пользователь не локальный, модуль ждет запуск службы client;
  3. после этого проверяет доступность LDAP сервера.

Определение локального пользователя необходимо для того, чтобы не выполнять ожидание если введен неверный пароль для локального пользователя. Ожидание службы client необходимо, для того, чтобы система была загружена и настроена на работу с доменом, перед тем как доменный пользователь будет авторизован и войдет в сессию. Ожидание LDAP сервера используется при разблокировании сеанса пользователя, после выхода из спящего режима, пока сеть не поднялась.

Спасибо!