1С: Ошибка аутентификации Kerberos через keytab в Linux (GSS-API / SSO)
Архитектура сквозной аутентификации (SSO Kerberos) 1С в Linux
Сквозная Windows-аутентификация (Single Sign-On, SSO) в гетерогенной среде (клиенты Windows $\leftrightarrow$ сервер 1С на Linux $\leftrightarrow$ контроллер домена Active Directory) реализуется через интерфейс GSS-API (Generic Security Services) и протокол Kerberos v5. Сервер 1С использует файл секретных ключей keytab (обычно /opt/1cv8/x86_64/8.3.X.X/usr1cv8.keytab или /etc/krb5.keytab) для расшифровки билетов Kerberos (Ticket Granting Service, TGS), передаваемых клиентом. При нарушении конфигурации пользователи получают ошибку:
«Ошибка аутентификации пользователя / Неверное имя пользователя или пароль / GSS-API error: Defective token detected / Key table entry not found / Clock skew too great»
Бизнес-риски
Полный сбой автоматического входа сотрудников в 1С, появление сотен обращений в Helpdesk с запросом ввода паролей, блокировка доменных учетных записей из-за множественных неверных попыток.
Параметры Kerberos Principal Name (SPN)
| Параметр | Формат / Значение | Описание |
|---|---|---|
SPN | 1cv8/srv-1c-lnx.corp.local@CORP.LOCAL | Служебное имя принципала сервера 1С в домене. |
| Тип шифрования | AES256-CTS-HMAC-SHA1-96 / RC4-HMAC | Алгоритм шифрования билета (рекомендуется строго AES-256). |
| KVNO | Key Version Number (целое число 1, 2, 3...) | Версия ключа. Несовпадение KVNO делает keytab невалидным. |
Пошаговая настройка и траблшутинг Kerberos SSO для 1С на Linux
Сценарий 1: Генерация корректного keytab файла на контроллере домена Active Directory
На контроллере домена Windows Server выполните команду утилиты ktpass:
# Генерация файла keytab на контроллере домена (PowerShell / CMD от Администратора):
ktpass -princ 1cv8/srv-1c-lnx.corp.local@CORP.LOCAL ^
-mapuser CORP\usr1cv8_srv ^
-pass 'ComplexPassword123!' ^
-crypto AES256-SHA1 ^
-ptype KRB5_NT_PRINCIPAL ^
-out C:\temp\usr1cv8.keytab
# Проверка привязки SPN к сервисной учетной записи:
setspn -L CORP\usr1cv8_srvСценарий 2: Настройка /etc/krb5.conf на Linux-сервере 1С
# Скопируйте usr1cv8.keytab в /etc/1cv8.keytab на Linux и настройте /etc/krb5.conf:
sudo nano /etc/krb5.conf
[libdefaults]
default_realm = CORP.LOCAL
default_keytab_name = /etc/1cv8.keytab
dns_lookup_realm = false
dns_lookup_kdc = true
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac
default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac
[realms]
CORP.LOCAL = {
kdc = dc01.corp.local
kdc = dc02.corp.local
admin_server = dc01.corp.local
}
[domain_realm]
.corp.local = CORP.LOCAL
corp.local = CORP.LOCALСценарий 3: Проверка keytab и получение билета через kinit
# 1. Проверка прав на файл keytab (пользователь usr1cv8 обязан иметь доступ!):
sudo chown usr1cv8:grp1cv8 /etc/1cv8.keytab
sudo chmod 600 /etc/1cv8.keytab
# 2. Просмотр содержимого keytab и номера KVNO:
klist -k -e /etc/1cv8.keytab
# 3. Тестовая аутентификация по keytab без ввода пароля:
kinit -k -t /etc/1cv8.keytab 1cv8/srv-1c-lnx.corp.local@CORP.LOCAL
# 4. Проверка полученного билета TGT:
klistТиповые ошибки администраторов
- Рассинхронизация времени более 5 минут (Clock Skew): Протокол Kerberos отклоняет аутентификацию, если часы сервера 1С и контроллера домена расходятся более чем на 300 секунд. Настройте Chrony/NTP.
- Регистр букв в krb5.conf: Имя REALM домена ОБЯЗАНО быть написано ЗАГЛАВНЫМИ БУКВАМИ (например,
CORP.LOCAL), иначе Kerberos завершится с ошибкой Realm not found.
Инженеры ITSTM настроят сквозную авторизацию Active Directory / FreeIPA, сгенерируют валидные keytab и исключат запросы паролей у пользователей.
Частые вопросы (FAQ)
Почему после смены пароля сервисной учетной записи в AD перестал работать SSO?
При смене пароля учетной записи в Active Directory увеличивается номер версии ключа KVNO. Старый файл keytab теряет валидность, требуется заново сгенерировать keytab через ktpass.
Как указать серверу 1С путь к кастомному keytab файлу?
Путь задается через переменную окружения KRB5_KTNAME=/etc/1cv8.keytab в service unit systemd или файле /etc/default/srv1cv83.
Что означает ошибка Kerberos 'Integrity check on decrypted field failed'?
Это говорит о несовпадении пароля, использованного при генерации keytab, с фактическим паролем пользователя в Active Directory, либо о несовпадении типа шифрования (AES vs RC4).
Работает ли Kerberos SSO в 1С через Web-клиент (Apache/Nginx)?
Да, но требует дополнительной настройки модуля mod_auth_gssapi / SPNEGO на веб-сервере публикации информационной базы.