SSO (Kerberos) на сервере 1С под Linux: Сквозная авторизация Active Directory
Архитектура SSO для 1С на Linux
Сквозная аутентификация (SSO / Single Sign-On) позволяет пользователям домена Windows (Active Directory) подключаться к информационным базам 1С без ввода логина и пароля. Если сервер 1С (rphost) работает под управлением Linux, аутентификация NTLM недоступна. Используется протокол Kerberos (GSS-API). Архитектурно клиент (mstsc/Толстый клиент) запрашивает Ticket Granting Ticket (TGT) у контроллера домена (KDC), а затем Service Ticket (ST) для доступа к службе 1С. Бизнес-риски отсутствия SSO: парольная усталость пользователей, высокие затраты HelpDesk на сброс паролей в 1С, низкий уровень ИБ.
Ключевые компоненты Kerberos для 1С
| Компонент | Расположение | Назначение |
|---|---|---|
SPN (Service Principal Name) | Active Directory (Атрибуты учетной записи) | Идентификатор службы. Формат для 1С: USR1CV8/server.domain.local. |
krb5.conf | Linux Server (/etc/krb5.conf) | Конфигурационный файл клиента Kerberos. Указывает Realm и адреса KDC (Контроллеров домена). |
.keytab файл | Linux Server (/opt/1cv8/x86_64/...) | Криптографический ключ, позволяющий серверу 1С расшифровывать билеты (Tickets) от AD без пароля в явном виде. |
Пошаговая настройка Kerberos на сервере 1С (Linux)
Сценарий 1: Генерация Keytab на контроллере домена (Windows Server)
Создайте сервисного пользователя в AD (например, svc_1c_krb). Включите для него опцию "Do not require Kerberos preauthentication" и отключите срок действия пароля. Откройте CMD от имени Администратора:
-- Регистрация SPN для сервера 1С
setspn -A USR1CV8/1c-linux.corp.local corp\svc_1c_krb
setspn -A USR1CV8/1c-linux corp\svc_1c_krb
-- Генерация файла keytab (укажите пароль учетки svc_1c_krb)
ktpass -princ USR1CV8/1c-linux.corp.local@CORP.LOCAL -mapuser svc_1c_krb -pass MySecretPass123! -crypto All -ptype KRB5_NT_PRINCIPAL -out c:\1c_server.keytabСценарий 2: Настройка Linux сервера (CentOS/Ubuntu)
Скопируйте 1c_server.keytab на Linux сервер (например, в /opt/1cv8/x86_64/conf/usr1cv8.keytab).
# Настройка прав на файл keytab (владелец usr1cv8)
chown usr1cv8:grp1cv8 /opt/1cv8/x86_64/conf/usr1cv8.keytab
chmod 600 /opt/1cv8/x86_64/conf/usr1cv8.keytab
# Редактирование /etc/krb5.conf
[libdefaults]
default_realm = CORP.LOCAL
dns_lookup_realm = false
dns_lookup_kdc = true
default_keytab_name = FILE:/opt/1cv8/x86_64/conf/usr1cv8.keytabСценарий 3: Настройка пользователей в 1С
- Откройте Конфигуратор -> Администрирование -> Пользователи.
- Откройте карточку пользователя, перейдите на вкладку "Аутентификация".
- Включите галочку "Аутентификация операционной системы".
- В поле "Пользователь" выберите пользователя из домена (формат:
\CORP\ivanov).
Типовые ошибки администраторов
- Ошибки DNS и времени: Kerberos критически зависим от точного времени. Разница во времени между KDC (AD) и сервером Linux более 5 минут приведет к ошибке 'Clock skew too great'. Обязательно настройте службу chrony (NTP). Также Linux должен корректно разрешать имя AD по DNS.
- Несовпадение регистра в krb5.conf: Имя REALM (домена) в конфигурационных файлах Kerberos ВСЕГДА должно писаться ЗАГЛАВНЫМИ БУКВАМИ (например,
CORP.LOCAL). Использование строчных букв приведет к сбою поиска билета.
Частые вопросы (FAQ)
Как проверить, что Linux сервер может получить билет Kerberos?
Используйте команду kinit. Выполните: kinit svc_1c_krb@CORP.LOCAL. Введите пароль. Затем выполните klist. Если вы видите кэшированный билет krbtgt, значит связь с AD и настройки DNS/времени корректны.
Как проверить валидность файла keytab на Linux?
Выполните команду: klist -k -t /opt/1cv8/x86_64/conf/usr1cv8.keytab. Она выведет список principal-ов, сохраненных в файле. Там должен быть ваш USR1CV8/1c-linux.corp.local@CORP.LOCAL.
Почему SSO не работает при подключении по IP-адресу?
Kerberos работает только по FQDN (полным доменным именам). При обращении по IP-адресу клиент не может запросить правильный SPN у контроллера домена, и авторизация откатывается (fallback) до NTLM или ручного ввода.
Нужно ли настраивать SSO для веб-клиента 1С на Linux?
Да, но там механизм немного другой. Помимо настройки сервера 1С, необходимо настроить GSSAPI в веб-сервере (Apache HTTPD + модуль mod_auth_gssapi или Nginx + nginx-auth-spnego-module).