Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Описание стенда

Сервер:

ОС: Windows server 2019

...

ip: 10.0.2.15

Клиент:

ОС: РЕД ОС

Настройка сервера

Установка сервиса Active Directory

Info
При необходимости измените имя сервера. Это необходимо сделать до выполнения его настройки.

...

  1. Добавление сервисов.
  2. Настройка домена.
  3. Добавление новых пользователей.
  4. Установка центра сертификации Active Directory.

Шаг 1. Добавление необходимых сервисов

Добавьте на сервер сервисы Active Dirrectory и DNS:

...

4. Во всех остальных пунктах даём согласие на установку.

Шаг 2. Настройка домена

После завершения установки сервисов вам надо перейти к настройке домена:

...

После установки Active Directory сервер перезагрузится.  Если настройка прошла успешно, то на экране отобразится окно для входа в аккаунт доменного пользователя. 

Шаг 3. Добавление новых пользователей

Чтобы добавить новых пользователей:

...

4. Аналогичным образом добавьте остальных пользователей, которые должны быть в домене.

Шаг 4. Установка центра сертификации Active Directory

Info
Перед процедурой установите драйверы для работы с Рутокеном на сервер, ссылка на актуальную версию: https://www.rutoken.ru/support/download/windows/

...

4. Нажмите Copy to File и сохраните сертификат в формате BASE64.

Настройка клиента РЕД ОС

Добавление пользователя в sudo

Отредактируйте файл /etc/sudoers

...

И добавьте в него строчку User user ALL=(ALL) ALL


Далее залогиньтесь под пользователем и продолжите работу из-под него.

...

Далее установите следующие пакеты:

sudo dnf update

sudo dnf upgrade

sudo dnf

sudo dnf install ccid opensc pam_pkcs11

gdm-plugin-smartcard

p11-

kit install

kit 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 dnf install /Путь_до_файла/librtpkcs11ecp-2X.6X.1X.0X-1X.x86_64.rpm


Настройка DNS

Через консоль

Измените имя клиента в нашем домене astradomain.ad на client

...

Вводите компьютер в домен

sudo join-to-domain.sh

Через графический интерфейс

Image Removed


Откройте Главное меню Параметры Расширенная конфигурация сети.

Image Added


Выберите своё соединение, и на вкладке Параметры IPv4 введите Введите IP клиента (т.к. так как на сервере не установлен DHSP) и DNS.

...

Warning
Обязательно перезагрузите компьютер.

Image Removed

Image Removed

Image Removed

...


После перезагрузки, откройте Главное меню  Системные Ввод ПК в домен.

Image Added


Выберите параметр «Домен Windows/Samba»

Image Added


Далее необходимо ввести параметры для ввода компьютера в домен.

Image Added

Warning
Обязательно перезагрузите компьютер.


Узнаем какие пакеты еще ещё необходимы для подключения к домену

...

Список необходимых для работы пакетов будет выведен в следующем формате:

required-package: pkg1

required-package: pkg2

required-package: pkg3


Доустановим Установите отсутствующие пакеты:

sudo dnf install -y pkg1 pkg2 pkg3 ...


Если в домене есть пользователь ad_user, к которому можно подключиться с помощью пароля, то можно осуществить проверку настройки получив тикет для него

...

klist


Удаление тикета

kdestroy

Проверка аутентификации под пользователем в домене без Рутокена

su ad_user@astradomain.ad


Логинимся Залогиньтесь локальным пользователем для дальнейшей настройки:

su user


Настройка клиента для аутентификации в домене с помощью Рутокена

Удаляем При необходимости удалите старую базу если есть, и создаем создайте новую:

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


Проверяем видимость сертификатов. Должен запросить ПИН-код Рутокен Проверьте, что сертификат виден на токене и в базе данных. Система должна запросить PIN-код Рутокена и выдать сертификат с карточки с правами 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

...

_sss.so


Настройте SSSD

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

Название графической оболочки

echo $XDG_CURRENT_DESKTOP

Вот список соответствий названий графических оболочек и сервиса, используемого лок скрином. Данный список не является полным.

MATE → mate-screensaver
X-Cinnamon → cinnamon-screensaver
fly → <Отсутствует>
KDE → kde
GNOME → xdg-screensaver


Сконфигурируем SSSD. Для этого отредактируем файл /etc/sssd/sssd.conf.

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 = +<matemate-screensaver>screensaver

[certmap/files/ms]
matchrule = <SAN:ntPrincipalName>.*@domain
maprule =({subject_nt_principal.short_name})

...


Измените конфиг Kerberos

sudo nano /etc/krb5.conf


Сам файл должен выглядеть следующим образомОбщий вид файла:

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 WIN-HAFG0T1O90S.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 WIN-HAFG0T1O90S.astradomain.ad # Primary Domain Controller


    admin_server = server WIN-HAFG0T1O90S.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

        }

...

Warning
Обязательно перезагрузите компьютер.



Проверьте аутентификацию после перезагрузки.

Image Added