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

Подготовка ВМ с РЕД ОС 8 к вводу в домен и авторизации по JaCarta

Для подготовки ВМ с РЕД ОС 8 к вводу в домен и авторизации по JaCarta необходимо поочередно выполнить действия:

  1. Подготовить ВМ и подключить к домену.
  2. Настроить доверие PKI и компоненты JaCarta.
  3. Настроить доменную аутентификацию по сертификату.
  4. Настроить обязательный вход.

Шаг 1: Подготовка ВМ и подключение к домену

  1. Перейти в терминал и установить необходимые пакеты с помощью команды:

    dnf install pcsc-lite pcsc-lite-ccid pcsc-tools opensc pam_pkcs11 p11-kit p11-kit-trust realmd adcli sssd sssd-tools oddjob oddjob-mkhomedir samba-common samba-common-tools krb5-workstation krb5-pkinit nss-tools chrony gnutls authselect
  2. Открыть конфигурационный файл /etc/chrony.conf и добавить строку:

    server 3.ru.pool.ntp.org iburst
  3. Перезапустить сервис chrony:

    systemctl restart chronyd
  4. Изменить DNS-сервер для используемого подключения NetworkManager через GUI-интерфейс или с помощью команды:

    nmcli connection modify "{{ item }}" ipv4.ignore-auto-dns yes ipv4.dns "{{ AD-DC ip}}"

    где {{ item }} — имя активного соединения в NetworkManager.
    {{ AD-DC ip }} — IP-адрес контроллера домена.

    Получить имя активного соединения в NetworkManager можно с помощью команды:

    nmcli -t -f NAME connection show --active
  5. Перезапустить NetworkManager:

    systemctl restart NetworkManager
  6. Присоединить ВМ к домену с помощью команд:

    hostnamectl set-hostname <новое имя ВМ>.<имя домена>
    realm discover <имя домена>
    realm join --verbose --user='<УЗ администратора AD>@<Kerberos realm>' <имя домена>

    Пароль учетной записи администратора AD ввести в интерактивном запросе команды realm join.

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

  8. На ВМ установить Space Agent VDI.

Шаг 2: Настройка доверия PKI и компонентов JaCarta

  1. Создать каталоги pam_pkcs11 для сертификатов и списков отзыва с владельцем root и правами 0755:

    install -d -o root -g root -m 0755 /etc/pam_pkcs11/cacerts /etc/pam_pkcs11/crls
  2. Скопировать сертификаты Корневого УЦ и Подчиненного УЦ в директории:

    • /etc/pki/ca-trust/source/anchors/
    • /etc/pam_pkcs11/cacerts/
  3. Скопировать список отзывов подчинённого УЦ в директории:

    • /etc/pki/ca-trust/source/anchors/
    • /etc/pam_pkcs11/crls
  4. Выполнить команды:

    update-ca-trust extract
    /usr/bin/pkcs11_make_hash_link /etc/pam_pkcs11/cacerts
    /usr/bin/pkcs11_make_hash_link /etc/pam_pkcs11/crls
  5. Установить единый клиент JaCarta согласно документации производителя.

  6. Выполнить команду:

    systemctl enable --now pcscd.socket
  7. Создать директорию для nssdb с правами на чтение и выполнение для пользователей, но с правом записи только для root:

    install -d -o root -g root -m 0755 /etc/pki/nssdb
  8. Если директория уже существовала, принудительно проверить и исправить ее владельца и права:

    chown root:root /etc/pki/nssdb
    chmod 0755 /etc/pki/nssdb
    stat -c 'mode=%a owner=%U:%G path=%n' /etc/pki/nssdb

    Результат проверки должен содержать:

    mode=755 owner=root:root path=/etc/pki/nssdb

  9. Если SQL-база NSS еще не создана, инициализировать ее без пароля командами:

    if ! certutil -L -d sql:/etc/pki/nssdb >/dev/null 2>&1; then
         certutil -N -d sql:/etc/pki/nssdb --empty-password
    fi
  10. Добавить библиотеку JaCarta в SQL-базу nssdb при помощи команды:

    modutil -dbdir sql:/etc/pki/nssdb -add "Jacarta PKCS11" -libfile /usr/lib64/libjcPKCS11-2.so
  11. Добавить в nssdb сертификаты Корневого и Подчиненного УЦ при помощи команд:

    certutil -d sql:/etc/pki/nssdb -A -n 'AD-ROOT' -t CT,CT,CT -a -i /etc/pki/ca-trust/source/anchors/<сертификат корневого УЦ>
    certutil -d sql:/etc/pki/nssdb -A -n 'AD-SUBCA' -t CT,CT,CT -a -i /etc/pki/ca-trust/source/anchors/<сертификат подчиненного УЦ>
  12. Добавить в директорию /usr/share/p11-kit/modules файл Jacarta.module.

    Содержимое файла Jacarta.module:

    module:/usr/lib64/libjcPKCS11-2.so

  13. Сделать модуль JaCarta по умолчанию в nssdb командой:

    modutil -default "Jacarta PKCS11" -dbdir sql:/etc/pki/nssdb -mechanisms RSA:DSA:RC4:DES
  14. Проверить созданную SQL-базу NSS, добавленные сертификаты и модуль JaCarta командами:

    certutil -L -d sql:/etc/pki/nssdb
    modutil -dbdir sql:/etc/pki/nssdb -list

    В выводе certutil должны присутствовать сертификаты AD-ROOT и AD-SUBCA, а в выводе modutil — модуль "Jacarta PKCS11" с библиотекой /usr/lib64/libjcPKCS11-2.so.


Шаг 3: Настройка доменной аутентификации по сертификату

  1. Внести правки в файл /etc/pam_pkcs11/pam_pkcs11.conf. Файл необходимо привести к виду, представленному ниже.

    Файл /etc/pam_pkcs11/pam_pkcs11.conf
    pam_pkcs11 {
        nullok = true;
        debug = false;
        card_only = true;
        use_first_pass = false;
        try_first_pass = false;
        use_authtok = false;
        use_pkcs11_module = jacarta;
        screen_savers = gnome-screensaver,xscreensaver,kscreensaver,mate-screensaver;
    
        pkcs11_module jacarta {
            module = /usr/lib64/libjcPKCS11-2.so
            slot_num = 0;
            ca_dir = /etc/pam_pkcs11/cacerts;
            nss_dir = /etc/pki/nssdb;
            crl_dir = /etc/pam_pkcs11/crls;
            cert_policy=ca, signature;
        }
    
        use_mappers = cn, uid, pwent, null;
        mapper_search_path = /usr/$LIB/pam_pkcs11;
    
        mapper pwent {
            debug = false;
            ignorecase = false;
            module = internal;
            # module = /usr/$LIB/pam_pkcs11/pwent_mapper.so;
        }
    
        mapper null {
            debug = false;
            # module = /usr/$LIB/pam_pkcs11/null_mapper.so;
            module = internal ;
            # select behavior: always match, or always fail
            default_match = false;
            # on match, select returned user
            default_user = nobody ;
        }
    
        mapper cn {
            debug = false;
            module = internal;
            # module = /usr/$LIB/pam_pkcs11/cn_mapper.so;
            ignorecase = true;
            mapfile = file:///etc/pam_pkcs11/cn_map;
        }
    
        mapper uid {
            debug = false;
            module = internal;
            # module = /usr/$LIB/pam_pkcs11/uid_mapper.so;
            ignorecase = false;
            mapfile = "none";
        }
    }
  2. Внести правки в файл /etc/sssd/sssd.conf. Файл необходимо привести к виду, представленному ниже.

    Файл /etc/sssd/sssd.conf

    [sssd]  
    domains = example.com  
    config_file_version = 2  
    services = nss, pam  
    #certificate_verification = no_ocsp  
    
    [domain/example.com]  
    ad_domain = example.com  
    ad_server = dc.example.com  
    krb5_realm = EXAMPLE.COM  
    case_sensitive = False  
    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  
    dns_resolver_timeout = 10  
    use_fully_qualified_names = False  
    fallback_homedir = /home/%u@%d  
    enumerate = false  
    ldap_referrals = false  
    dyndns_update = true  
    dyndns_refresh_interval = 43200  
    dyndns_update_ptr = true  
    dyndns_ttl = 3600  
    dyndns_auth = GSS-TSIG  
    krb5_renewable_lifetime = 7d  
    krb5_renew_interval = 300s  
    
    [nss]  
    
    [pam]  
    pam_cert_auth = True  
    debug_level = 10  
    p11_child_timeout = 60  
    pam_cert_db_path = /etc/pki/tls/certs/ca-bundle.crt  
    pam_p11_allowed_services = +gdm-smartcard, +mate-screensaver, +glint-service  
    
    [certmap/EXAMPLE.COM/nt_principal]   
    maprule = (|(userPrincipalName={subject_nt_principal})(samAccountName={subject_nt_principal.short_name}))  
    domains = EXAMPLE.COM  
    В качестве имени домена и имени контроллера домена необходимо использовать имена существующей инфраструктуры.

  3. После сохранения файла /etc/sssd/sssd.conf необходимо назначить владельца root и права 0600 с помощью команд ниже. Запуск SSSD не происходит, если конфигурационный файл доступен для чтения другим пользователям.

    chown root:root /etc/sssd/sssd.conf
    chmod 0600 /etc/sssd/sssd.conf
  4. Проверить конфигурацию и применить ее с помощью команд:

    sssctl config-check
    systemctl enable --now oddjobd.service sssd.service
    systemctl restart sssd.service
    systemctl status sssd.service --no-pager -l
  5. Проверить разрешение доменного пользователя:

    getent passwd '<имя пользователя>@<имя домена>'

    Команда должна вернуть учетную запись доменного пользователя. Если вывода нет, перед переходом к включению обязательной аутентификации по смарт-карте необходимо проверить состояние SSSD, DNS и членство ВМ в домене.

  6. Внести правки в файл /etc/krb5.conf. Файл необходимо привести к виду, представленному ниже.

    Файл /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]
            default_realm = EXAMPLE.COM
            dns_lookup_realm = false
            dns_lookup_kdc = true
            ticket_lifetime = 24h
            renew_lifetime = 7d
            forwardable = true
            rdns = false
            pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
            pkinit_kdc_hostname = dc.example.com
            pkinit_identities = PKCS11:/usr/lib64/libjcPKCS11-2.so
            pkinit_eku_checking = none
            default_ccache_name = FILE:/tmp/krb5cc_%{uid}
            canonicalize = true
    
    [realms]
    EXAMPLE.COM = {
            kdc = dc.example.com
            admin_server = dc.example.com
            default_domain = example.com
    }
    
    [domain_realm]
    .example.com = EXAMPLE.COM
    example.com = EXAMPLE.COM
    
    [appdefaults]
        pam = {
            debug = true
        }

    В качестве имени домена и имени контроллера домена необходимо использовать имена из существующей инфраструктуры.


Шаг 4: Настройка обязательного входа

  1. Для пользователя, который будет проходить авторизацию по протоколу GLINT, необходимо выполнить команды:

    gpasswd --add '<имя пользователя>@<имя домена>' space_usbip
    loginctl enable-linger '<имя пользователя>@<имя домена>'
  2. Проверить членство пользователя в группе и состояние linger с помощью команд:

    id '<имя пользователя>@<имя домена>'
    loginctl show-user '<имя пользователя>@<имя домена>' -p Linger
  3. Убедиться, что установлен MATE:

    command -v mate-session

    При отсутствии MATE создать файл настройки рабочего стола и выбрать MATE в качестве графической сессии для GLINT:

    sudo touch /etc/sysconfig/desktop
    sudo sed -i '/^PREFERRED=/d' /etc/sysconfig/desktop
    printf '%s\n' 'PREFERRED="$(type -p mate-session)"' | sudo tee -a /etc/sysconfig/desktop >/dev/null

    Проверить добавленную строку командой:

    grep '^PREFERRED=' /etc/sysconfig/desktop
  4. Проверить текущий режим SELinux с помощью команд:

    getenforce
    grep '^SELINUX=' /etc/selinux/config

    Если SELinux находится в режиме Enforcing, перевести его в Permissive с помощью команд:

    setenforce 0
    sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config

    Внимание

    Если SELinux находится в режиме Disabled, не использовать данную инструкцию для переключения. Переход из Disabled в Permissive требует отдельной процедуры с восстановлением меток файловой системы и перезагрузкой. Режим Disabled не блокирует доступ SSSD и PC/SC к JaCarta.

  5. Если glint-launcher не может запустить Xorg из-за запрета Xwrapper, в /etc/X11/Xwrapper.config добавить строку:

    allowed_users = anybody
  6. Выполнить команду, которая включает обязательный вход по смарт-карте и блокировку при ее извлечении:

    authselect select sssd with-smartcard with-smartcard-required with-smartcard-lock-on-removal with-mkhomedir --force
  7. Проверить примененный профиль с помощью команд:

    authselect check
    authselect current
  8. Перезагрузить ВМ.