- Настройка аутентификации kerberos linux
- Введение
- Related links
- Основные понятия
- Стенды
- Ubuntu
- Astra Linux 1.3 Смоленск
- Общий порядок действий
- 1. /* только для Ubuntu */ Установить пакеты и создать новый realm
- 2. /* Только для Ubuntu */ Завести на сервере нового пользователя с помощью kadmin.local
- 3. На сервере проверить, что для этого пользователя можно получить тикет:
- 4. Проверить, что с клиента можно получить тикет, используя аутентификацию по паролю
- 5. Настроить работу с сертификатами и токеном.
- Настройка Kerberos-аутентификации для Linux
- Настройка подключения к серверу Kerberos
- Настройки браузеров
- Firefox
- Chrome/Chromium
- Вход в систему
Настройка аутентификации kerberos linux
Вы просматриваете старую версию данной страницы. Смотрите текущую версию.
Введение
Related links
Основные понятия
- Key Distribution Center (KDC) — хранилище информации о паролях пользователей
- Admin server — основной сервер kerberos. У нас KDC и admin server находятся на одной машине
- Realm — «среда», в которой производится аутентификация
- Principal — пользователь или сервис, участвующий в механизме аутентификации. Мы пока рассматриваем только пользователей
Стенды
Важно : время на клиенте и сервере должно быть синхронизировано. Невыполнение этого требования может привести к возникновению проблем.
Ubuntu
Сервер
- Установлены krb5-kdc, krb5-admin-server, krb5-pkinit
- Kerberos realm: AKTIV-TEST , доменное имя aktiv-test.ru (прописано в /etc/hosts на клиенте)
Примечание: доменное имя стоит делать минимум второго уровня для избежания ошибок - Пользователи: testuser@AKTIV-TEST
Клиент
- Установлены krb5-user, krb5-config, krb5-pkinit
- default realm: AKTIV-TEST
- сервера (kdc, admin) указаны по IP-адресу (лучше указать их в /etc/hosts)
Astra Linux 1.3 Смоленск
Клиент
Установлены стандартные пакеты для работы с токенами ( openct, opensc )
Сервер и клиент
- Kerberos realm: RUSBITECH.RU , доменное имя server.rusbitech.ru (прописано в /etc/hosts на клиенте)
- Пользователи: test1@RUSBITECH.RU
Добавочно к предустановленным пакетам ald/kerberos установлен krb5-pkinit (krb5-pkinit_1.10.1+dfsg-3_amd64.deb, Debian Wheezy):
$ dpkg -i --force-depends krb5-pkinit_1.10.1+dfsg-3_amd64.deb
Общий порядок действий
1. /* только для Ubuntu */ Установить пакеты и создать новый realm
Для Astra Linux достаточно только установить krb5-pkinit
Сервер
$ sudo apt-get install krb5-kdc krb5-admin-server krb5-pkinit # В диалогах указать: # realm = AKTIV-TEST # домен = aktiv-test.ru $ sudo krb5_newrealm # ввести пароль
Клиент
$ sudo apt-get install krb5-user libpam-krb5 libpam-ccreds auth-client-config krb5-pkinit # В диалогах указать: # realm = AKTIV-TEST # домен = aktiv-test.ru $ sudo dpkg-reconfigure krb5-config
Добавить секцию [domain_realm] в /etc/krb5.conf на клиенте и сервере
[domain_realm] .aktiv-test.ru = AKTIV-TEST aktiv-test.ru = AKTIV-TEST
2. /* Только для Ubuntu */ Завести на сервере нового пользователя с помощью kadmin.local
$ sudo kadmin.local # username = testuser # password = test kadmin.local:$ addprinc # . kadmin.local:$ quit
3. На сервере проверить, что для этого пользователя можно получить тикет:
4. Проверить, что с клиента можно получить тикет, используя аутентификацию по паролю
$ kinit @ . $ klist . $ kdestroy
5. Настроить работу с сертификатами и токеном.
Сервер
Создать ключ и сертификат CA:
$ openssl genrsa -out cakey.pem 2048 $ openssl req -key cakey.pem -new -x509 -out cacert.pem
Создать ключ и сертификат KDC
$ openssl genrsa -out kdckey.pem 2048 # создание запроса $ openssl req -new -out kdc.req -key kdckey.pem # подпись запроса $ REALM=; export REALM $ CLIENT=; export CLIENT # содержимое файла pkinit_extensions см ниже $ openssl x509 -req -in kdc.req -CAkey cakey.pem -CA cacert.pem -out kdc.pem -extfile pkinit_extensions -extensions kdc_cert -CAcreateserial
Перенести следующие файлы в /var/lib/krb5kdc/:
[ kdc_cert ] basicConstraints=CA:FALSE # Here are some examples of the usage of nsCertType. If it is omitted keyUsage = nonRepudiation, digitalSignature, keyEncipherment, keyAgreement #Pkinit EKU extendedKeyUsage = 1.3.6.1.5.2.3.5 subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer # Copy subject details issuerAltName=issuer:copy # Add id-pkinit-san (pkinit subjectAlternativeName) subjectAltName=otherName:1.3.6.1.5.2.2;SEQUENCE:kdc_princ_name [kdc_princ_name] realm = EXP:0, GeneralString:$ principal_name = EXP:1, SEQUENCE:kdc_principal_seq [kdc_principal_seq] name_type = EXP:0, INTEGER:1 name_string = EXP:1, SEQUENCE:kdc_principals [kdc_principals] princ1 = GeneralString:krbtgt princ2 = GeneralString:$ [ client_cert ] # These extensions are added when ‘ca’ signs a request. basicConstraints=CA:FALSE keyUsage = digitalSignature, keyEncipherment, keyAgreement extendedKeyUsage = 1.3.6.1.5.2.3.4 subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer subjectAltName=otherName:1.3.6.1.5.2.2;SEQUENCE:princ_name # Copy subject details issuerAltName=issuer:copy [princ_name] realm = EXP:0, GeneralString:$ principal_name = EXP:1, SEQUENCE:principal_seq [principal_seq] name_type = EXP:0, INTEGER:1 name_string = EXP:1, SEQUENCE:principals [principals] princ1 = GeneralString:$
Включить preauth на сервере
Astra Linux: надо просто переписать секцию kdcdefaults из примера ниже:
[kdcdefaults] kdc_tcp_ports = 88 pkinit_identity = FILE:/var/lib/krb5kdc/kdc.pem,/var/lib/krb5kdc/kdckey.pem pkinit_anchors = FILE:/var/lib/krb5kdc/cacert.pem [realms] AKTIV-TEST = < database_name = /var/lib/krb5kdc/principal admin_keytab = FILE:/etc/krb5kdc/kadm5.keytab acl_file = /etc/krb5kdc/kadm5.acl key_stash_file = /etc/krb5kdc/stash max_life = 10h 0m 0s max_renewable_life = 7d 0h 0m 0s master_key_type = des3-hmac-sha1 supported_enctypes = aes256-cts:normal arcfour-hmac:normal des3-hmac-sha1:normal des-cbc-crc:normal des:normal des:v4 des:norealm des:onlyrealm des:afs3 default_principal_flags = +preauth >
Включить preauth для пользователя
$ kadmin.local kadmin.local$: modprinc +requires_preauth
Клиент
Скопировать сертификат CA (cacert.pem) c сервера в /etc/krb5/ на клиенте
Отформатировать токен
$ pkcs15-init --erase-card -p rutoken_ecp $ pkcs15-init --create-pkcs15 --so-pin "87654321" --so-puk "" $ pkcs15-init --store-pin --label "User PIN" --auth-id 02 --pin "12345678" --puk "" --so-pin "87654321" --finalize
Сгенерировать ключевую пару и заявку на сертификат на токене
# не забываем про ID! $ pkcs15-init -G rsa/2048 --auth-id 02 --id 42 --label "testuser's key" --public-key-label "testuser's public key" # . $ openssl # NB: пути! на multiarch-системах opensc-pkcs11.so и engine_pkcs11.so могут лежать в других местах OpenSSL> engine dynamic -pre SO_PATH:/usr/lib/openssl/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:opensc-pkcs11.so (dynamic) Dynamic engine loading support [Success]: SO_PATH:/usr/lib/openssl/engines/engine_pkcs11.so [Success]: ID:pkcs11 [Success]: LIST_ADD:1 [Success]: LOAD [Success]: MODULE_PATH:opensc-pkcs11.so Loaded: (pkcs11) pkcs11 engine OpenSSL> req -engine pkcs11 -new -key 1:42 -keyform engine -out client.req -subj "/C=RU/ST=Moscow/L=Moscow/O=Aktiv/OU=dev/CN=testuser/emailAddress=testuser@mail.com" engine "pkcs11" set. PKCS#11 token PIN: OpenSSL> quit
Снова сервер
Скопировать с клиента заявку (client.req) и подписать ее ключом CA:
$ REALM=; export REALM $ CLIENT=; export CLIENT $ openssl x509 -CAkey cakey.pem -CA cacert.pem -req -in client.req -extensions client_cert -extfile pkinit_extensions -out client.pem
Перезапустить сервер и kdc:
$ /etc/init.d/krb5-admin-server restart $ /etc/init.d/krb5-kdc restart
Обратно клиент
Вернуть сертификат клиента (client.pem) и положить его в /etc/krb5/
Также записать его на токен
$ pkcs15-init --store-certificate client.pem --auth-id 02 --id 42 --format pem
Настроить kerberos
[libdefaults] default_realm = pkinit_anchors = FILE:/etc/krb5/cacert.pem # для аутентификации по локальному ключу # pkinit_identities = FILE:/etc/krb5/client.pem,/etc/krb5/clientkey.pem # для аутентификации по токену pkinit_identities = PKCS11:/usr/lib/opensc-pkcs11.so
Проверить как оно все работает
Настройка Kerberos-аутентификации для Linux
Настройки kerberos-аутентификации под Linux отличаются в зависимости от дистрибутива. В таблице представлены пакеты, которые необходимо установить для настройки аутентификации.
RHEL/ CentOS/ Fedora | Debian/ Ubuntu/ Astra | Alt |
---|---|---|
krb5-workstation krb5-libs krb5-pkinit pam_krb5 sssd-krb5 sssd-krb5-common gssntlmssp | krb5-user krb5-config krb5-pkinit sssd-krb5 sssd-krb5-common gss-ntlmssp | krb5-kinit pam_krb5 sssd-krb5 sssd-krb5-common gssntlmssp |
Настройка подключения к серверу Kerberos
Чтобы настроить подключение к серверу Kerberos, внесите изменения в файл «/etc/krb5.conf»:
- В секции [libdefaults] укажите:
- allow_weak_crypto = true
- default_ccache_name = FILE:/home/%/krb5cc
- default_tgs_enctypes = rc4-hmac
- default_tkt_enctypes = rc4-hmac
- permitted_enctypes = rc4-hmac
- default_realm = название_домена_в_котором_находится_сервер_Kerberos_в_верхнем_регистре (например, default_realm = V2016.TESTINFOMAXIMUM.COM )
Примечания:
- Если на сервере Kerberos включено другое шифрование, тогда его нужно указать вместо rc4-hmac.
- Если это шифрование относится к стойким, то параметр allow_weak_crypto можно поставить в false.
- имя_домена = имя_домена_в_верхнем_регистре
- имя_домена_с_сточкой_впереди = имя_домена_в_верхнем_регистре
- [domain_realm]
- v2016.testinfomaximum.com = V2016.TESTINFOMAXIMUM.COM
- .v2016.testinfomaximum.com = V2016.TESTINFOMAXIMUM.COM
- kinit пользователь_под_которым_будем_входить_в_систему@домен_в_верхнем_регистре
- kinit SuperUser@V2016.TESTINFOMAXIMUM.COM
После ввода пароля создается билет Kerberos, по которому можно будет входить в систему. Билет имеет время жизни, которое можно установить в «krb5.conf» в секции [libdefaults] (например, ticket_lifetime = 24h) или при вызове kinit (добавив перед именем пользователя ключ -l от времени жизни). После истечения времени жизни билет необходимо пересоздавать командой kinit.
При использовании стойких шифров сервер Kerberos (KDC) добавляет к паролю дополнительные символы («соль»). В качестве «соли» Kerberos использует имя домена, объединённое с именем сервера. Клиент Kerberos под Linux в качестве «соли» по умолчанию использует имя домена, объединённое с именем пользователя, под которым необходимо залогиниться. Таким образом, при использовании стойкого шифрования не удаётся наладить связь между KDC и клиентом, так как пароли оказываются разными. Чтобы избежать данной проблемы, мы советуем задать в клиенте Kerberos шифрование rca4-hmac.
Настройки браузеров
Firefox
Чтобы настроить браузер Firefox:
- На вкладке about:config найдите все параметры со словом negotiate.
- Установите в true:
- network.negotiate-auth.allow-non-fqdn ;
- network.negotiate-auth.allow-proxies ;
- network.negotiate-auth.using-native-gsslib .
- В параметрах network.negotiate-auth.delegation-uris и network.negotiate-auth.trusted-uris введите имя компьютера, на котором запущен сервер, с точкой вначале. Например:
- .base2016.v2016.testinfomaximum.com
Active Directory в браузере FireFox не работает со встроенной библиотекой обработки GSS-API. Инструкция по решению данной проблемы представлена на странице Настройка Kerberos-аутентификации для Firefox.
Chrome/Chromium
Чтобы настроить браузеры Chrome/Chromium, в директории /etc/chromium/policies/managed (или /etc/chromium-browser/policies/managed) создайте json-файл с произвольным именем (например, kerberos.json):
Этот файл настроен на принятие любых адресов для использования Kerberos. Можно заменить «*» на конкретное доменное имя сервера.
Вход в систему
После создания билета и настройки браузера вход в систему осуществляется через нажатие кнопки Войти с помощью Active Directory. При этом ни имя, ни пароль дополнительно не запрашиваются (запрос пароля происходит в процессе создания билета Kerberos).