Описание стенда
Сервер:
ОС: Windows server 2019
доменное имя: server.astradomain.ad
ip: 10.0.2.15
Клиент:
ОС: РЕД ОС
Настройка сервера
Установка сервиса Active Directory
Измените имя сервера, если это необходимо. Его можно задать в окне менеджера сервера:
Добавим службу Active Dirrectory и DNS на сервер. Для этого откроем окно добавления ролей в менеджере сервера:
В окне для выбора сервисов установим галочки "Active Directory Domain Services" и "DNS Server":
Во всех остальных пунктах даем согласие на установку.
После завершения установки сервисов вам надо перейти к настройке домена. Для этого откройте меню уведомлений и выберите пункт "Promote this server to a domain controller":
На первой вкладке укажите опцию для создания нового домена и укажите его название:
Введите пароль сброса:
На следующей вкладке оставляем все как есть., т.к. наш сервер сам является DNS сервером:
На следующих трёх вкладках также оставляем все как есть:
Перед запуском процесса установки ознакомимся с уведомлениями об ошибках.. И если необходимо, устраняем возникшие проблемы. В нашем случае уведомления не являются критичными:
После установки Active Directory сервер перезагрузится. Если настройка прошла успешно, то нас попросят войти в аккаунт на этот раз доменного пользователя:
Добавление новых пользователей:
Откроем утилиту управления пользователями и компьютерами домена:
Для удобства можно создать отдельную дирректорию Domain Users, где будем создавать доменных пользователей:
Добавим нового пользователя user:
Аналогичным образом добавьте остальных пользователей, которые должны быть в домене.
Установка центра сертификации Active Directory:
Установите драйверы для работы с Рутокеном на сервер. Их можно получить тут. После этого можно приступить к настройке центра сертификации и выдачи сертификатов для пользователей. Это можно сделать по данной инструкции. Настройку авторизации с помощью сертификатов можно воспроизвести по этой инструкции.
Для аутентификации пользователей через linux машины. Помимо токенов с ключами и сертификатов пользователей, вам также необходимо направить им корневой сертификат УЦ.
Его можно получить здесь:
Сохранить необходимо в формате BASE64.
Настройка клиента РЕД ОС
Добавление пользователя в sudo
Необходимо отредактировать файл /etc/sudoers
su
sudo nano /etc/sudoers
|
И добавить в него строчку User ALL=(ALL) ALL
Далее логинимся под пользователем и продолжаем работу из-под него.
Далее необходимо установить следующие пакеты:
sudo dnf update
sudo dnf upgrade
sudo dnf install ccid opensc pam_pkcs11 gdm-plugin-smartcard p11-kit install join-to-domain
sudo dnf install -y realmd PackageKit
sudo dnf install -y krb5-workstation
sudo dnf install -y nss-tools opensc krb5-pkinit
|
Загрузите модуль librtpkcs11ecp.so и установите:
sudo rpm -i librtpkcs11ecp-2.6.1.0-1.x86_64 .rpm
|
Настройка DNS
Через консоль
Меняем имя клиента в нашем домене astradomain.ad на client
sudo hostnamectl set-hostname client.astradomain.ad
|
Узнайте название вашего соединения. Они могут отличаться.
Название интерфейса, которое использует ваше соединение.
Адрес dns сервера
Отключаем соединение
sudo nmcli con down "$CON_NAME"
|
Настраиваем сетевую карту соединения - по умолчанию $INT_NAME
sudo nmcli con mod "$CON_NAME" connection.interface-name $INT_NAME
|
Настраиваем DNS - вместо DNS_SERVER_IP указать IP-адрес сервера DNS. При необходимости указываем адрес локального сервера DNS.
sudo nmcli con mod "$CON_NAME" ipv4.dns "$DNS_SERVER_IP 10.0.2.15"
sudo nmcli con mod "$CON_NAME" ipv4.ignore-auto-dns yes
|
Включаем сетевое соединение
sudo nmcli con up "$CON_NAME"
|
Вводим компьютер в домен
Через графический интерфейс
Вводим IP клиента (тк на сервере не установлен DHSP) и DNS
***Необходимо перезагрузить компьютер***
***Необходимо перезагрузить компьютер***
Узнаем какие пакеты еще необходимы для подключения к домену
realm discover astradomain.ad
|
Список необходимых для работы пакетов будет выведен в следующем формате
required-package: pkg1
required-package: pkg2
required-package: pkg3
Доустановим отсутствующие пакеты
sudo dnf install -y pkg1 pkg2 pkg3 ...
Если в домене есть пользователь ad_user, к которому можно подключиться с помощью пароля, то можно осуществить проверку настройки получив тикет для него
kinit ad_user@ASTRADOMAIN.AD
|
Проверка получения тикета осуществляется командой
Удаление тикета
Проверка аутентификации под пользователем в домене без Рутокена
su ad_user@astradomain.ad
|
Логинимся локальным пользователем для дальнейшей настройки
Настройка клиента для аутентификации в домене с помощью Рутокена
Удаляем старую базу если есть, и создаем новую
sudo rm -fr /etc/pki/nssdb
sudo mkdir /etc/pam_pkcs11/nssdb
sudo chmod 777 /etc/pam_pkcs11/nssdb
sudo certutil -N -d /etc/pam_pkcs11/nssdb --empty-password
sudo modutil -dbdir /etc/pam_pkcs11/nssdb -add "Rutoken PKCS11" -libfile /usr/lib64/librtpkcs11ecp.so
|
Устанавливаем корневой сертификат в /etc/pki/ca-trust/source/anchors/
Следующая команда используется из директории, в которой находится корневой сертификат
sudo cp ca_cert.cer /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust force-enable
sudo update-ca-trust extract
sudo certutil -d /etc/pam_pkcs11/nssdb -A -n 'AD-ROOT' -t CT,CT,CT -a -i /etc/pki/ca-trust/source/anchors/ca_cert.cer
|
Проверяем видимость сертификатов. Должен запросить ПИН-код Рутокен и выдать сертификат с карточки с правами u,u,u и корневой сервера
sudo certutil -L -d /etc/pam_pkcs11/nssdb -h all
Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI
Enter Password or Pin for "Rutoken ECP <no label>": AD-ROOT CT,C,C Rutoken ECP <no label>:te-Rutoken-0329dc84-5937-4b1e-adaf-5cbfe977cda0_E u,u,u
|
Добавляем модуль Рутокен к p11-kit
sudo nano /usr/share/p11-kit/modules/Rutoken.module
|
________________________________
module:/usr/lib64/librtpkcs11ecp.so
________________________________
Делаем модуль Рутокен по умолчанию для p11-tools
sudo modutil -default "Rutoken PKCS11" -dbdir /etc/pam_pkcs11/nssdb -mechanisms RSA:DSA:RC4:DES
|
Редактируем pam_pkcs11
sudo nano /etc/pam_pkcs11/pam_pkcs11.conf
|
pam_pkcs11 {
nullok = false;
debug = true;
use_first_pass = false;
use_authtok = false;
card_only = false;
wait_for_card = false;
use_pkcs11_module = rutokenecp;
# Aktiv Rutoken ECP
pkcs11_module rutokenecp {
module = /usr/lib64/librtpkcs11ecp.so;
slot_num = 0;
support_thread = true;
ca_dir = /etc/pam_pkcs11/cacerts;
crl_dir = /etc/pam_pkcs11/crls;
cert_policy = signature;
}
use_mappers = ms;
mapper_search_path = /usr/lib64/pam_pkcs11;
mapper ms {
debug = false;
module = internal;
ignorecase = true;
ignoredomain = true;
domain = "ASTRADOMAIN.AD";
}
}
|
Настраиваем PAM стандартным средством RHEL authselect.
sudo authselect select sssd with-smartcard with-mkhomedir --force
|
Как должен выглядеть /etc/pam.d/system-auth
sudo nano /etc/pam.d/system-auth
|
auth required pam_env.so
auth required pam_faildelay.so delay=2000000
auth [default=1 ignore=ignore success=ok] pam_usertype.so isregular
auth [default=2 ignore=ignore success=ok] pam_localuser.so
auth [success=done authinfo_unavail=ignore ignore=ignore default=die] pam_sss.so try_cert_auth
auth sufficient pam_unix.so nullok try_first_pass
auth [default=1 ignore=ignore success=ok] pam_usertype.so isregular
auth sufficient pam_sss.so forward_pass
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_usertype.so issystem
account [default=bad success=ok user_unknown=ignore] pam_sss.so
account required pam_permit.so
password requisite pam_pwquality.so try_first_pass local_users_only
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password sufficient pam_sss.so use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session optional pam_oddjob_mkhomedir.so umask=0077
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_sss.so
|
Как должен выглядеть /etc/pam.d/password-auth
sudo nano /etc/pam.d/password-auth
|
auth required pam_env.so
auth required pam_faildelay.so delay=2000000
auth [default=1 ignore=ignore success=ok] pam_usertype.so isregular
auth [default=1 ignore=ignore success=ok] pam_localuser.so
auth [success=done authinfo_unavail=ignore ignore=ignore default=die] pam_sss.so try_cert_auth
auth sufficient pam_unix.so nullok try_first_pass
auth [default=1 ignore=ignore success=ok] pam_usertype.so isregular
auth sufficient pam_sss.so forward_pass
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_usertype.so issystem
account [default=bad success=ok user_unknown=ignore] pam_sss.so
account required pam_permit.so
password requisite pam_pwquality.so try_first_pass local_users_only
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password sufficient pam_sss.so use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session optional pam_oddjob_mkhomedir.so umask=0077
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_sss.so
|
Настройка SSSD
sudo nano /etc/sssd/sssd.conf
|
Как должен выглядеть/etc/sssd/sssd.conf:
[sssd] domains = astradomain.ad config_file_version = 2 services = nss, pam
[domain/astradomain.ad] ad_domain = astradomain.ad ad_server = WIN-HAFG0T1O90S.astradomain.ad krb5_realm = ASTRADOMAIN.AD case_sensitive = Preserving realmd_tags = manages-system joined-with-samba
# Кэширование аутентификационных данных, необходимо при недоступности домена cache_credentials = True
id_provider = ad access_provider = ad krb5_store_password_if_offline = True default_shell = /bin/bash ldap_id_mapping = True ad_gpo_access_control = disabled
# Включает/Отключает режим полных имён пользователей при входе use_fully_qualified_names = False
# Определение домашнего каталога для доменных пользователей fallback_homedir = /home/%u@%d
# Параметр access_provider = simple Определяет список доступа на основе имен пользователей или групп. #access_provider = simple #simple_allow_users = user1@example.com, user2@example.com #simple_allow_groups = group@example.com
# Включает/Отключает перечисление всех записей домена, операция(id или getent) может занимать длительное время при enumerate = true в больших инфраструктурах enumerate = false
# Параметр ignore_group_members может ускорить авторизацию в домене если домен имеет большое количество пользователей, групп и вложенных OU # Если установлено значение TRUE, то атрибут членства в группе не запрашивается с сервера ldap и не обрабатывается вызовов поиска группы. # ignore_group_members = True
# Поиск ссылок может привести к снижению производительности в средах, которые их интенсивно используют. # true - не рекомендуется для больших инфраструктур. Отключаем этот поиск. #ldap_referrals = false
# Включает/Отключает динамические обновления DNS, если в статусе sssd ошибка "TSIG error with server: tsig verify failure", то установите dyndns_update = false #dyndns_update = true #dyndns_refresh_interval = 43200 #dyndns_update_ptr = true #dyndns_ttl = 3600
#[nss] # Сколько секунд nss_sss должен кэшировать перечисления (запросы информации обо всех пользователях) Default: 120 #entry_cache_timeout = 15 # Задает время в секундах, в течение которого список поддоменов будет считаться действительным. Default: 60 #get_domains_timeout = 10
[pam] pam_cert_auth = True debug_level = 10 pam_cert_db_path = /etc/pki/ca-trust/source/anchors/ca_cert.cer pam_p11_allowed_services = +<mate-screensaver>
[certmap/files/ms] matchrule = <SAN:ntPrincipalName>.*@domain maprule =({subject_nt_principal.short_name})
|
Корректируем конфиг Kerberos
Сам файл должен выглядеть следующим образом:
includedir /etc/krb5.conf.d/
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
# dns_lookup_realm = false # Отключить поиск kerberos-имени домена через DNS
dns_lookup_kdc = true # Включить поиск kerberos-настроек домена через DNS
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
# spake_preauth_groups = edwards25519
default_ccache_name = FILE:/tmp/krb5cc_%{uid}
default_realm = ASTRADOMAIN.AD
pkinit_kdc_hostname = SERVER.ASTRADOMAIN.AD
pkinit_anchors = DIR:/etc/pki/ca-trust/source/anchors/
pkinit_identities = PKCS11:librtpkcs11ecp.so
pkinit_eku_checking = none
canonicalize = True
default_tgs_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 RC4-HMAC DES-CBC-CRC DES3-CBC-SHA1 DES-CBC-MD5 default_tkt_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 RC4-HMAC DES-CBC-CRC DES3-CBC-SHA1 DES-CBC-MD5 preferred_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 RC4-HMAC DES-CBC-CRC DES3-CBC-SHA1 DES-CBC-MD5
[realms]
ASTRADOMAIN.AD = {
kdc = server.astradomain.ad # Primary Domain Controller
admin_server = server.astradomain.ad # Primary Domain Controller
default_domain = astradomain.ad # Domain name
}
[domain_realm]
.astradomain.ad = ASTRADOMAIN.AD
astradomain.ad = ASTRADOMAIN.AD
[appdefaults]
pam = {
debug = true
}
|
***Необходимо перезагрузить компьютер***