Перейти к содержанию

Подготовка ВМ с ОС 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 включает следующие шаги:

  1. Подготовка новой ВМ и настройка доступа по SSH.
  2. Настройка DNS, имени ВМ, времени и компонентов ОС.
  3. Ввод ВМ в Active Directory.
  4. Установка Root CA, SubCA и CRL.
  5. Установка JaCarta и регистрация PKCS#11-модуля.
  6. Настройка SSSD и Kerberos PKINIT.
  7. Установка Space Agent VDI и настройка GLINT.
  8. Включение обязательного входа по JaCarta.

Подготовка новой ВМ и настройка доступа по SSH

  1. Подключиться к ВМ через VNC/SPICE-консоль.
  2. Установить 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.

  3. Определить адрес ВМ в Web-интерфейсе SpaceVM или с помощью команды:

    ip -br address
  4. Подключиться с административного компьютера, используя локальную учетную запись ssh administrator@10.254.32.112.

  5. Выйти с помощью команды exit.

  6. На административном компьютере создать ключ, если его ещё нет, и добавить публичный ключ на ВМ:

    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
  7. Убедиться, что последнее подключение по SSH к ВМ было выполнено без запроса пароля пользователя administrator. Парольная фраза закрытого ключа, если она задана, может запрашиваться отдельно.

  8. До включения обязательного входа по JaCarta сохранить доступ по SSH и создать снимок ВМ.

  9. Создать рабочий каталог и поместить в него 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, имени ВМ, времени и компонентов ОС

  1. Указать 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.socket

    astra184-jc-02.certs.local — имя ВМ, Проводное соединение 1 — профиль NetworkManager.

  2. Настроить синхронизацию времени с контроллером домена и выполнить проверку:

    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
  3. Выполнить проверку 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

  1. Выполнить ввод в домен. В запросе указать пароль доменной учётной записи, у которой есть разрешение на ввод АРМ в AD:

    sudo astra-ad-sssd-client -d 'certs.local' -dc 'CERTS-ADDC.certs.local' -u 'Администратор' -px -fn -y
  2. Проверить, что SSSD разрешает доменного пользователя:

    getent passwd 'ivan-ivanov@certs.local'

    SSSD (System Security Services Daemon) — это пакет приложений для управления аутентификацией и авторизацией в операционных системах на базе Linux.


Установка Root CA, SubCA и CRL

Внимание

Перед запуском в командах ниже необходимо заменить значения УЦ и пути в соответствии с существующей инфраструктурой.

  1. Проверить формат и идентификаторы файлов, скопированных с узла 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.

  2. Если один или несколько исходных файлов имеют 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
  3. Для 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-модуля

  1. Распаковать архив и запустить официальный установщик Единого клиента 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'
  2. На 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

  1. Определить точный 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
  2. Создать каталог и открыть файл /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
  3. Заменить в примере ниже данные в соответствии с существующей инфраструктурой, а часть $<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 = 10

    CN=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.

  4. Установить права, проверить синтаксис и перезапустить 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.

  5. Перед созданием PKINIT-файла проверить, что /etc/krb5.conf подключает каталог /etc/krb5.conf.d/. Если строки нет, добавить её перед разделом [libdefaults]:

    includedir /etc/krb5.conf.d/
  6. Сохранить резервную копию основного файла 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
  7. Создать каталог и открыть /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
  8. Заменить 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}
  9. Установить владельца и права, затем вывести итоговые параметры 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

  1. Подключить 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
  2. Запустить штатный установщик Space Agent VDI из локальной копии ISO-образа. Перед запуском убедиться, что используется install.sh из нужной версии Space Agent VDI.

    sudo bash -c 'cd /opt/space-agent-vdi && exec bash ./install.sh'
  3. Во время установки отвечать на вопросы установщика в соответствии с настройками инфраструктуры. Если установщик спрашивает о выделенной метке PDPLabel, для инфраструктуры без отдельной метки ответить no.

  4. После завершения работы установщика обновить конфигурацию 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
  5. В /etc/pam.d/glint-service первый прямой вызов SSSD должен иметь вид:

    auth sufficient pam_sss.so require_cert_auth
  6. Если строка 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

  1. Включить штатный профиль 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
  2. Проверить итоговый 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.

  3. Перезагрузить ВМ:

    sudo reboot