У одного из пользователей OwnCloud с аутентификацией через AD начались какие-то странные проблемы после смены имени в Active Directory. Добиться подробностей не удалось, после перезагрузки всё заработало.
Интернет подсказал, что иногда кому-то может потребоваться сменить имя пользователя в системе. При этом официально смена имени пользователя (логина) в OwnCloud не предусмотрена. Вместо этого предлагают:
- Создать нового временного локального пользователя.
- Передать новому пользователю все файлы старого пользователя.
- Удалить старого пользователя в OwnCloud.
- Залогиниться старым пользователем заново, при этом создастся учётная запись уже с новым именем из AD.
- Передать файлы обратно и удалить временного пользователя.
Не проверял как это работает и сохраняются ли при этом расшаренные файлы и папки, нужно будет проверить.
Решил исследовать вопрос смены имени пользователя OwnCloud в AD. Поднимаю свой тестовый стенд с OwnCloud, доменом и несколькими доменными тестовыми пользователями.
Имеем юзера по имени user1, полное имя — Василий Васильев. Неоригинально, но наглядно. Юзер входит в OwnCloud под своей доменной учётной записью.
У юзера примонтировано несколько общих хранилищ с файлового сервера разными способами. Всё работает.
Вот наши доменные пользователи.
Сменим имя и логин пользователю на user111, пусть это будет девочка, которая вышла замуж, к примеру.
Логинимся в Owncloud под новой учётной записью.
Логин у нас под новым именем прекрасно работает, но в OwnCloud пользователь светится под старым именем.
Работает всё, но некоторые общие хранилища перестали работать.
Атрибут cn, кстати, в AD не изменился тоже.
Хранилище "Test external link" понятно почему не работает, у него сохранены имя и пароль для подключения.
Меняю сохранённый логин. Шара подключается.
У пользователя хранилище подключилось.
А вот хранилище "Персональная шара" не работает по другой причине. Дело в том, что папка для пользователя динамическая и формируется из переменной $user, а это у нас как раз новый логин. Естественно, такой папки на файловом сервере не существует.
Переименуем папку на файловом сервере.
После этого персональная шара тоже заработала, но предыдущее хранилище отвалилось, поскольку оно смотрело на ту же папку, а мы её переименовали.
Снова правлю тестовое хранилище, указываю новую папку user111.
Все хранилища заработали.
Не я админ AD
Так, а что делать если не мы управляем AD, а просто рулим OwnCloud? Пользователю сменили имя, а у нас только учётка в AD есть.
Получить данные об атрибутах пользователей можно и из Linux.
Linux — получить информацию о пользователях домена
На помощь приходит утилита ldapsearch.
Утилита доступна в пакете ldap-utils. Установка в Debian:
apt install ldap-utils
Тестовый стенд:
- Работаем на сервере Ubuntu, не в домене.
- Имеется домен ilab.local
- Имеется контроллер домена ilab-dc, FQDN: ilab-dc.ilab.local
- Мы знаем пароль доменного пользователя user111
Вывести список пользователей в подразделении ILAB, команда перед выполнением запросит пароль:
ldapsearch -x -h ilab-dc.ilab.local -D "user111@ilab.local" -W -b "ou=ILAB,dc=ilab,dc=local"
Можно поиграться с командой grep (атрибуты -A и -B, after и before) и получить данные только конкретного пользователя:
ldapsearch -x -h ilab-dc.ilab.local -D "user111@ilab.local" -W -b "ou=ILAB,dc=ilab,dc=local" | grep "# user1" -A 40
# или
ldapsearch -x -h ilab-dc.ilab.local -D "user111@ilab.local" -W -b "ou=ILAB,dc=ilab,dc=local" | grep "sAMAccountName: user1" -A 11 -B 40
Мы получаем полный список атрибутов, отфильтровать потом нужное не составит труда.
Полное имя
Если нельзя переименовать, та как быть?
У нас ещё есть и полное имя. Давайте исправим в AD.
Был Василий, станет Василисой. И такое случается.
Всё прекрасное, полное имя подтянулось из Active Directory.
Так что можно не заморачиваться и ориентироваться на полное имя.
Работа с БД
Разработчики OwnCloud пишут на форумах, что смена имени пользователя не поддерживается, поскольку оно используется в первичных ключах таблиц БД и может использоваться в сторонних приложениях.
А если всё-таки нужно переименовать? Тем более что сторонних приложений на сервере нет. Есть кейс от одного из админов, которому удалось это сделать:
Есть пользователь "Xyz Test", которого нужно переименовать в "xtest".
- Переименовываем папку пользователя "Xyz Test" в директории data на "xtest".
- Находим папки в директории пользователя со старым именем:
find . -name "Xyz Test"
Переименовываем их в "xtest".
Делаем бэкап БД в файл SQL.
Открываем файл в текстовом редакторе и заменяем "Xyz Test" на "xtest".
Восстанавливаем БД из SQL файла.
Восстанавливаем кэш:
sudo -u www-data php occ files:scan xtest # или sudo -u www-data php occ files:scan --all