Данная статья применима к:
- 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=<имя_пользователя>
Для устранения проблемы:
Временно запретить вход пользователя:
sudo passwd -l "$user"Принудительно прекратить все пользовательские сессии:
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 passwd -u "$user"
Общий сценарий
Сценарий, выполняющий указанные выше действия, приведен ниже. Сценарий использует два аргумента: имя пользователя и название варианта действий: old с сохранением идентификаторов, new - c обновлением. Опциональные действия по проверке файловых объектов вне домашнего каталога пользователя в сценарий не включены. Текст сценария: