Подготовка ВМ с ОС Astra Linux SE 1.8.4 и 1.8.6 ко входу по JaCarta в Active Directory
После создания Active Directory с двухуровневой иерархией PKI необходимо перейти к подготовке ВМ с ОС Astra Linux SE 1.8.4 и 1.8.6 ко входу по JaCarta в Active Directory.
Внимание
Используемые в инструкции названия и адреса являются примерами и заданы во время создания Active Directory с двухуровневой иерархией PKI. Необходимо проводить настройку в соответствии с существующей инфраструктурой.
Подготовка ВМ ко входу по JaCarta в Active Directory включает следующие шаги:
- Подготовка новой ВМ и настройка доступа по SSH.
- Настройка DNS, имени ВМ, времени и компонентов ОС.
- Ввод ВМ в Active Directory.
- Установка Root CA, SubCA и CRL.
- Установка JaCarta и регистрация PKCS#11-модуля.
- Настройка SSSD и Kerberos PKINIT.
- Установка Space Agent VDI и настройка GLINT.
- Включение обязательного входа по JaCarta.
Подготовка новой ВМ и настройка доступа по SSH
- Подключиться к ВМ через VNC/SPICE-консоль.
-
Установить SSH-сервер и гостевой агент SpaceVM:
sudo apt-get update sudo apt-get install -y openssh-server qemu-guest-agent sudo systemctl enable --now ssh.service qemu-guest-agent.service systemctl is-active ssh.service qemu-guest-agent.service ss -lnt '( sport = :22 )'Внимание
Если APT (Advanced Package Tool — система управления пакетами) использует источник cdrom, перед установкой необходимо подключить ISO-образ Astra Linux SE 1.8.4 или 1.8.6 как CD-ROM.
-
Определить адрес ВМ в Web-интерфейсе SpaceVM или с помощью команды:
ip -br address -
Подключиться с административного компьютера, используя локальную учетную запись
ssh administrator@10.254.32.112. -
Выйти с помощью команды
exit. -
На административном компьютере создать ключ, если его ещё нет, и добавить публичный ключ на ВМ:
test -f ~/.ssh/id_ed25519 || ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 ssh-copy-id -i ~/.ssh/id_ed25519.pub administrator@10.254.32.112 ssh administrator@10.254.32.112 -
Убедиться, что последнее подключение по SSH к ВМ было выполнено без запроса пароля пользователя
administrator. Парольная фраза закрытого ключа, если она задана, может запрашиваться отдельно. -
До включения обязательного входа по JaCarta сохранить доступ по SSH и создать снимок ВМ.
-
Создать рабочий каталог и поместить в него Root CA, SubCA, CRL, архив Единого клиента JaCarta и полный каталог Space Agent VDI с файлами
install.shиastra18_debs:mkdir -p ~/astra184-ad-assetsВ терминале подготавливаемой ВМ выполнить команды для получения файлов с CERTS-SUBCA:
mkdir -p ~/astra184-ad-assets scp 'CERTS\Администратор@10.254.32.70:C:/pki/CERTS-ROOTCA_CERTS-LAB-ROOTCA.crt' 'CERTS\Администратор@10.254.32.70:C:/pki/CERTS-SUBCA.certs.local_CERTS-LAB-SUBCA.crt' 'CERTS\Администратор@10.254.32.70:C:/pki/CERTS-LAB-SUBCA.crl' ~/astra184-ad-assets/ ls -lh ~/astra184-ad-assetsАрхив Единого клиента JaCarta необходимо скачать с официального сайта производителя.
Настройка DNS, имени ВМ, времени и компонентов ОС
-
Указать DNS контроллера домена, установить полное имя ВМ и нужные пакеты.
sudo nmcli connection modify 'Проводное соединение 1' ipv4.ignore-auto-dns yes ipv4.dns '10.254.32.68' ipv4.dns-search 'certs.local' sudo nmcli connection up 'Проводное соединение 1' sudo hostnamectl set-hostname astra184-jc-02.certs.local sudo apt-get update sudo apt-get install -y ca-certificates curl unzip openssl usbutils network-manager chrony openssh-server qemu-guest-agent astra-ad-sssd-client sssd-tools krb5-user krb5-pkinit libccid pcscd libpcsclite1 pcsc-tools opensc p11-kit p11-kit-modules libnss3-tools gnutls-bin gcr libpcre16-3 libxcb-xinerama0 ldap-utils sudo systemctl enable --now ssh.service qemu-guest-agent.service chrony.service pcscd.socketastra184-jc-02.certs.local— имя ВМ,Проводное соединение 1— профиль NetworkManager. -
Настроить синхронизацию времени с контроллером домена и выполнить проверку:
printf '%s\n' 'server CERTS-ADDC.certs.local iburst prefer' | sudo tee -a /etc/chrony/chrony.conf sudo systemctl restart chrony.service sudo chronyc -a makestep chronyc tracking -
Выполнить проверку DNS и доступности служб AD:
getent hosts CERTS-ADDC.certs.local getent hosts subca.certs.local timeout 5 bash -c '</dev/tcp/CERTS-ADDC.certs.local/88' && echo 'Kerberos TCP/88 доступен' timeout 5 bash -c '</dev/tcp/CERTS-ADDC.certs.local/389' && echo 'LDAP TCP/389 доступен'
Ввод ВМ в Active Directory
-
Выполнить ввод в домен. В запросе указать пароль доменной учётной записи, у которой есть разрешение на ввод АРМ в AD:
sudo astra-ad-sssd-client -d 'certs.local' -dc 'CERTS-ADDC.certs.local' -u 'Администратор' -px -fn -y -
Проверить, что SSSD разрешает доменного пользователя:
getent passwd 'ivan-ivanov@certs.local'SSSD (System Security Services Daemon) — это пакет приложений для управления аутентификацией и авторизацией в операционных системах на базе Linux.
Установка Root CA, SubCA и CRL
Внимание
Перед запуском в командах ниже необходимо заменить значения УЦ и пути в соответствии с существующей инфраструктурой.
-
Проверить формат и идентификаторы файлов, скопированных с узла CERTS-SUBCA:
openssl x509 -in ~/astra184-ad-assets/CERTS-ROOTCA_CERTS-LAB-ROOTCA.crt -noout -subject -issuer -dates -fingerprint -sha256 -nameopt RFC2253 openssl x509 -in ~/astra184-ad-assets/CERTS-SUBCA.certs.local_CERTS-LAB-SUBCA.crt -noout -subject -issuer -dates -fingerprint -sha256 -nameopt RFC2253 openssl x509 -in ~/astra184-ad-assets/CERTS-SUBCA.certs.local_CERTS-LAB-SUBCA.crt -noout -text | sed -n '/Subject Key Identifier/,+1p' openssl crl -in ~/astra184-ad-assets/CERTS-LAB-SUBCA.crl -noout -issuer -lastupdate -nextupdate -fingerprint -sha256 openssl verify -CAfile ~/astra184-ad-assets/CERTS-ROOTCA_CERTS-LAB-ROOTCA.crt ~/astra184-ad-assets/CERTS-SUBCA.certs.local_CERTS-LAB-SUBCA.crtЕсли команда завершается без ошибки, файл имеет PEM-формат. Если команда завершается с ошибкой, соответствующий файл имеет DER-формат. Совпадения имени Subject недостаточно: на ВМ должен устанавливаться именно тот выпуск SubCA, которым подписан пользовательский сертификат на JaCarta.
-
Если один или несколько исходных файлов имеют DER-формат, сначала преобразовать их в PEM-формат. Выполнять необходимо только для файлов, которые не прошли проверку формата выше.
openssl x509 -inform DER -in ~/astra184-ad-assets/CERTS-ROOTCA_CERTS-LAB-ROOTCA.crt -out ~/astra184-ad-assets/certs-local-root-ca.pem openssl x509 -inform DER -in ~/astra184-ad-assets/CERTS-SUBCA.certs.local_CERTS-LAB-SUBCA.crt -out ~/astra184-ad-assets/certs-local-sub-ca.pem openssl crl -inform DER -in ~/astra184-ad-assets/CERTS-LAB-SUBCA.crl -out ~/astra184-ad-assets/certs-local-sub-ca.crl -
Для PEM-файлов установить цепочку доверия в системное хранилище, SSSD и pam_pkcs11:
sudo install -d -o root -g root -m 0755 /usr/local/share/ca-certificates /etc/sssd/pki /etc/pam_pkcs11/cacerts /etc/pam_pkcs11/crls sudo install -o root -g root -m 0644 ~/astra184-ad-assets/CERTS-ROOTCA_CERTS-LAB-ROOTCA.crt /usr/local/share/ca-certificates/certs-local-root-ca.crt sudo install -o root -g root -m 0644 ~/astra184-ad-assets/CERTS-SUBCA.certs.local_CERTS-LAB-SUBCA.crt /usr/local/share/ca-certificates/certs-local-sub-ca.crt sudo install -o root -g root -m 0644 ~/astra184-ad-assets/CERTS-LAB-SUBCA.crl /usr/local/share/ca-certificates/certs-local-sub-ca.crl sudo install -o root -g root -m 0644 ~/astra184-ad-assets/CERTS-LAB-SUBCA.crl /etc/pam_pkcs11/crls/certs-local-sub-ca.crl sudo install -o root -g root -m 0644 /usr/local/share/ca-certificates/certs-local-root-ca.crt /etc/pam_pkcs11/cacerts/certs-local-root-ca.crt sudo install -o root -g root -m 0644 /usr/local/share/ca-certificates/certs-local-sub-ca.crt /etc/pam_pkcs11/cacerts/certs-local-sub-ca.crt sudo sh -c 'cat /usr/local/share/ca-certificates/certs-local-root-ca.crt /usr/local/share/ca-certificates/certs-local-sub-ca.crt > /etc/sssd/pki/sssd_auth_ca_db.pem' sudo chmod 0644 /etc/sssd/pki/sssd_auth_ca_db.pem sudo update-ca-certificates openssl verify -CAfile /etc/sssd/pki/sssd_auth_ca_db.pem /usr/local/share/ca-certificates/certs-local-sub-ca.crt openssl x509 -in /usr/local/share/ca-certificates/certs-local-sub-ca.crt -noout -dates -fingerprint -sha256 openssl x509 -in /usr/local/share/ca-certificates/certs-local-sub-ca.crt -noout -text | sed -n '/Subject Key Identifier/,+1p'
Root CA и SubCA в
sssd_auth_ca_db.pemнужны SSSD для проверки пользовательского сертификата и Kerberos PKINIT для проверки сертификата KDC.
Установка JaCarta и регистрация PKCS#11-модуля
-
Распаковать архив и запустить официальный установщик Единого клиента JaCarta:
sudo install -d -m 0755 /opt/jacarta-astra184 sudo unzip -q ~/astra184-ad-assets/jacartauc_3.3.1.3602_al_x64.zip -d /opt/jacarta-astra184 sudo bash -c 'cd /opt/jacarta-astra184 && exec bash ./install.sh' -
На Astra Linux SE библиотека JaCarta должна располагаться по пути
/usr/lib/libjcPKCS11-2.so. Создать Jacarta.module вручную в каталоге модулей p11-kit:test -r /usr/lib/libjcPKCS11-2.so sudo install -d -o root -g root -m 0755 /usr/share/p11-kit/modules printf '%s\n' 'module: /usr/lib/libjcPKCS11-2.so' | sudo tee /usr/share/p11-kit/modules/Jacarta.module >/dev/null sudo chown root:root /usr/share/p11-kit/modules/Jacarta.module sudo chmod 0644 /usr/share/p11-kit/modules/Jacarta.module sudo cat /usr/share/p11-kit/modules/Jacarta.module timeout 20s p11-kit list-modulesКоманды должны завершиться без ошибок. У команды
catдолжен быть вывод:module: /usr/lib/libjcPKCS11-2.so.
В выводеp11-kit list-modulesдолжен присутствовать модуль с путём/usr/lib/libjcPKCS11-2.so.
Настройка SSSD и Kerberos PKINIT
-
Определить точный Subject выдающего SubCA. Файл находится в
~/astra184-ad-assets/CERTS-SUBCA.certs.local_CERTS-LAB-SUBCA.crt. Если файл находится в другом месте, заменить путь. Скопировать значение послеsubject=целиком.openssl x509 -in ~/astra184-ad-assets/CERTS-SUBCA.certs.local_CERTS-LAB-SUBCA.crt -noout -subject -nameopt RFC2253 -
Создать каталог и открыть файл
/etc/sssd/conf.d/90-jacarta-smartcard.conf:sudo install -d -o root -g root -m 0755 /etc/sssd/conf.d sudoedit /etc/sssd/conf.d/90-jacarta-smartcard.conf -
Заменить в примере ниже данные в соответствии с существующей инфраструктурой, а часть
$<EKU>clientAuthоставить без изменений. Сохранить изменения.[pam] pam_cert_auth = True responder_idle_timeout = 0 p11_child_timeout = 60 p11_wait_for_card_timeout = 60 pam_cert_db_path = /etc/sssd/pki/sssd_auth_ca_db.pem pam_p11_allowed_services = +fly-dm-greeter, +fly-dm, +glint-service, +login [certmap/certs.local/jacarta-subca-upn] matchrule = KRB5:<ISSUER>^CN=CERTS-LAB-SUBCA,DC=certs,DC=local$<EKU>clientAuth maprule = (|(userPrincipalName={subject_nt_principal})(samAccountName={subject_nt_principal.short_name})) domains = certs.local priority = 10CN=CERTS-LAB-SUBCA,DC=certs,DC=local— значение послеsubject=из шага 1.pam_cert_authвключает проверку сертификата в SSSD.
p11_wait_for_card_timeout = 60обеспечивает SSSD до 60 секунд на появление JaCarta после перенаправления JaCarta через Space USB/IP.
Вpam_p11_allowed_servicesнеобходимы оба сервиса: glint-service участвует в первом PAM-вызове, login — в следующем вызове GLINT. -
Установить права, проверить синтаксис и перезапустить SSSD:
sudo chown root:root /etc/sssd/conf.d/90-jacarta-smartcard.conf sudo chmod 0600 /etc/sssd/conf.d/90-jacarta-smartcard.conf /etc/sssd/sssd.conf sudo sssctl config-check sudo systemctl restart sssd.service sudo journalctl -u sssd.service -b --no-pager | grep -Ei 'sss_certmap_add_rule failed|Failed to parse KRB5 matching rule' || trueВнимание
Последняя команда не должна завершиться с ошибкой. Если она выводит ошибку, необходимо проверить домен и полный Subject SubCA в matchrule: Subject должен совпадать с полным текстом после
subject=в выводе openssl x509. -
Перед созданием PKINIT-файла проверить, что
/etc/krb5.confподключает каталог/etc/krb5.conf.d/. Если строки нет, добавить её перед разделом[libdefaults]:includedir /etc/krb5.conf.d/ -
Сохранить резервную копию основного файла Kerberos и удалить из него прежние параметры PKINIT, чтобы они не конкурировали с новым drop-in:
sudo cp -a /etc/krb5.conf /etc/krb5.conf.before-jacarta sudo sed -i -E '/^[[:space:]]*pkinit_(anchors|kdc_hostname|identities|eku_checking)[[:space:]]*=/d' /etc/krb5.conf -
Создать каталог и открыть
/etc/krb5.conf.d/90-jacarta-pkinit.conf:sudo install -d -o root -g root -m 0755 /etc/krb5.conf.d sudoedit /etc/krb5.conf.d/90-jacarta-pkinit.conf -
Заменить CERTS-ADDC.certs.local на полное доменное имя контроллера AD существующей инфраструктуры. Не указывать короткое имя контроллера. Сохранить изменения.
[libdefaults] pkinit_anchors = FILE:/etc/sssd/pki/sssd_auth_ca_db.pem pkinit_kdc_hostname = CERTS-ADDC.certs.local pkinit_identities = PKCS11:/usr/lib/libjcPKCS11-2.so pkinit_eku_checking = kpServerAuth default_ccache_name = KEYRING:persistent:%{uid} -
Установить владельца и права, затем вывести итоговые параметры PKINIT:
sudo chown root:root /etc/krb5.conf.d/90-jacarta-pkinit.conf sudo chmod 0644 /etc/krb5.conf.d/90-jacarta-pkinit.conf grep -R -nE '^[[:space:]]*pkinit_(anchors|kdc_hostname|identities|eku_checking)[[:space:]]*=' /etc/krb5.conf /etc/krb5.conf.d
Установка Space Agent VDI и настройка GLINT
-
Подключить ISO-образ Space Agent VDI к ВМ, которая подготавливается ко входу по JaCarta, в SpaceVM. Команды находят образ по метке, поэтому номер CD-ROM (sr0, sr1 и другой) указывать не требуется. Если APT использует cdrom, ISO-образ Astra Linux SE должен оставаться доступным APT до окончания установки пакетов.
sudo install -d -m 0755 /mnt/space-agent-vdi /opt/space-agent-vdi sudo mount -o ro /dev/disk/by-label/space-agent-vdi-* /mnt/space-agent-vdi test -f /mnt/space-agent-vdi/install.sh test -d /mnt/space-agent-vdi/astra18_debs sudo cp -a /mnt/space-agent-vdi/. /opt/space-agent-vdi/ sudo umount /mnt/space-agent-vdi test -f /opt/space-agent-vdi/install.sh test -d /opt/space-agent-vdi/astra18_debs -
Запустить штатный установщик Space Agent VDI из локальной копии ISO-образа. Перед запуском убедиться, что используется install.sh из нужной версии Space Agent VDI.
sudo bash -c 'cd /opt/space-agent-vdi && exec bash ./install.sh' -
Во время установки отвечать на вопросы установщика в соответствии с настройками инфраструктуры. Если установщик спрашивает о выделенной метке PDPLabel, для инфраструктуры без отдельной метки ответить
no. -
После завершения работы установщика обновить конфигурацию systemd, включить службы, добавить доменного пользователя в группу USB/IP и включить для него linger.
sudo systemctl daemon-reload sudo systemctl enable --now glint-launcher.service space-usbip-daemon.service sudo gpasswd --add 'ivan-ivanov@certs.local' space_usbip sudo loginctl enable-linger 'ivan-ivanov@certs.local' dpkg-query -W glint-server glint-launcher space-usbip-daemon systemctl is-active glint-launcher.service space-usbip-daemon.service -
В
/etc/pam.d/glint-serviceпервый прямой вызов SSSD должен иметь вид:auth sufficient pam_sss.so require_cert_auth -
Если строка
auth sufficient pam_sss.soуже есть, добавить к нейrequire_cert_auth, не создавая второй вызов:sudo sed -i -E 's/^[[:space:]]*auth[[:space:]]+sufficient[[:space:]]+pam_sss\.so([[:space:]].*)?$/auth sufficient pam_sss.so require_cert_auth/' /etc/pam.d/glint-service grep -nE '^[[:space:]]*auth[[:space:]].*pam_sss\.so' /etc/pam.d/glint-service
Включение обязательного входа по JaCarta
-
Включить штатный профиль Astra Linux SE: останется парольный вход для локального администратора, но для доменного пользователя потребуется сертификат JaCarta и не произойдет переход к паролю при ошибке сертификата:
sudo pam-auth-update --force --disable astra-sss-2fa astra-sss-2fa-try sss sss-smart-card-optional sss-smart-card-required krb5 sudo pam-auth-update --force --enable astra-sss-2fa-require mkhomedir sudo pam-auth-update --force --disable astra-sss-2fa astra-sss-2fa-try sss sss-smart-card-optional sss-smart-card-required krb5 sudo systemctl restart sssd.service pcscd.socket glint-launcher.service space-usbip-daemon.service sudo systemctl try-restart pcscd.service -
Проверить итоговый PAM-порядок до перезагрузки:
grep -E 'pam_sss\.so.*require_cert_auth' /etc/pam.d/common-auth grep -nE '^[[:space:]]*auth[[:space:]].*(pam_localuser\.so|pam_sss\.so|pam_unix\.so)' /etc/pam.d/common-auth grep -E 'pam_sss\.so.*(use_first_pass|try_cert_auth)' /etc/pam.d/common-auth && echo 'Найден нежелательный парольный или необязательный SSSD-путь' || trueВ common-auth:
pam_localuser.soдолжен находиться передpam_sss.so.- Строка
pam_sss.so forward_pass require_cert_auth с default=dieдолжна находиться передpam_unix.so.
При ошибке сертификата доменный вход завершается без запроса пароля.
Не должно происходить добавление прямого
pam_krb5.so use_pkinit: PKINIT обрабатывается SSSD и Kerberos. -
Перезагрузить ВМ:
sudo reboot