Как реализовать управление пользователями Active Directory и базами 1С на сервере Linux?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Переход серверов 1С на операционную систему Linux ставит перед разработчиками и системными администраторами сложную задачу: как продолжать управлять инфраструктурой Active Directory (AD), если привычные механизмы COM-объектов (такие как ADSI) больше не доступны? В этой статье мы подробно разберем, как организовать централизованное создание пользователей в домене, почтовых сервисах и других базах 1С, используя современные инструменты, совместимые с Linux.

Использование прямого протокола LDAP для работы с Active Directory

Поскольку в Linux мы лишены возможности использовать NewObject("ADODB.Connection") или COMОбъект("LDAP://..."), основным способом взаимодействия с контроллером домена становится протокол LDAP/LDAPS. Проанализируем, как можно реализовать это программно.

Рассмотрим использование внешних компонент (Native API). Это наиболее стабильный и быстрый путь. Компоненты, написанные на C++ или Rust и использующие библиотеку libldap, позволяют выполнять поиск, создание и удаление объектов напрямую из кода 1С. Разберем алгоритм действий:

  1. Подключаем внешнюю компоненту в коде 1С.
  2. Устанавливаем защищенное соединение (LDAPS) с контроллером домена (порт 636).
  3. Выполняем авторизацию под сервисным аккаунтом, имеющим права на изменение конкретного Organizational Unit (OU).
  4. Передаем структуру атрибутов пользователя (CN, sAMAccountName, userPrincipalName, displayName).

Если разработка собственной компоненты избыточна, воспользуемся стандартными утилитами Linux, такими как ldapadd и ldapmodify. Для этого нам потребуется сформировать текстовый файл в формате LDIF (LDAP Data Interchange Format). Пример структуры такого файла для создания пользователя:


dn: cn=Ivan Ivanov,ou=Users,dc=company,dc=com
changetype: add
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: Ivan Ivanov
sn: Ivanov
givenName: Ivan
sAMAccountName: i.ivanov
userPrincipalName: i.ivanov@company.com

Управление через Samba-tool и системные скрипты

Если ваш сервер 1С введен в домен с помощью Samba или Winbind, мы можем использовать мощную утилиту samba-tool. Это наиболее надежный способ управления специфическими атрибутами Windows-домена, такими как userAccountControl (активация учетной записи и установка флага «пароль не истекает»).

Проанализируем ситуацию: как вызвать эту команду из 1С? Для этого используем метод ЗапуститьПриложение. Рекомендуется не вызывать утилиту напрямую с длинным списком параметров, а подготовить bash-скрипт на сервере, который будет принимать параметры от 1С.

Посмотрим на пример оформления вызова скрипта из модуля 1С:


КомандаЗапуска = "/opt/scripts/add_ad_user.sh " + ИмяПользователя + " " + Пароль;
ЗапуститьПриложение(КомандаЗапуска, , Истина); // Истина - ждать завершения

В самом скрипте add_ad_user.sh мы можем использовать конструкцию:


#!/bin/bash
samba-tool ads user add $1 $2 --userou="OU=Employees,DC=company,DC=com"

Это позволяет абстрагировать логику системного администрирования от программного кода 1С, что делает систему более гибкой и безопасной.

PowerShell Core как мост между мирами

Не стоит забывать, что PowerShell Core (pwsh) официально доступен для Linux. Это позволяет администраторам использовать привычный синтаксис. Выясним, как это применить. Хотя стандартный модуль ActiveDirectory требует Windows, мы можем использовать командлеты для работы с LDAP (например, New-LdapEntry) или отправлять команды на удаленный контроллер домена через SSH-туннель.

Разберем по шагам схему работы через PowerShell Core:

  1. Устанавливаем pwsh на Linux-сервер, где работает 1С.
  2. В 1С формируем временный файл скрипта .ps1 с необходимыми данными.
  3. Запускаем выполнение скрипта через ЗапуститьПриложение.
  4. Считываем результат выполнения (код возврата или лог-файл).

Синхронизация пользователей между базами 1С через HTTP и OData

Когда стоит задача создать пользователя в «Бухгалтерии» при приеме сотрудника в «ЗУП», использование COM-соединения на Linux также невозможно. Рассмотрим альтернативные методы взаимодействия между базами.

Метод 1: Использование стандартного интерфейса OData. В 1С есть встроенный механизм, позволяющий обращаться к объектам базы через REST-запросы. Выясним причину, почему это удобно: вам не нужно писать код в целевой базе (например, в БП), достаточно включить стандартный интерфейс OData.

Проанализируем пример кода для создания пользователя через HTTP-запрос:


Запрос = Новый HTTPЗапрос("/odata/standard.odata/Catalog_Пользователи");
Запрос.УстановитьТелоИзСтроки(ДанныеПользователяВJSON);
Соединение = Новый HTTPСоединение(АдресСервераБП, , ЛогинАдмина, ПарольАдмина);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);

Метод 2: Собственный HTTP-сервис. Этот метод более гибкий. В целевой базе создается HTTP-сервис, который принимает JSON-пакет. Внутри сервиса вы можете не только создать элемент справочника «Пользователи», но и программно создать ПользовательИнформационнойБазы, установить ему права, пароль и связать с физическим лицом.

Автоматизация создания почтовых ящиков

Если ваша компания использует Microsoft Exchange, управление им с Linux-сервера 1С лучше всего реализовать через Microsoft Graph API. Это современный REST-интерфейс, работающий по протоколу HTTPS.

Если же используется Linux-ориентированная почтовая система (например, Zimbra или Postfix), создание ящика часто сводится к выполнению API-команды сервера или прямой записи в SQL-таблицу базы данных почтовика. В 1С для этого используются «Внешние источники данных» или объект ВнешняяИнформационнаяБаза (через ODBC-драйвер для Linux).

Вопросы безопасности и архитектурный подход

Важно понимать, что предоставление серверу 1С прав администратора домена — это огромная дыра в безопасности. Рассмотрим, как минимизировать риски:

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

← На главную