Учетная запись компьютера в домене

У каждого компьютера в домене есть своя собственная учетная запись, с помощью которой он выполняет авторизованные LDAP-запросы к каталогу и проверяет аутентичность пользователей по протоколу Kerberos V5. Учетные записи компьютеров хранятся в контейнере cn=computers,cn=accounts,dc=ald,dc=company,dc=lan, имя LDAP-записи включает значение атрибута fqdn, например, fqdn=pc-1.ald.company.lan, а для аутентификации по протоколу Kerberos используется имя принципала в формате host/pc-1.ald.company.lan@ALD.COMPANY.LAN.

Билеты службы SSSD кэшируются в файле /var/lib/sss/db/ccache_ALD.COMPANY.LAN, прочитать который можно с помощью утилиты klist, используя параметр -c:

sudo klist -c /var/lib/sss/db/ccache_ALD.COMPANY.LAN

Результат выполнения:

Ticket cache: FILE:/var/lib/sss/db/ccache_ALD.COMPANY.LAN
Default principal: host/dc-1.ald.company.lan@ALD.COMPANY.LAN

Valid starting    Expires    Service principal
10.10.2023 14:40:23 11.10.2023 14:40:23     krbtgt/ALD.COMPANY.LAN@ALD.COMPANY.LAN
10.10.2023 14:40:23 11.10.2023 14:40:23     ldap/dc-1.ald.company.lan@ALD.COMPANY.LAN

Пароль учетной записи хоста хранится в файле /etc/krb5.keytab, поэтому можно быстро проходить аутентификацию и выполнять запросы от имени хоста. Проверка валидности keytab-файла является одной из рекомендаций по устранению неисправностей, если в журналах SSSD появится информация о том, что служба не смогла пройти аутентификацию в домене. Такие ситуации могут возникать, например, если компьютер был удален из домена.

Содержимое keytab-файла можно посмотреть с помощью утилиты klist, используя параметр -k. Если добавить параметр -e, то можно будет увидеть, что для одной версии пароля в файле содержится сразу два ключа, полученные с помощью разных алгоритмов хэширования:

sudo klist -ke /etc/krb5.keytab

Результат выполнения:

Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   1 host/pc-1.ald.company.lan@ALD.COMPANY.LAN (aes256-cts-hmac-sha1-96)
   1 host/pc-1.ald.company.lan@ALD.COMPANY.LAN (aes128-cts-hmac-sha1-96)

Для того, чтобы пройти аутентификацию от имени хоста, достаточно использовать команду kinit с параметром -k, но если нужно задать путь к keytab-файлу в явном виде, то можно это сделать, используя дополнительный параметр -t. Если выполнить команду ldapsearch, то можно будет увидеть наличие сервисного билета для аутентификации в службе LDAP:

sudo kinit -kt /etc/krb5.keytab
ldapsearch > /dev/null
klist

Результат выполнения:

Ticket cache: KEYRING:persistent:1421600000:krb_ccache_zgnOUA8
Default principal: host/dc-1.ald.company.lan@ALD.COMPANY.LAN
Valid starting Expires Service principal
10.10.2023 14:43:06 11.10.2023 14:43:06     ldap/dc-1.ald.company.lan@ALD.COMPANY.LAN
10.10.2023 14:43:06 11.10.2023 14:43:06     krbtgt/ALD.COMPANY.LAN@ALD.COMPANY.LAN

Для хэширования паролей используются устойчивые к взлому алгоритмы, и перед этим к паролю добавляется основное имя пользователя в качестве соли для того, чтобы исключить возможность перебора по таблицам хэшей, но даже такие меры не защищают от всех видов атак, поэтому пароли хостов рекомендуется время от времени менять, например, компания Microsoft предлагает делать это не реже одного раза в 30 дней.

Чтобы установить хосту новый пароль и выгрузить его в keytab-файл, можно воспользоваться утилитой ipa-getkeytab. Важно обратить внимание, что после смены пароля команда klist в колонке KVNO показывает новую версию ключей.

sudo rm -rf /etc/krb5.keytab
sudo ipa-getkeytab -p host/pc-1.ald.company.lan -k /etc/krb5.keytab -s dc-1.ald.company.lan -D uid=admin,cn=users,cn=accounts,dc=ald,dc=company,dc=lan -W -P

Результат выполнения:

Введите пароль LDAP: **********
Новый пароль учётной записи: **********
Проверка пароля учётной записи: **********
Таблица ключей успешно получена и сохранена в: /etc/krb5.keytab

Проверить новый keytab-файл можно командой:

sudo klist -ke /etc/krb5.keytab

Результат выполнения:

Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   2 host/pc-1.ald.company.lan@ALD.COMPANY.LAN (aes256-cts-hmac-sha1-96)
   2 host/pc-1.ald.company.lan@ALD.COMPANY.LAN (aes128-cts-hmac-sha1-96)

Поясним параметры вызова утилиты ipa-getkeytab:

  • -p — имя учетной записи, для которой меняется пароль

  • -k — имя keytab-файла, в который добавляются ключи

  • -s — адрес контроллера домена, через который следует выполнить запрос

  • -D — имя привилегированной учетной записи, от которой вносятся изменения в каталог.

  • -W — ключ, указывающий на то, что пароль привилегированной учетной записи будет предоставлен в интерактивном режиме. Для того, чтобы задать пароль прямо в командной строке, используйте ключ -w, но делать это крайне не рекомендуется, т.к. значение этого параметра будет видно в выводе команды ps и попадет в историю команд.

  • -P — ключ, указывающий на то, что пароль хоста будет введен вручную. Если этот параметр не указывать, пароль будет сгенерирован автоматически.

Если параметр -D не будет указан, то утилита ipa-getkeytab воспользуется учетными данными текущего Kerberos-пользователя из связки ключей. Это позволяет сменить пароль для компьютера, используя учетные данные самого хоста из keytab-файла:

sudo kinit -kt /etc/krb5.keytab
sudo ipa-getkeytab -p host/pc-1.ald.company.lan -k /etc/krb5.keytab
sudo klist -ke /etc/krb5.keytab

Результат выполнения:

Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   2 host/pc-1.ald.company.lan@ALD.COMPANY.LAN (aes256-cts-hmac-sha1-96)
   2 host/pc-1.ald.company.lan@ALD.COMPANY.LAN (aes128-cts-hmac-sha1-96)
   3 host/pc-1.ald.company.lan@ALD.COMPANY.LAN (aes256-cts-hmac-sha1-96)
   3 host/pc-1.ald.company.lan@ALD.COMPANY.LAN (aes128-cts-hmac-sha1-96)