Данная статья применима к:
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) с установленным обновлением БЮЛЛЕТЕНЬ № 2022-0819SE17 (оперативное обновление 1.7.2) или последующими оперативными обновлениями
Описание проблемы
При последовательном выполнении следующих условий:
- Компьютер под управлением Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) без установленных оперативных обновлений или с установленным оперативным обновлением БЮЛЛЕТЕНЬ № 2021-1126SE17 (оперативное обновление 1.7.1) введен в домен Windows AD с использованием инструмента astra-winbind (см. Быстрый ввод Astra Linux в AD Windows);
- После ввода компьютера в домен выполнялись входы доменных пользователей (соответственно, создавались домашние каталоги этих пользователей);
- После создания домашних каталогов доменных пользователей установлено обновление БЮЛЛЕТЕНЬ № 2022-0819SE17 (оперативное обновление 1.7.2);
нарушается вход доменных пользователей в консольную и графическую сессию. Проблема вызвана устранением неточностей в работе алгоритма сопоставления идентификаторов пользователей/групп Astra Linux (UID/GID) и доменных пользователей/групп Windows (SID). Параметры сопоставления по умолчанию задаются в конфигурационном файле службы samba /etc/samba/smb.conf в секции [global] и имеют следующий вид:
idmap config * : range = 3000-7999 idmap config * : backend = tdb idmap config <имя_рабочей_группы_или_домена> : range = 10000-299999 idmap config <имя_рабочей_группы_или_домена> : backend = rid
Для сопоставления идентификаторов исходно используется первый диапазон идентификаторов (3000-7999) а после установки обновления 1.7.2 используется второй диапазон (10000-299999).
Устранение проблемы
Далее предполагается, что:
- Обновление БЮЛЛЕТЕНЬ № 2022-0819SE17 (оперативное обновление 1.7.2) установлено;
- Настройки выполняются в сессии администратора с правами суперпользователя (администратора с высоким уровнем целостности при работе с включенным МКЦ) или в сценарии, выполняющемся от имени такого администратора;
Для удобства имя пользователя, для которого выполняются настройки сохранено в переменной окружения user:
user=<имя_пользователя>
Для устранения проблемы:
Желательно временно запретить вход пользователей, для чего создать файл /run/nologin (или /etc/nologin):
После создания любого из файлов /run/nologin или /etc/nologin вход будет запрещен всем пользователям, включая администраторов. Запрет будет действовать до удаления файлов. При перезагрузке файлы будут удалены автоматически. Текущая сессия после создания файла будет продолжаться, но, если выйти из сессии не удалив файл, то для следующего входа необходимо будет перезагрузить компьютер.Команда для создания файла:
sudo touch /run/nologinПринудительно прекратить сессии пользователя:
sudo loginctl terminate-user "$user"- Получить старые и новые идентификаторы пользователя. Для дальнейшего использования идентификаторы сохраняются в переменных окружения:
Новый UID:
new_UID=`getent passwd $user | cut -d: -f3`Новый GID:
new_GID=`getent passwd $user | cut -d: -f4`Ранее применявшийся UID:
old_UID=$(sudo ls -lnd `getent passwd "$user" | cut -d: -f6`/Desktop | cut -d" " -f 3)Ранее применявшийся GID
old_GID=$(sudo ls -lnd `getent passwd "$user" | cut -d: -f6`/Desktop | cut -d" " -f 4)
Опционально: проверить наличие файлов, принадлежащих пользователю и не находящихся в его домашнем каталоге:
sudo find / -type f,d ! -path "/home/$user/*" ! -path "/proc/*" ! -path "/sys/*" \( -user "$user" -or -group "$user" \) -exec stat {} \;- Далее возможны два варианта: с сохранением ранее применявшихся идентификаторов или с назначением новых:
- Вариант 1. Для сохранения ранее применявшихся идентификаторов и ранее использовавшегося алгоритма установления соответствия:
Заменить в атрибутах файловых объектов новые идентификаторы старыми
sudo find / -type f,d ! -path "/proc/*" -group $new_GID -exec chown :$old_GID {} \;
sudo find / -type f,d ! -path "/proc/*" -user $new_UID -exec chown $old_UID {} \;Из конфигурационного файла службы samba /etc/samba/smb.conf удалить строки с новым диапазоном идентификаторов. Это строки вида:
idmap config <имя_рабочей_группы_или_домена> : range = 10000-299999 idmap config <имя_рабочей_группы_или_домена> : backend = rid
Для удаления можно использовать команду:
sudo sed -i "/^\s*idmap\s\+config\s\+[^*]\+/d" /etc/samba/smb.confПерезапустить службу samba и связанные с ней службы:
sudo systemctl restart smbd nmbd winbind
Вариант 2. Для применения новых идентификаторов:
Заменить в атрибутах файловых объектов старые идентификаторы на новые:
sudo find / -type f,d ! -path "/proc/*" -group $old_GID -exec chown :$new_GID {} \;Внесение изменений в конфигурацию samba при этом не требуется;
sudo find / -type f,d ! -path "/proc/*" -user $old_UID -exec chown $new_UID {} \;
- Вариант 1. Для сохранения ранее применявшихся идентификаторов и ранее использовавшегося алгоритма установления соответствия:
Опционально проконтролировать использование старых и новых атрибутов в различных конфигурационных файлах и при необходимости произвести замены идентификаторов в соответствии с выбранным ранее вариантом. Например:
Использование старых идентификаторов в часто применяемых конфигурационных файлах:
sudo egrep -r "($new_GID|$new_UID|$old_GID|$old_UID)" /etc/parsec /etc/fstab /etc/security/pam_mount.conf.xml /etc/samba/smb.confИспользование старых идентификаторов в ACL (см. Списки управления доступом к файловым объектам (ACL) в Astra Linux):
sudo getfacl -Rsnt / | egrep "^(# file|(USER|user|GROUP|group)\s+($new_GID|$new_UID|$old_GID|$old_UID))" | awk '/# file/{file=$0;next} { print $0,file }'ACL автоматически присваиваются разделяемым устройствам (приводы оптических дисков, клавиатура, джойстик, мышь мультимедийные устройства и пр., подробнее см. Разделение прав доступа к устройствам CD/DVD). Наличие таких ACL со старыми идентификаторами не критично для работы пользователей.
Если был запрещен вход пользователей, то разрешить вход пользователей:
sudo rm /run/nologin
Общий сценарий
Сценарий, выполняющий указанные выше действия, приведен ниже. Сценарий использует два аргумента: имя пользователя и название варианта действий: old с сохранением идентификаторов, new - c обновлением. Опциональные действия по проверке файловых объектов вне домашнего каталога пользователя в сценарий не включены. Текст сценария: