LINUX.ORG.RU
ФорумAdmin

Конфигурация 1С на Linux с SSO Active Directory

 


1

2

Коллеги, здравствуйте. Нужна Ваша помощь, не получается настроить 1С через AD.

Дано: 1С 8.3.27.1719, Debian 12.

hostname: t03-1c11.fd.local

etc/hosts:

#127.0.1.1      T03-1C11.rd.vvv T03-1C11

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
10.98.38.121 t03-1c11.fd.local
10.98.38.122 t03-1c12.fd.local
10.98.38.121 t03-1c11.fd.local
10.98.38.122 t03-1c12
10.98.38.121 t03-1c11```

/etc/krb5.conf:

[libdefaults]
default_realm = FD.LOCAL
dns_lookup_kdc = true
dns_lookup_realm = true
rdns = false
[domain_realm]
.fd.local = FD.LOCAL
fd.local = FD.LOCAL


Keytab сгенерирован: ktpass -princ usr1cv8/t03-1c11.fd.local@FD.LOCAL -mapuser usr1cv8 -pass "hg4FT%#7" -ptype KRB5_NT_SRV_HST -out C:\Temp\usr1cv8.keytab

Права:

chown usr1cv8:grp1cv8 /etc/1C/usr1cv8.keytab
chmod 400 /etc/1C/usr1cv8.keytab

SPN: setspn -A 1CV8/t03-1c11.fd.local usr1cv8

В сервисе указан конфиг:

[Unit]
Description=1C:Enterprise Server 8.3 (8.3.27.1719) (%I)
Requires=network.target

[Service]
# 1C:Enterprise server keytab file.
# default - usr1cv83.keytab file in 1C:Enterprise server
#           installation directory
#
#Environment=SRV1CV8_KEYTAB=/opt/1cv8/x86_64/8.3.27.1719/usr1cv8.keytab
Environment=KRB5_KTNAME=/etc/1C/usr1cv8.keytab
Environment=SRV1CV8_KEYTAB=/etc/1C/usr1cv8.keytab

Билет получаю:


root@t03-1c11:/var/log/1c/rphost_324787# klist -k -K /etc/1C/usr1cv8.keytab
Keytab name: FILE:/etc/1C/usr1cv8.keytab
KVNO Principal
---- --------------------------------------------------------------------------
  11 usr1cv8/t03-1c11.fd.local@FD.LOCAL (0xe83db1d72a4a26bfd4375fdfe9563cb0)
root@t03-1c11:/var/log/1c/rphost_324787# echo ${AD_REALM}
FD.LOCAL
root@t03-1c11:/var/log/1c/rphost_324787# kinit -k -t /etc/1C/usr1cv8.keytab "usr1cv8/$(hostname -f)@${AD_REALM}"
root@t03-1c11:/var/log/1c/rphost_324787# klist
Ticket cache: FILE:/tmp/krb5cc_usr1cv8
Default principal: usr1cv8/t03-1c11.fd.local@FD.LOCAL

Valid starting       Expires              Service principal
23.09.2025 18:57:53  24.09.2025 04:57:53  krbtgt/FD.LOCAL@FD.LOCAL
        renew until 24.09.2025 18:57:52


SSO не отрабатывает. В 1С писал при указании уз домен в нижнем регистре, так и в верхнем:

\\FD.LOCAL\УЗ
\\fd.local\УЗ

В технологическом журнале:

```939  24:41.119008-0,EXCP,2,level=INFO,process=rphost,OSThread=324828,t:clientID=34,Descr='GSS-API error gss_acquire_cred: No credentials were supplied, or the credentials were unavailable or inaccessible
'
  940  24:41.119009-0,EXCP,2,level=INFO,process=rphost,OSThread=324828,t:clientID=34,Descr='GSS-API error gss_acquire_cred: Permission denied```



Последнее исправление: Andrei9385 (всего исправлений: 3)

Какой у тебя DNS суффикс домена?

Условно, если у тебя DNS суффикс «COMPANY.LOCAL», то в случае если это Linux сервер 1С и на ПК где запускается клиент 1С стоит Windows в настройках 1С в поле доменная авторизация или как-то так должно быть указано сопоставление пользователя и доменной учётной записи в формате

\\COMPANY.LOCAL\USER

Если у тебя на ПК, где запускается клиент 1С стоит Linux, то имя пользователя должно отдаваться в формате user@COMPANY.LOCAL, в случае если ты вводил Linux в домен через SSSD по умолчанию у тебя будет не FQDN имя пользователя, а просто user, а должно быть user@COMPANY.LOCAL, смотри настройки SSSD.

Если используешь ввод Linux системы в домен через Winbind, там вроде бы по умолчанию учётки видны в формате user@COMPANY.LOCAL, проверь.

На Linux смотри вывод под доменным пользователем через

id

А под root смотри как система видит доменные учётки:

getent passwd

Если в Linux имя доменного пользователя будет не FQDN, т.е. без DNS суффикса - в kerberos тикетах будут указано просто user и сопоставление в 1С не произойдёт.

Ну и если утебя 1С на Windows сервер - в свойствах пользователя в 1С сопоставление доменной учётной записи должно быть в формате

\\COMPANY\user

В случае, если DNS суффикс твоего домена company.local и короткое NETBIOS (Windows 2000) имя домена COMPANY.

Сам сервер с Linux должен разрешаться в DNS по полному FQDN имени и кластер 1С так же должен быть создан с полным FQDN именем.

Т.е. в выводе

hostname -f

должно быть что-то вроде

server-1c.company.local

а не просто

server-1c

Это всё из-за того ещё, что в Linux версии сервера 1С поддерживается авторизация только по kerberos токенам, а в Windows версии только по NTLM.

Да, если ты хочешь SSO под доменным пользователем через WEB-публикацию Apache - скорее всего не получится.

Читай ИТС.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 3)
[Unit]
Description=1C:Enterprise Server 8.3 (%I)
Requires=network.target

[Service]
Type=simple
User=usr1cv8
Group=grp1cv8

# Path to directory with claster data
Environment=SRV1CV8_DATA=/home/usr1cv8/.1cv8/1C/1cv8/

# Number of the cluster port created by default during first
# launch of ragent
Environment=SRV1CV8_PORT=1540

# Number of cluster agent main port. This port is used by the
# cluster console to address the central server. Cluster agent
# port is also specified as the IP port of the working server.
Environment=SRV1CV8_REGPORT=1541

# Port range for connection pool
Environment=SRV1CV8_RANGE=1560:1591

# Security level:
# 0 - unprotected connections
# 1 - protected connections only for the time of user
#    authentication
# 2 - permanently protected connections
Environment=SRV1CV8_SECLEV=0

# 1C:Enterprise server configuration debug mode
# blank - default - debug mode is off
# -debug - debug mode is on
#
Environment=SRV1CV8_DEBUG=-debug

# Check period for connection loss detector, milliseconds
Environment=SRV1CV8_PING_PERIOD=1000

# Response timeout for connection loss detector, milliseconds
Environment=SRV1CV8_PING_TIMEOUT=5000

# 1C:Enterprise server keytab file.
# default - usr1cv83.keytab file in 1C:Enterprise server
#          installation directory
Environment=KRB5_KTNAME=/opt/1cv8/x86_64/%I/usr1cv8.keytab

ExecStart=/bin/sh -c "/opt/1cv8/x86_64/%I/ragent -d ${SRV1CV8_DATA} -port ${SRV1CV8_PORT} -regport ${SRV1CV8_REGPORT} -range ${SRV1CV8_RANGE} \
-seclev ${SRV1CV8_SECLEV} -pingPeriod ${SRV1CV8_PING_PERIOD} -pingTimeout ${SRV1CV8_PING_TIMEOUT} ${SRV1CV8_DEBUG}"
Restart=always
RestartSec=5

[Install]
DefaultInstance=current
WantedBy=multi-user.target
kostik87 ★★★★★
()
10.98.38.121 t03-1c11.fd.local
10.98.38.122 t03-1c12.fd.local
10.98.38.121 t03-1c11.fd.local
10.98.38.122 t03-1c12
10.98.38.121 t03-1c11

В hosts должна быть запись только для 127.0.0.1 и привязка FQDN имени к внешнему IP, одному. Для корректной отработки

hostname -f

Если имя рабочего сервера 1С у тебя не FQDN в оснастке администрирования - скорее всего, не заработает доменная авторизация. Пересоздавай кластер и переактивируй серверную лицензию, но это в конце, как всё проверишь.

У тебя в принципе все серверы при использовании АД должны разрешаться через DNS.

Но если тебе по какой-то причине нужно в hosts сделать записи, то можно сократить:

10.98.38.121 t03-1c11.fd.local t03-1c11
10.98.38.122 t03-1c12.fd.local t03-1c12
kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
klist -k -t -K /opt/1cv8/x86_64/8.3.27.1719/usr1cv8.keytab
Keytab name: FILE:/opt/1cv8/x86_64/8.3.27.1719/usr1cv8.keytab
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   3 01.01.1970 03:00:00 usr1cv8/t03-1c11.fd.local@FD.LOCAL

setspn -L usr1cv8
Зарегистрирован ServicePrincipalNames для CN=usr1cv8,OU=Service accounts,DC=FD,DC=local:
        usr1cv8/t03-1c11.fd.local
        1C:Enterprise 8.3 Server Agent (x86-64)/prod-1c-01.fd.local
        1C:Enterprise 8.3 Server Agent (x86-64)/prod-1c-03.fd.local

Примерно так должно быть. У одного пользователя может быть несколько SPN записей. В случае, если к Windows серверу приложений 1С должны подключаться Linux клиенты 1С, которые работают только по kerberos - нужно и там создавать SPN записи.

Windows сервер 1С и Windows клиент 1с работают по NTLM.

Да, в целом тут много неявного )

kostik87 ★★★★★
()

Коллеги, здравствуйте. Нужна Ваша помощь, не получается настроить 1С через AD.

Приведите пример хотябы олной уяётной записи пользователя в конфигурации 1С.
Недостаточно лишь указать имя кластера.

anonymous
()
Ответ на: комментарий от kostik87

Переделал на FQDN: https://i.ibb.co/931gkYJh/2025-09-24-123555.png

УЗ 1С: https://ibb.co/mCnHXMJM

a01f465c-ed70-442e-ada5-847668d7a41c: Неверно указан пользователь или пароль
Неправильное имя или пароль пользователя'
39:55.434000-0,EXCP,2,level=WARNING,process=rphost,p:processName=test,OSThread=361363,t:clientID=40,t:applicationName=1CV8C,t:computerName=S03-RDSH11,t:connectID=2,SessionID=1,Exception=580392e6-ba49-4280-ac67-fcd6f2180121,Descr='src/vrsbase/src/VResourceInfoBaseImpl.cpp(1228):
580392e6-ba49-4280-ac67-fcd6f2180121: Неверно указан пользователь или пароль
Ошибка при выполнении запроса POST к ресурсу /e1cib/login:'
39:55.440007-0,CONN,2,level=INFO,process=rphost,p:processName=test,OSThread=361363,t:clientID=40,t:applicationName=1CV8C,t:computerName=S03-RDSH11,t:connectID=2,Txt=eAPSENo
39:55.440008-0,EXCP,2,level=INFO,process=rphost,p:processName=test,OSThread=361363,t:clientID=40,t:applicationName=1CV8C,t:computerName=S03-RDSH11,t:connectID=2,Descr='GSS-API error gss_acquire_cred: No credentials were supplied, or the credentials were unavailable or inaccessible
'
39:55.441000-0,EXCP,2,level=INFO,process=rphost,p:processName=test,OSThread=361363,t:clientID=40,t:applicationName=1CV8C,t:computerName=S03-RDSH11,t:connectID=2,Descr='GSS-API error gss_acquire_cred: Permission denied
'
39:55.461006-0,EXCP,2,level=WARNING,process=rphost,p:processName=test,OSThread=361363,t:clientID=40,t:applicationName=1CV8C,t:computerName=S03-RDSH11,t:connectID=2,SessionID=1,AppID=1CV8C,Exception=a01f465c-ed70-442e-ada5-847668d7a41c,Descr='src/vrsbase/src/VResourceInfoBaseServerImpl.cpp(2766):
a01f465c-ed70-442e-ada5-847668d7a41c: Неверно указан пользователь или пароль
Неправильное имя или пароль пользователя'
39:55.461007-0,EXCP,2,level=WARNING,process=rphost,p:processName=test,OSThread=361363,t:clientID=40,t:applicationName=1CV8C,t:computerName=S03-RDSH11,t:connectID=2,SessionID=1,AppID=1CV8C,Exception=580392e6-ba49-4280-ac67-fcd6f2180121,Descr='src/vrsbase/src/VResourceInfoBaseImpl.cpp(1228):
580392e6-ba49-4280-ac67-fcd6f2180121: Неверно указан пользователь или пароль
Ошибка при выполнении запроса POST к ресурсу /e1cib/login:'```
Andrei9385
() автор топика
Ответ на: комментарий от Andrei9385

Посмотри с каким переменными окружения запущены процессы 1С и что пользователь от имени которого запускаются сервисы может читать keytab файл

pgrep rphost | xargs -I{} cat /proc/{}/environ | tr '\0' '\n'

Ещё в keytab файле и в AD должно совпадать kvno.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от kostik87

Если я верно понял, всё сходиться.

root@t03-1c11:/var/log/1c/rphost_369540# pgrep rphost | xargs -I{} cat /proc/{}/environ | tr '\0' '\n'
LANG=ru_RU.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOME=/home/usr1cv8
LOGNAME=usr1cv8
USER=usr1cv8
SHELL=/bin/sh
INVOCATION_ID=a108e198554141d4a78251be89d1c0ef
JOURNAL_STREAM=8:1484572
SYSTEMD_EXEC_PID=369419
KRB5_KTNAME=/etc/1C/usr1cv8.keytab
SRV1CV8_KEYTAB=/etc/1C/usr1cv8.keytab
SRV1CV8_PORT=1540
SRV1CV8_REGPORT=1541
SRV1CV8_RANGE=1560:1591
SRV1CV8_DEBUG=
SRV1CV8_DATA=/home/usr1cv8/.1cv8/1C/1cv8
SRV1CV8_SECLEV=0
SRV1CV8_PINGPERIOD=1000
SRV1CV8_PINGTIMEOUT=5000
KRB5CCNAME=/home/usr1cv8/krb/krb5cc
GLIBCPP_FORCE_NEW=1
GLIBCXX_FORCE_NEW=1
root@t03-1c11:/var/log/1c/rphost_369540# klist -k -K /etc/1C/usr1cv8.keytab
Keytab name: FILE:/etc/1C/usr1cv8.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   7 usr1cv8/t03-1c11.fd.local@FD.LOCAL (0x5c3f6521594f74a2410856ccd63ca5450d614aaecc9acb354bda75a1a9e3d3d7)
Andrei9385
() автор топика
Ответ на: комментарий от Andrei9385

Коллеги, заработало. Благодарю Вас за помощь, отличный форум! Теперь попробую всё с нуля на чистой виртуалке собрать, чтоб закрепить полученный опыт.

  1. Я переделал кластер на FQDN.
  2. Keytab перегенерировал: ktpass -princ usr1cv8/t03-1c11.fd.local@FD.LOCAL -mapuser usr1cv8 -pass «hg43f%» -out C:\Temp\usr1cv8.keytab -crypto AES256-SHA1 ` -ptype KRB5_NT_SRV_HST

Эти ключи оказались самыми важными:

   -crypto AES256-SHA1 `
   -ptype KRB5_NT_SRV_HST

В топологическом журнале я увидел, что без AES256-SHA1, не работает, клиент 1С выбирает его по умолчанию. А KRB5_NT_SRV_HST привязывает principal к имени хоста.

  1. Пересоздал конфиг сервиса:
[Unit]
Description=1C:Enterprise Server 8.3 (8.3.27.1719) (%i)
After=network.target
Wants=network.target

[Service]
Type=simple
User=usr1cv8
Group=grp1cv8

# Kerberos keytab
Environment=KRB5_KTNAME=/etc/1C/usr1cv8.keytab
Environment=SRV1CV8_KEYTAB=/etc/1C/usr1cv8.keytab

# Cluster ports
Environment=SRV1CV8_PORT=1540
Environment=SRV1CV8_REGPORT=1541
Environment=SRV1CV8_RANGE=1560:1591

# Debug mode (empty = off)
Environment=SRV1CV8_DEBUG=

# Path to cluster data
Environment=SRV1CV8_DATA=/home/usr1cv8/.1cv8/1C/1cv8

# Security and ping settings
Environment=SRV1CV8_SECLEV=0
Environment=SRV1CV8_PINGPERIOD=1000
Environment=SRV1CV8_PINGTIMEOUT=5000

ExecStart=/opt/1cv8/x86_64/8.3.27.1719/ragent \
    -d ${SRV1CV8_DATA} \
    -port ${SRV1CV8_PORT} \
    -regport ${SRV1CV8_REGPORT} \
    -range ${SRV1CV8_RANGE} \
    -seclev ${SRV1CV8_SECLEV} \
    -pingPeriod ${SRV1CV8_PINGPERIOD} \
    -pingTimeout ${SRV1CV8_PINGTIMEOUT} \
    $SRV1CV8_DEBUG

Restart=always
RestartSec=1

[Install]
WantedBy=multi-user.target

Где указал:

Environment=KRB5_KTNAME=/etc/1C/usr1cv8.keytab Environment=SRV1CV8_KEYTAB=/etc/1C/usr1cv8.keytab

Andrei9385
() автор топика
Ответ на: комментарий от Andrei9385
ExecStart=/opt/1cv8/x86_64/8.3.27.1719/ragent \
    -d ${SRV1CV8_DATA} \
    -port ${SRV1CV8_PORT} \
    -regport ${SRV1CV8_REGPORT} \
    -range ${SRV1CV8_RANGE} \
    -seclev ${SRV1CV8_SECLEV} \
    -pingPeriod ${SRV1CV8_PINGPERIOD} \
    -pingTimeout ${SRV1CV8_PINGTIMEOUT} \
    $SRV1CV8_DEBUG

Лучше заменить хотя бы вот эту часть на

ExecStart=/opt/1cv8/x86_64/%I/ragent

Тогда запускать вот так:

systemctl enable --now srv1cv83@8.3.27.1719

А для перехода на другую версию:

systemctl disable srv1cv83@8.3.27.1719
systemctl stop srv1cv83@8.3.27.1719
systemctl enable --now srv1cv83@8.3.27.1801
kostik87 ★★★★★
()