Все просто, когда есть удаленный доступ в офис и возможность терминального подключения к Windows Server для управления пользователями AD домена через MMC-консоль ADUC. Однако все усложняется немного непривычно, когда домен-контроллер на samba и управлять пользователями нужно из командной строки. Частичное решение — установка RSAT на локальном компьютере в удаленном офисе. Однако работа с ним требует присутствия администратора на месте. Но не всегда такая возможность имеется. Поэтому будем осваивать удаленную работу с пользователями AD samba-домена из консоли Linux
Начальные условия
- Домен-контроллер на самба настроен и работает
- Компоненты администрирования RSAT установлены на одном из компьютеров входящих в домен
- Эталонный пользователь (логин d01) создан при помощи MMC-консоли ADUC. Необходимые атрибуты (флаги) из
Properties→Account→Account optionустановлены. После этого создание остальных пользователей можно выполнять удаленно - На сервере с самбой установлен ldap-utils
- В
smb.conf(секцияglobal) есть опцияldap server require strong auth = no. Нужно для работы с утилитами ldap
Создание
Всех пользователей создаем в новом Organization Unit (LM) на который в будущем применим нужные политики. Если отдельный OU не нужен, пропускаем этот шаг
samba-tool ou create "OU=LM"
Заводим пользователя домена с логином d28, задаем пароль, помещаем его в OU LM, указываем путь к сетевому профилю, а также имя и фамилию пользователя. Если параметр --userou не задан, все пользователи будут созданы в дифолтном OU Users
samba-tool user create d28 48255 --userou="OU=LM" --profile-path="\\AD\profiles\d28" --given-name="Lid" --surname="Pel"
Список других атрибутов, которые можно задать при создании пользователя
- —initials
- —script-path
- —home-drive
- —home-directory
- —must-change-at-next-login
- —use-username-as-cn
- —smartcard-required
- —job-title
- —department
- —company
- —description
- —mail-address
- —internet-address
- —telephone-number
- —physical-delivery-office
Создадим группу DOCTOR и добавим в нее пользователя d28
samba-tool create group DOCTOR
samba-tool group addmembers DOCTOR d28
Проверим список пользователей
samba-tool user list
альтернативная команда
wbinfo -u
Результат
Удаленно создан пользователь домена, ему назначен логин и пароль. Пользователь член определенной группы и может логинится в домен
Изменение атрибутов пользователя
Открываем свойства пользователя, закладка Account и смотрим на Account options

Свойства учетной записи доменного пользователя. Все выглядит привычно
Доступны следующие атрибуты:
- User must change password at next login
- User cannot change password
- Password never expires
- Account is disabled
- Store password using reversible encryption
- Smart card is required for interactive logon
- Account is sensitive and cannot be delegated
- Use only Kerberos DES encryption types for this account
- This account supports Kerberos AES 128 bit encryption
- This account supports Kerberos AES 256 bit encryption
- Do not require Kerberos preauthentication
К сожалению samba-tool может влиять только на первых четыре
User must change password at next login
samba-tool user setpassword d28 --newpassword=12345 --must-change-at-next-login
Password never expires
samba-tool user setexpiry d28 --noexpiry
Account is disabled
samba-tool user disable d28
Smart card is required for interactive logon
samba-tool user setpassword d28 --smartcard-required
User cannot change password
Значение этого атрибута хранится в дискрипторе nTSecurityDescriptor каждого пользователя и работа с ним невозможна через samba-tool
Задать его остальным пользователям возможно переносом значения дискриптора от эталонного пользователя
Узнаем значение nTSecurityDescriptor эталонного пользователя CN=Etalon User,OU=LM,DC=testdomain,DC=local (логин d01) и сохраним его в файл etalon.ldiff (имя произвольное)
ldapsearch -x -H ldap://ad.testdomain.local -D "administrator@testdomain.local" -w "adminPWD" -b "CN=Etalon User,OU=LM,DC=testdomain,DC=local" nTSecurityDescriptor | awk '/^nTSecurityDescriptor:: / {printf $1 " " $2} /^ / {gsub(/^[ ]+/, ""); printf $0} END {print ""}' > etalon.ldiff
Содержимое файла etalon.ldiff приведем к следующему виду, где:
— в первой строке dn: пользователя (результат команды samba-tool user show d28)
— nTSecurityDescriptor:: значение дискриптора — одна строка

фрагмент содержимого файла etalon.ldiff
Накатываем etalon.ldiff пользователю d28
ldapmodify -x -H ldap://ad.testdomain.local -D "administrator@testdomain.local" -w "adminPWD" -f etalon.ldiff
Проверяем из MMC-консоли. Атрибут User cannot change password установлен
Поддержка Kerberos AES 128-bit и 256-bit
Работа с шифрованием Kerberos определяется полем msDS-SupportedEncryptionTypes, значение которого должно соответствовать сумме битов
| Атрибут (флаг) | HEX значение | 10 значение |
| Поддержка AES 128-bit | 0x08 | 8 |
| Поддержка AES 256-bit | 0x10 | 16 |
| Поддержка обоих типов AES (128-bit и 256-bit) | 0x18 | 24 |
И редактируется командой
ldbedit -H /var/lib/samba/private/sam.ldb 'samAccountName=d28' msDS-SupportedEncryptionTypes
В редакторе указываем десятичную цифру
Как насчет остальных?
Остальными можем управлять изменяя значение поля userAccountControl нужного пользователя (объекта AD)
Здесь аналогично, сумма битов определяет значение UserAccountControl
| Атрибут (флаг) | HEX значение | 10 значение |
| ENCRYPTED_TEXT_PWD_ALLOWED | 0x0080 | 128 |
| NORMAL_ACCOUNT | 0x0200 | 512 |
| NOT_DELEGATED | 0x100000 | 1048576 |
| USE_DES_KEY_ONLY | 0x200000 | 2097152 |
| DONT_REQ_PREAUTH (Не требуется предварительная проверка подлинности Kerberos) | 0x400000 | 4194304 |
Редактируется командой
ldbedit -H /var/lib/samba/private/sam.ldb 'samAccountName=d28' userAccountControl
У новосозданного пользователя userAccountControl равен 512
Дополнительно
Атрибуты каждого пользователя можно просмотреть привычно через MMC-консоль ADUC или при помощи samba-tool
samba-tool user show d28
Еще один способ, где время отображается в human-readable. Важно при разборе полетов
pdbedit -u d28 -v
Изменить пароль пользователя d28
samba-tool user setpassword d28 --newpassword=pa$$w()rd
Заблокировать, разблокировать пользователя
samba-tool user disable d28 samba-tool user enable d28
Если необходимо изменить имя отображаемое в MMC-консоли (значение поля distinguishedName) с текущего на Lidiya Pelenska
samba-tool user rename d28 --force-new-cn='Lidiya Pelenska'
Есть возможность редактировать, удалять или добавлять другие атрибуты. Команда автоматически открывает свойства пользователя в vi. Две команды на выбор
samba-tool user edit d28
ldbedit -H /var/lib/samba/private/sam.ldb 'samAccountName=d28'
Если хочется в другом редакторе, тогда используем ключ -e
samba-tool user edit d28 --editor=mcedit
ldbedit -e mcedit -H /var/lib/samba/private/sam.ldb 'samAccountName=d28'

Свойства учетной записи доменного пользователя из консоли Linux. Не все атрибуты отображены. Есть возможность для редактирования
Информация о пользователях, сессиях, а также с каких IP-адресов или компьютеров они подключены
smbstatus
Бонус
Предлагаю ознакомиться с консольной тулзой, при помощи которой можно создавать, редактировать и удалять некоторые объекты Active Directory. Там не все еще корректно отрабатывает, но автор работает над этим. И имя ей admin-tools

Системный администратор с 2000 года
Участник Freelancehunt, Хабр Q&A
Кейсы