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

Преамбула.
У нас имеется работающий на ОС Linux (CentOS7) сервер «1С:Предприятие». Сервер работает на хосте srv-app01, входящем в домен local.domain.name.

1. Настройка кластера сервера 1С:Предприятие

Настройка и управление кластером сервера «1С:Предприятие» происходит с компьютера с ОС Windows, так что для управления сервером нужно использовать традиционную оснастку mmc для Windows «Администрирование серверов 1С:Предприятие», которую следует установить из дистрибутива технологической платформы для Windows (ссылка).

Обязательно нужно настроить «Параметры рабочего сервера», как показано ниже:

Если этого не сделать, то после входа N-го количества пользователей в 1С, будут появляться сообщения об ошибке:

Свойства кластера 'Критический объем памяти процессов', 'Режим распределения нагрузки' или свойства рабочего сервера 'Критический объем памяти процессов', 'Временно допустимый объем памяти процессов', 'Интервал превышения допустимого объема памяти процессов', 'Безопасный расход памяти за один вызов', 'Количество ИБ на процесс' содержат значения, отличные от значений по умолчанию.

Использование этих функций возможно только для лицензий на платформу уровня КОРП.

Это связано с тем, что «..начиная с версий платформы «1С:Предприятие» 8.3.12.1852, 8.3.13.1791 и 8.3.14.1592, вводятся ограничения на техническом уровне, не позволяющие использовать функциональность КОРП». Подробнее можно посмотреть здесь.

2. Настройка Kerberos-аутентификации

Для решения поставленной задачи настроим Kerberos-аутентификацию сервера «1С:Предприятие».

 а) Настройка контроллера домена

  • Имя сервера srv-app01 обязательно должно разрешаться  DNS-сервером (если его ввели в домен, то соответствующая запись в DNS-сервере есть).

  • Создать в домене учетную запись пользователя, с которой будут ассоциироваться запросы авторизации к серверу 1С:Предприятие. Имя может быть произвольное. В нашем случае это будет пользователь usr1cv8x с паролем XxXxXx. В свойствах этой уч`тной записи на вкладке «Учётная запись» в секции «Параметры учётной записи:» следует сбросить флажок «Use DES encryption types with this account»:

  • Для пользователя usr1cv8x следует сгенерировать файл с секретным ключом на компьютере с ОС Windows. Для этого используется утилита ktpass, входящая в состав в пакета Windows Support Tools (его можно найти в подкаталоге SUPPORT установочного диска Windows).

В командной строке запустим утилиту ktpass, которая «свяжет» доменного пользователя с пользователем, от имени которого работает сервер «1С:Предприятие»:

C:\>ktpass -princ usr1cv8/srv-app01.local.domain.ru@local.domain.ru -mapuser usr1cv8x -pass XxXxXx -out usr1cv8.keytab
C:\>

В результате будет создан файл usr1cv8.keytab в текущей директории (в нашем случае это корень диска C:), а c пользователем usr1cv8x будет ассоциировано имя участника службы usr1cv8/srv-app01.local.domain.ru.

  • usr1cv8/srv-app01.local.domain.ru — это стандартное имя службы. Оно включает в себя имя локального пользователя, от имени которого на центральном сервере кластера запускается сервер «1С:Предприятие» (usr1cv8).

  • usr1cv8x, указываемое в параметре mapuser, — это имя доменного пользователя, которого мы создали.

  • В параметре pass передаётся пароль доменной учётной записи usr1cv8x.

  • В параметре out указывается имя файла с ключом. В нашем случае это usr1cv8.keytab.

 б) Настройка центрального сервера кластера «1С:Предприятие»

На сервере srv-app01 проверим работу системы аутентификации. Для этого выполним команду kinit <имя>, где имя — это имя произвольного пользователя, зарегистрированного в домене. Далее введём пароль этого пользователя и нажмём «Enter». Если после этого программа не выдаст никаких сообщений, значит, всё хорошо.

[root@srv-app01]# kinit mailquery
Password for mailquery@local.domain.ru:
[root@srv-app01]#

Убедимся, что все в порядке:

[root@srv-app01]# klist
Ticket cache: KEYRING:persistent:20001:krb_ccache_532ruYi
Default principal: mailquery@local.domain.ru
 
Valid starting   	Expires          	Service principal
14.12.2018 15:48:12  15.12.2018 01:48:12  krbtgt/local.domain.ru@local.domain.ru renew until 21.12.2018 15:48:09
[root@srv-app01]#
[root@srv-app01]# kdestroy
[root@srv-app01]#

Как видно, мы получили от KDC (Key Distribution Center — центр распределения ключей, эту функцию выполняет контроллер домена) так называемый ticket-granting ticket. После этого следует с помощью команды kdestroy очистить локальный кэш тикетов, чтобы вернуться в исходное состояние.

Далее любым способом следует передать файл с секретным ключом usr1cv8.keytab, полученный во время настройки контроллера домена, на центральный сервер кластера «1С:Предприятия». Этот файл следует скопировать в директорию, где установлен сервер «1С:Предприятие» (по умолчанию это /opt/1C/v8.3/x86_64), и установить права и владельца файла как показано ниже:

[root@srv-app01]# cd /opt/1C/v8.3/x86_64
[root@srv-app01]# chown usr1cv8:grp1cv8 usr1cv8.keytab
[root@srv-app01]# chmod 600 usr1cv8.keytab
[root@srv-app01]#

При желании файл можно разместить в любом другом месте, нужно только изменить переменную SRV1CV8_KEYTAB в конфигурационном файле (/etc/sysconfig/srv1cv83), чтобы она указывала на новое местоположение файла с секретным ключом.

После этого с помощью команды klist проверяем, всё ли мы сделали правильно. Для этого выполним команду:

[root@srv-app01]# klist -e -k -t /opt/1C/v8.3/x86_64/usr1cv8.keytab
Keytab name: FILE:/opt/1C/v8.3/x86_64/usr1cv8.keytab
KVNO Timestamp       	Principal
---- ------------------- ------------------------------------------------------
   1 01.01.1970 07:00:00 usr1cv8/srv-app01.local.domain.ru@local.domain.ru (arcfour-hmac)
[root@srv-app01]#

Мы видим, что файл с секретным ключом содержит именно то, что нам нужно — в колонке Principal указано то самое имя службы, которое мы задавали при создании файла с секретным ключом, и правильный алгоритм шифрования (arcfour-hmac для RC4-HMAC).

Далее проверим возможность работы Kerberos без пароля с использованием секретного ключа. С помощью команды kinit укажем, что надо использовать аутентификационную информацию из файла (в нашем случае /opt/1C/v8.3/x86_64/usr1cv8.keytab) и прочитать оттуда ключ для сервиса usr1cv8/srv-app01.local.domain.ru@local.domain.ru. В результате программа kinit должна отработать без каких-либо сообщений, не спрашивать никаких паролей и вернуть управление обратно в командную строку:

[root@srv-app01]# kinit -k -t /opt/1C/v8.3/x86_64/usr1cv8.keytab usr1cv8/srv-app01.local.domain.ru@local.domain.ru
[root@srv-app01]#

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

[root@srv-app01]# klist
Ticket cache: KEYRING:persistent:20001:krb_ccache_d9U38xU
Default principal: usr1cv8/srv-app01.local.domain.ru@local.domain.ru
 
Valid starting   	Expires          	Service principal
14.12.2018 16:22:32  15.12.2018 02:22:32  krbtgt/local.domain.ru@local.domain.ru renew until 21.12.2018 16:22:32
[root@srv-app01]#

Если что-то настроено не так, то эта команда выведет следующее:

[root@srv-app01]# klist
klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_1000)
Kerberos 4 ticket cache: /tmp/tkt1000
 
klist: You have no tickets cached
[root@srv-app01]#

Если проверка работоспособности прошла успешно, это значит, что с данного момента сервер кластера «1С:Предприятия» способен обрабатывать запросы на аутентификацию. При этом перезапуск сервера не требуется, кроме того случая, когда в конфигурационном файле было изменено место расположения файла с секретным ключом.

в) Настройка пользователей в информационных БД «1С:Предприятие»

Для настройки аутентификации пользователей в информационной БД «1С:Предприятие» с помощью доменной учетной записи нужно запустить БД под Администратором. 

Перейти в «Администрирование», слева в списке выбрать «Пользователи»

В появившемся окне «Пользователи» выбрать нужного пользователя. 

В свойствах пользователя выбрать «Аутентификация операционной системы» и в поле «Пользователь» нажать на кнопку «...»

В окне «Выбор пользователя операционной системы» в списке «Домены» выбрать домен «local.domain.ru»

В списке «Пользователи» выбрать нужного пользователя и нажать на кнопку «Выбрать». Должно получиться как на скриншоте:

Эти действия нужно повторить для всех пользователей БД.

В результате мы получаем решение, при котором пользователю не требуется совершать дополнительных действий по вводу логина и пароля для запуска приложения. Система определяет пользователя операционной системы, запускающего приложение, и соотносит с имеющейся ролью в конфигурации «1С». Использование единой системы авторизации в прикладных приложениях удобно как для пользователя, так и для администратора конфигурации «1С» — не нужно обслуживать дополнительную локальную базу пользователей приложения.

Комментарии (11)


  1. impexp
    11.11.2021 12:06
    +1

    Это всё здорово, а можно ли авторизовать пользователя БЕЗ домена? В любом случае, идентификация пользователя в 1С происходит не по удостоверению Kerberos, а ТОЛЬКО по сопоставлению домена и имени текущего юзера с тем, что в строке автоматической аутентификации: при создании "левого" домена с таким же именем подключается без проблем, проверял! Что же мешает сделать эту авторизацию по host/user, которая была бы удобна на терминальных серверах в малых организациях без AD?


    1. 1shaman Автор
      11.11.2021 12:43

      «Каждый, право, имеет право,
      На то, что слева, и то, что справа...»
      Пожалуйста, пробуйте!
      В данном случае рассматривается решение (удобное) для организации, имеющей централизованную систему авторизации.


  1. scruff
    11.11.2021 17:31
    -1

    Приветствую, коллеги. Поделитесь, пожалуйста, рабочим мануалом, как поставить Сервер 1С на линукс c MySQL или Postgres. С простейшей аут-ей в через саму 1С.


    1. 13werwolf13
      12.11.2021 07:27

      да там мануала ненадо

      1) ставим debian/ubuntu/oraclelinux не сильно важно

      2) ставим postgrespro (postgres ванильный не подойдёт а mysql в 1С вообще-то говоря не поддерживается)

      3) соеденяем

      до кучи я обычно ещё web ставлю

      если нужна помошь советами пиши в личку буду рад помочь ибо помню как в первый раз без подсказок проходил этим путём


  1. pvv38
    12.11.2021 11:17

    С сервером 1С:Предприятие на linux с доменной авторизацией все вроде как понятно. А вот как быть с клиентами на linux ? Вход в систему с AD учетной записью на linux давно решенный вопрос и работает стабильно. Тот же Thunderbird отлично подключается к MS Exchange без дополнительного ввода имен/паролей, используя GSSAPI. А вот 1С клиент линуксовый не умеет до сих пор использовать доменную авторизацию. Разработчики платформы видимо что-то начали делать, но не доделали. В руководстве администратора на платформу 8.3.20 в разделе "6.2.9.3. Аутентификация операционной системы" есть примечание: "Клиентское приложение для ОС Linux или macOS не поддерживает аутентификацию средствами операционной системы." (для просмотра содержимого по ссылке нужна действующая подписка ИТС)


    1. 1shaman Автор
      12.11.2021 11:18

      В статье именно описано решение, которое позволяет запускать клиентское приложение, используя доменную авторизацию.
      Ссылаюсь на ваше замечание: "..6.2.9.3. Аутентификация операционной системы. Пользователь может быть аутентифицирован неявно средствами операционной системы. Для этого пользователю должен быть поставлен в соответствие некоторый пользователь операционной системы. "

      По факту реализации решения: когда вы запускаете клиента 1С на компьютере, входящем в домен, вы получаете роль (в конфигурации 1С), закрепленную за доменным пользователем.
      Если буквально ответить на ваш вопрос "… А вот как быть с клиентами на linux..":
      — зарегистрируйте рабочую станцию Linux в домене AD;
      — установите клиентское приложение «1С»;
      — настройте подключение к серверу предприятия «1С»
      — запустите приложение

      И будет вам счастье…


      1. pvv38
        12.11.2021 15:28

        Доменной авторизацией в 1С мы пользуемся уже не один год и как она работает, я в курсе. Наш положительный опыт, правда, ограничивается конфигурацией win сервер - win клиент. При попытке использовать win сервер - linux клиента, доменный вход не работает. Вчера, прочитав, статью решил вернуться к этому вопросу еще раз.

        - зарегистрируйте рабочую станцию Linux в домене AD; - выполнено, станция введена в домен, доменная авторизация работает, как я писал выше, с другими приложениями.

        И следующие три пункта выполнены, а вот с "и будет вам счастье" не выходит. Включил технологический журнал. В руководстве написано "Определить правильное написание пользователя операционной системы можно по его представлению в событии CONN технологического журнала в свойстве Txt, которое начинается с текста Srvr: DstUserName2" С win клиента так и происходит, а вот при попытке входа с linux клиента появляются записи с DstUserName1, а вот DstUserName2 не появляются. Проверяли имя вида "\\dom1\user" (так работает в windows) и "\\dom1.dom2.ru\user" - не работает.

        Может работает только связка linux сервер - linux клиент ? Вы видели рабочую доменную авторизацию на linux клиенте ? Если да, будем искать у себя в чем проблема.


        1. 1shaman Автор
          15.11.2021 06:27

          Вопрос авторизации станции Linux в домене AD (Windows) не относится к теме статьи. Однако на вопрос «Вы видели рабочую доменную авторизацию на linux клиенте?» отвечу — видел. У нас эта схема (авторизации linux в домене AD) успешно эксплуатируется уже более 5 лет. Более того, этот вопрос довольно подробно описан в руководствах «отечественных» ОС, например: redos.red-soft.ru/base/arm/arm-domen/arm-msad


          1. pvv38
            16.11.2021 14:18

            "Вопрос авторизации станции Linux в домене AD (Windows) не относится к теме статьи." И поэтому, когда я писал "linux клиент", я подразумевал "1С linux клиент". Если Вы внимательно прочитаете написанное мной выше, то увидите: в одном комментарии "Вход в систему с AD учетной записью на linux давно решенный вопрос и работает стабильно." и в другом "зарегистрируйте рабочую станцию Linux в домене AD; - выполнено" По совпадению, именно редОС. Впрочем, моя ошибка: надо писать конкретно, а не подразумевать.

            Так или иначе, я склонен верить официальной документации 1С и надеюсь, что в последних версиях 1С клиента под linux, действительно появилась доменная аутентификация.


      1. pvv38
        12.11.2021 16:51

        После написания комментария, прошелся поиском на тему "1c linux клиент доменная авторизация". И среди жалоб "не работает", увидел новость от 06.07.21: В ближайших исправительных релизах платформы (начиная с версии 8.3.17) появится поддержка аутентификации пользователей средствами ОС с использованием протокола Kerberos в тонком клиенте в ОС Linux.

        Пошел смотреть списки изменений по релизам на portal.1c.ru И нашел в списке изменений 8.3.20.1590 от 01.11.21, что в 8.3.17 Для клиентских приложений «1С:Предприятие», работающих под управлением ОС Linux, реализована поддержка аутентификации операционной системы с использованием протокола Kerberos.

        Самое интересное, что про это изменение не написано ни в одном более раннем списке изменений версий 8.3.17-8.3.20 ( я по крайней мере не нашел, а там их больше двух десятков )

        Я у себя проверял на версии 8.3.12. и переехать на новые релизы пока шансов нет.

        Так что, если поддержка доменной аутентификации на клиентах в linux и появилась, то совсем недавно. Месяца три, не более.


        1. 1shaman Автор
          15.11.2021 06:28

          Статья описывает внедренное несколько лет назад решение, сейчас используется версия 8.3.12.89. Делайте выводы сами. В конце концов есть платная техническая поддержка.