Здравствуйте, исходные данные стенда:
Альт линукс сервер сп, на нем контроллер домена самба, и удостоверяющий центр., самба развернута, два пользователя, один стандартный Administrator, второй создан Test, сертификат УЦ выпущен, подписан привязан к УЗ и записан на рутокен 3.0.
АРМ №1 Альт линукс 8 СП обновлен через СП репозиторий, бранч F1, введен в домен
АРМ №2 Альт линукс СП обновлен через СП репозиторий до, бранч F2,введен в домен
Теперь в чем проблема, нужна авторизация по рутокену без возможности входа, для УЗ домена по паролю, но с возможностью входа локальной УЗ по паролю, но втык на одном из этапов- на F1 обновлении удалось настроить вход, уход в блокировку экрана, с шероховатостями, но работает стабильно и штатно, но на F2 бранче, при чем не важно обновлять систему в начале или в конце, вход по ЭП работает, но, после блокировки экрана вход по пинкоду просто недоступен, ОС упорно запрашивает пароль вместо пинкода,, внизу произведенные настройки, может поможет. Спасибо:
ЧАСТЬ 1. НАСТРОЙКА СЕРВЕРА (SAMBA DC)
1.1. Подготовка сервера
apt-get install librtpkcs11ecp pcsc-lite-ccid pcsc-lite pcsc-tools opensc libp11 p11-kit gnutls-utils
systemctl enable –now pcscd.socket
pcsc_scan -r
pkcs11-tool –module /usr/lib64/librtpkcs11ecp.so –list-token-slots
1.2. Создание Удостоверяющего центра (CA)
mkdir -p ~/demoCA/{certs,newcerts,private}
touch ~/demoCA/index.txt
echo «01» > ~/demoCA/serial
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out ~/demoCA/private/cakey.pem
openssl req -new -x509 -key ~/demoCA/private/cakey.pem -out ~/demoCA/certs/cacert.pem -days 3650 -subj «/C=RU/ST=Moscow/O=ДОМЕН/CN=CA»
1.3. Создание сертификата KDC (сервера домена)
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out ~/demoCA/private/dc-key.pem
openssl req -new -key ~/demoCA/private/dc-key.pem -out ~/demoCA/dc-req.csr -subj «/C=RU/ST=Moscow/O=ДОМЕН/CN=СЕРВЕР»
cat > ~/demoCA/cert_extension_KDC << ‘EOF’
[kdc_cert]
basicConstraints=CA:FALSE
keyUsage=nonRepudiation,digitalSignature,keyEncipherment,keyAgreement
extendedKeyUsage=1.3.6.1.5.2.3.5
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
issuerAltName=issuer:copy
subjectAltName=otherName:1.3.6.1.5.2.2;SEQUENCE:kdc_princ_name
[kdc_princ_name]
realm=EXP:0,GeneralString:ДОМЕН
principal_name=EXP:1,SEQUENCE:kdc_principal_seq
[kdc_principal_seq]
name_type=EXP:0,INTEGER:1
name_string=EXP:1,SEQUENCE:kdc_principals
[kdc_principals]
princ1=GeneralString:krbtgt
princ2=GeneralString:ДОМЕН
EOF
openssl ca -batch -in ~/demoCA/dc-req.csr -out ~/demoCA/certs/dc-cert.pem -cert ~/demoCA/certs/cacert.pem -extfile ~/demoCA/cert_extension_KDC -extensions kdc_cert
1.4. Настройка Samba и Kerberos
mkdir -p /var/lib/samba/private/tls/
cp ~/demoCA/certs/{cacert.pem,dc-cert.pem} /var/lib/samba/private/tls/
cp ~/demoCA/private/dc-key.pem /var/lib/samba/private/tls/
chmod 600 /var/lib/samba/private/tls/dc-key.pem
В /etc/samba/smb.conf в секцию [global] добавить:
tls enabled = yes
tls certfile = /var/lib/samba/private/tls/dc-cert.pem
tls keyfile = /var/lib/samba/private/tls/dc-key.pem
tls cafile = /var/lib/samba/private/tls/cacert.pem
В /etc/krb5.conf добавить секцию:
[kdc]
enable-pkinit = yes
pkinit_identity = FILE:/var/lib/samba/private/tls/dc-cert.pem,/var/lib/samba/private/tls/dc-key.pem
pkinit_anchors = FILE:/var/lib/samba/private/tls/cacert.pem
pkinit_principal_in_certificate = yes
pkinit_win2k_require_binding = yes
systemctl restart samba
1.5. Подготовка Рутокена и создание сертификата пользователя
pkcs11-tool –module /usr/lib64/librtpkcs11ecp.so –init-token –slot 0 –label «МЕТКА_ТОКЕНА» –so-pin ПИН_АДМИНА
pkcs11-tool –module /usr/lib64/librtpkcs11ecp.so –init-pin –login –pin ПИН_ПОЛЬЗОВАТЕЛЯ –so-pin ПИН_АДМИНА
pkcs11-tool –module /usr/lib64/librtpkcs11ecp.so –pin ПИН_ПОЛЬЗОВАТЕЛЯ –login –keypairgen –key-type rsa:2048 –id ID_КЛЮЧА –label МЕТКА_КЛЮЧА –token-label МЕТКА_ТОКЕНА
cat > ~/openssl-req.cnf << ‘EOF’
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
prompt = no
[ req_distinguished_name ]
C = RU
ST = Moscow
O = ДОМЕН
CN = ПОЛЬЗОВАТЕЛЬ
[ req_ext ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = otherName:1.3.6.1.4.1.311.20.2.3;UTF8:ПОЛЬЗОВАТЕЛЬ@ДОМЕН
extendedKeyUsage = clientAuth,1.3.6.1.4.1.311.20.2.2
EOF
openssl req -new -out ~/rt_smb.csr -keyform engine -engine pkcs11 -key «pkcs11:token=МЕТКА_ТОКЕНА;object=МЕТКА_КЛЮЧА» -passin pass:ПИН_ПОЛЬЗОВАТЕЛЯ -config ~/openssl-req.cnf
openssl x509 -req -in ~/rt_smb.csr -out ~/rt_smb.pem -CA ~/demoCA/certs/cacert.pem -CAkey ~/demoCA/private/cakey.pem -CAserial ~/demoCA/serial -days 365 -extfile ~/openssl-req.cnf -extensions req_ext
pkcs11-tool –module /usr/lib64/librtpkcs11ecp.so –pin ПИН_ПОЛЬЗОВАТЕЛЯ –login –write-object ~/rt_smb.pem –type cert –id ID_КЛЮЧА –label МЕТКА_КЛЮЧА –token-label МЕТКА_ТОКЕНА
pkcs11-tool –module /usr/lib64/librtpkcs11ecp.so –pin ПИН_ПОЛЬЗОВАТЕЛЯ –login –list-objects
1.6. Создание доменного пользователя
samba-tool user create ПОЛЬЗОВАТЕЛЬ ‘Pa$$word’ –given-name=rutoken
В ADMC (Центр управления Active Directory) для пользователя ПОЛЬЗОВАТЕЛЬ включить опцию:
«Смарт-карта необходима для интерактивного входа в систему»
samba-tool user show ПОЛЬЗОВАТЕЛЬ
ЧАСТЬ 2. НАСТРОЙКА КЛИЕНТА (АЛЬТ РАБОЧАЯ СТАНЦИЯ)
2.1. Установка необходимого ПО
apt-get update
apt-get install librtpkcs11ecp pcsc-lite pcsc-lite-ccid pcsc-tools opensc pam_pkcs11 libp11 sssd
2.2. Настройка pcscd
systemctl stop pcscd.socket
systemctl disable pcscd.socket
systemctl enable –now pcscd
mkdir -p /etc/systemd/system/pcscd.service.d
cat > /etc/systemd/system/pcscd.service.d/override.conf << ‘EOF’
[Service]
Restart=always
RestartSec=3
EOF
systemctl daemon-reload
2.3. Создание симлинков для модуля PAM
ln -sf /usr/lib64/librtpkcs11ecp.so /lib64/opensc-pkcs11.so
ln -sf /usr/lib64/librtpkcs11ecp.so /usr/lib64/opensc-pkcs11.so
2.4. Копирование сертификата CA
mkdir -p /etc/pki/tls/certs
cp /путь/к/cacert.pem /etc/pki/tls/certs/
chmod 644 /etc/pki/tls/certs/cacert.pem
2.5. Настройка pam_pkcs11
mkdir -p /etc/security/pam_pkcs11/cacerts
cp /etc/pki/tls/certs/cacert.pem /etc/security/pam_pkcs11/cacerts/
c_rehash /etc/security/pam_pkcs11/cacerts/
cat > /etc/security/pam_pkcs11/pam_pkcs11.conf << ‘CONFIG’
pam_pkcs11 {
debug = false;
use_pkcs11_module = opensc;
use_mappers = «pwent»;
nullok = true;
ca_dir = «/etc/security/pam_pkcs11/cacerts»;
pkcs11_module opensc {
module = /usr/lib64/librtpkcs11ecp.so;
slot_num = 0;
}
}
CONFIG
2.6. Настройка PAM для различных служб
Для графического входа (LightDM):
cat > /etc/pam.d/lightdm << ‘EOF’
#%PAM-1.0
auth sufficient pam_pkcs11.so
auth sufficient pam_sss.so
auth required pam_unix.so try_first_pass
account sufficient pam_sss.so
account required pam_unix.so
password sufficient pam_sss.so
password required pam_unix.so sha512 shadow try_first_pass
session optional pam_sss.so
session required pam_unix.so
session optional pam_mate_keyring.so auto_start
EOF
Для экрана блокировки (mate-screensaver):
cat > /etc/pam.d/mate-screensaver << ‘EOF’
#%PAM-1.0
auth sufficient pam_pkcs11.so
auth sufficient pam_sss.so
auth required pam_unix.so try_first_pass
account sufficient pam_sss.so
account required pam_unix.so
session optional pam_sss.so
session required pam_unix.so
EOF
Для текстовой консоли (login):
cat > /etc/pam.d/login << ‘EOF’
#%PAM-1.0
auth sufficient pam_sss.so
auth required pam_securetty.so
auth include common-auth
account include common-account
password include common-password
session substack common-session
session optional pam_lastlog.so nowtmp
session optional pam_motd.so
session optional pam_mail.so
-session optional pam_console.so
-session optional pam_ck_connector.so
EOF
Для переключения на root (su):
cat > /etc/pam.d/su << ‘EOF’
#%PAM-1.0
auth sufficient pam_rootok.so
auth required pam_succeed_if.so uid = 0 quiet
auth include system-auth
account include system-auth
password include system-auth
session include system-auth
session optional pam_xauth.so
EOF
2.7. Настройка common-auth и других common-файлов
cat > /etc/pam.d/common-auth << ‘EOF’
#%PAM-1.0
auth sufficient pam_pkcs11.so
auth sufficient pam_sss.so
auth required pam_unix.so try_first_pass
EOF
cat > /etc/pam.d/common-account << ‘EOF’
#%PAM-1.0
account sufficient pam_sss.so
account required pam_unix.so
EOF
cat > /etc/pam.d/common-session << ‘EOF’
#%PAM-1.0
session optional pam_sss.so
session required pam_unix.so
EOF
cat > /etc/pam.d/common-password << ‘EOF’
#%PAM-1.0
password sufficient pam_sss.so
password required pam_unix.so sha512 shadow try_first_pass
EOF
2.8. Настройка SSSD
cat > /etc/sssd/sssd.conf << ‘EOF’
[sssd]
config_file_version = 2
services = nss, pam
domains = ДОМЕН
[nss]
[pam]
pam_cert_auth = True
pam_p11_allowed_services = +gdm-password, +gdm-smartcard, +login, +sshd, +mate-screensaver
pam_cert_db_path = /etc/pki/tls/certs/cacert.pem
p11_child_timeout = 60
[domain/ДОМЕН]
id_provider = ad
auth_provider = ad
chpass_provider = ad
access_provider = ad
default_shell = /bin/bash
fallback_homedir = /home/%d/%u
ad_gpo_ignore_unreadable = True
ad_gpo_access_control = permissive
krb5_auth_timeout = 60
ldap_user_extra_attrs = userPrincipalName
ldap_user_certificate = userCertificate
[certmap/ДОМЕН/adcerts]
matchrule = .ДОМЕН.
maprule = (userPrincipalName={subject_principal})
EOF
chmod 600 /etc/sssd/sssd.conf
2.9. Настройка LightDM
cat >> /etc/lightdm/lightdm.conf << ‘EOF’
[Seat:*]
greeter-show-manual-login=true
greeter-hide-users=false
user-session=mate
allow-guest=false
EOF
2.10. Создание пользователя в AccountsService
mkdir -p /var/lib/AccountsService/users
cat > /var/lib/AccountsService/users/ПОЛЬЗОВАТЕЛЬ << ‘EOF’
[User]
SystemAccount=false
XSession=mate
Icon=
EOF
chmod 644 /var/lib/AccountsService/users/ПОЛЬЗОВАТЕЛЬ
2.11. Настройка UDEV для правильных прав на токен
cat > /etc/udev/rules.d/99-rutoken.rules << ‘EOF’
Rutoken ECP
ACTION==«add|change», SUBSYSTEM==«usb», ATTRS{idVendor}==«0a89», ATTRS{idProduct}==«0020», MODE=«0666»
EOF
udevadm control –reload-rules
udevadm trigger
2.12. Настройка автоматического перезапуска служб после ждущего режима
cat > /etc/systemd/system/resume-pcscd.service << ‘EOF’
[Unit]
Description=Restart pcscd and sssd after resume
After=suspend.target
[Service]
Type=oneshot
ExecStart=/bin/systemctl restart pcscd
ExecStart=/bin/sleep 2
ExecStart=/bin/systemctl restart sssd
ExecStart=/bin/sleep 1
[Install]
WantedBy=suspend.target
EOF
systemctl enable resume-pcscd.service
2.13. Создание домашней директории пользователя
mkdir -p /home/ДОМЕН/ПОЛЬЗОВАТЕЛЬ
chown -R ПОЛЬЗОВАТЕЛЬ:«domain users» /home/ДОМЕН/ПОЛЬЗОВАТЕЛЬ
chmod 700 /home/ДОМЕН/ПОЛЬЗОВАТЕЛЬ
2.14. Запуск и проверка служб
systemctl restart pcscd sssd lightdm
systemctl enable pcscd sssd lightdm
2.15. Проверка работы
Проверка токена:
pkcs11-tool –module /usr/lib64/librtpkcs11ecp.so –pin ПИН_ПОЛЬЗОВАТЕЛЯ –login –list-objects
Должны увидеть Public Key, Private Key и Certificate.
Проверка Kerberos:
kinit -X X509_user_identity=PKCS11:librtpkcs11ecp.so ПОЛЬЗОВАТЕЛЬ
klist