Данная статья применима к:
- 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 и имеют следующий вид:
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).
Решение проблемы
Далее предполагается, что:
- Настройки выполняются в сессии администратора с правами суперпользователя (администратора с высоким уровнем целостности при работе с включенным МКЦ) или в сценарии, выполняющемся от имени такого администратора;
Для удобства имя пользователя, для которого выполняются настройки сохранено в переменной окружения user:
user=<имя_пользователя>
Для устранения проблемы:
Временно запретить вход пользователя:
sudo passwd -l "$user"Принудительно прекратить все пользовательские сессии:
sudo loginctl terminate-user "$user"- Установить старые и новые идентификаторы пользователя. Для дальнейшего использования идентификаторы сохраняются в переменных окружения:
Новый UID:
new_UID=`sudo -u "$user" id -u`Новый GID:
new_GID=`sudo -u "$user" id -g`Ранее применявшийся UID:
old_UID=$(ls -lnd `getent passwd "$user" | cut -d: -f6` | cut -d" " -f 3)Ранее применявшийся GID
old_GID=$(ls -lnd `getent passwd "$user" | cut -d: -f6` | cut -d" " -f 4)
- Далее возможны два варианта: с сохранением ранее применявшихся идентификаторов или с назначением новых:
- Вариант 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 {} \;
Опционально проконтролировать использование старых и новых атрибутов в различных конфигурационных файлах. Например:
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и при необходимости произвести замены идентификаторов в соответствии с выбранным ранее вариантом;Разрешить вход пользователя:
sudo passwd -u "$user"
Общий сценарий
Сценарий, выполняющий указанные выше действия приведен ниже. Сценарий использует два аргумента: имя пользователя и название варианта действий: old с сохранением идентификаторов, new - c обновлением.
Текст сценария: