Как настроить доступ сервера 1С на Ubuntu к сетевым дискам Windows?

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

При переходе сервера 1С:Предприятие на операционную систему Linux (в частности, Ubuntu) администраторы часто сталкиваются с тем, что серверный код 1С перестает «видеть» привычные сетевые ресурсы Windows. Попытка обратиться к каталогу вида \\extlan\obmen или //extlan/obmen вызывает ошибку о том, что каталог не найден, хотя через графический проводник Ubuntu (под учетной записью администратора) папка успешно открывается.

В этой статье мы подробно разберем, почему возникает эта проблема, как устроена работа с сетевыми ресурсами в ОС Linux, и пошагово настроим стабильное и безопасное монтирование сетевых папок для сервера 1С.

Выясняем причину: почему графический проводник видит сеть, а 1С — нет?

Когда вы открываете сетевую папку через графический интерфейс Ubuntu, операционная система «на лету» монтирует её в виртуальную файловую систему текущего пользователя (обычно через протокол GVFS). Этот ресурс доступен только вашей текущей сессии.

Сервер 1С:Предприятие работает как фоновая служба (демон) от имени специального системного пользователя usr1cv8 (группа grp1cv8). Этот пользователь не имеет графической сессии, не знает о ваших временных подключениях в проводнике и по умолчанию не имеет никаких прав на внешние сетевые ресурсы. Чтобы сервер 1С мог читать и записывать файлы в сетевую папку Windows, эту папку необходимо жестко и постоянно примонтировать на уровне всей операционной системы Linux с явным указанием прав для пользователя usr1cv8.

Разберем весь процесс настройки по шагам.

Шаг 1. Установка клиента CIFS

Для работы с сетевыми ресурсами Windows (протокол SMB/CIFS) в Linux необходим специальный пакет. Установим его через терминал. Выполним команду:


sudo apt-get update
sudo apt-get install cifs-utils

Этот пакет позволит монтировать удаленные сетевые каталоги Windows точно так же, как если бы это были локальные папки на жестком диске вашего сервера.

Шаг 2. Создание локальной точки монтирования

В Linux все устройства и сетевые ресурсы должны быть «привязаны» к определенной локальной папке. Создадим директорию, через которую сервер 1С будет обращаться к сетевому диску. Обычно для этого используется каталог /mnt или /media. Создадим папку /mnt/obmen:

sudo mkdir -p /mnt/obmen

Пока мы не примонтировали диск, эта папка пуста. После монтирования в ней появится содержимое сетевого ресурса \\extlan\obmen.

Шаг 3. Безопасное хранение учетных данных (Credentials)

Для подключения к Windows-шаре требуются логин и пароль. Указывать их в конфигурационных файлах в открытом виде крайне небезопасно. Создадим скрытый файл, в котором будут храниться только данные авторизации, и ограничим к нему доступ.

Создадим файл в каталоге суперпользователя root:

sudo nano /root/.smbcredentials

Внутри файла напишем следующие строки (замените данные на ваши реальные параметры сети):


username=windows_user_name
password=windows_password
domain=workgroup

Если в вашей сети нет домена Windows, в поле domain укажите имя вашей рабочей группы (по умолчанию WORKGROUP).

Сохраним файл (в редакторе nano для этого нужно нажать Ctrl+O, затем Enter, и для выхода — Ctrl+X).

Теперь защитим этот файл от чтения другими пользователями системы, оставив права только для root:

sudo chmod 600 /root/.smbcredentials

Шаг 4. Настройка прав доступа для процесса сервера 1С

Это самый важный шаг, который часто упускают из виду. Нам нужно узнать идентификаторы (UID и GID) пользователя, под которым запускается сервер 1С. В большинстве дистрибутивов это пользователь usr1cv8.

Выясним числовые ID пользователя и группы, выполнив команду:

id usr1cv8

В выводе команды мы увидим что-то вроде: uid=999(usr1cv8) gid=1001(grp1cv8).... Нам понадобятся именно эти цифры (в вашем случае они могут отличаться, например, 999 или 1005).

Шаг 5. Настройка автоматического монтирования в /etc/fstab

Чтобы сетевой диск автоматически подключался при старте сервера Ubuntu, пропишем его в файл конфигурации монтирования `/etc/fstab`.

Откроем файл на редактирование:

sudo nano /etc/fstab

Добавим в самый конец файла одну строку. Обратите внимание, что параметры пишутся без пробелов, через запятую:


//extlan/obmen /mnt/obmen cifs credentials=/root/.smbcredentials,uid=usr1cv8,gid=grp1cv8,file_mode=0770,dir_mode=0770,iocharset=utf8,_netdev,x-systemd.automount 0 0

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

  1. //extlan/obmen — сетевой путь к общему ресурсу Windows (символы слэша в fstab используются прямые /, а не обратные \).
  2. /mnt/obmen — локальная точка монтирования, которую мы создали на Шаге 2.
  3. cifs — тип файловой системы для работы по сетевому протоколу SMB.
  4. credentials=/root/.smbcredentials — путь к защищенному файлу с логином и паролем.
  5. uid=usr1cv8,gid=grp1cv8 — принудительно назначает владельцем всех файлов на примонтированном диске пользователя и группу сервера 1С. Вместо имен можно указать числовые ID из Шага 4 (например, uid=999,gid=1001).
  6. file_mode=0770,dir_mode=0770 — предоставляет полные права (чтение, запись, выполнение) владельцу (серверу 1С) и его группе, закрывая доступ всем остальным локальным пользователям в целях безопасности.
  7. iocharset=utf8 — указывает кодировку для корректного отображения имен файлов на русском языке.
  8. _netdev — указывает системе, что это сетевой ресурс. Монтирование начнется только после того, как на сервере поднимутся сетевые интерфейсы. Это предотвращает зависание операционной системы при загрузке.
  9. x-systemd.automount — современный параметр инициализации. Он монтирует папку «по требованию» (в тот момент, когда к ней впервые обращается сервер 1С). Если сеть временно пропадет, система автоматически восстановит подключение при следующем обращении к каталогу.

Шаг 6. Проверка монтирования

После сохранения изменений в `/etc/fstab` выполним команду, которая применит настройки без перезагрузки сервера:


sudo systemctl daemon-reload
sudo mount -a

Проверим, успешность операции. Перейдем в каталог и посмотрим список файлов:

ls -la /mnt/obmen

Если вы увидели файлы, находящиеся на сетевом диске \\extlan\obmen, и их владельцем числится usr1cv8 — настройка выполнена идеально!

Возможные проблемы: Версии протокола SMB

Если при выполнении команды mount -a вы получаете ошибку подключения (например, Host is down или Mount error(112): Host is down), скорее всего, ваше сетевое хранилище (старый NAS или старая версия Windows) использует устаревшую версию протокола SMBv1 или SMBv2, в то время как современная Ubuntu по умолчанию требует SMBv3.

В этом случае в строку `/etc/fstab` в параметры монтирования нужно явно добавить версию протокола. Например, для поддержки старых хранилищ добавьте параметр vers=1.0 или vers=2.0:


//extlan/obmen /mnt/obmen cifs credentials=/root/.smbcredentials,uid=usr1cv8,gid=grp1cv8,file_mode=0770,dir_mode=0770,iocharset=utf8,vers=1.0,_netdev,x-systemd.automount 0 0

Шаг 7. Кроссплатформенная работа с путями в коде 1С

Теперь рассмотрим ситуацию, упомянутую в обсуждении форума: как организовать совместную работу пользователей Windows-клиентов и сервера 1С на Linux?

Windows-клиенты работают с путями в формате UNC (например, \\extlan\obmen\dogovor.pdf). Сервер 1С, запущенный на Linux, этот путь прочесть не сможет, так как для него этот файл физически находится по пути /mnt/obmen/dogovor.pdf.

Для решения этой проблемы в коде конфигурации 1С необходимо реализовать функцию трансляции путей. Рассмотрим пример такой функции, которую можно разместить в общем модуле, выполняющемся на сервере:


Функция ПреобразоватьПутьДляСервера(Знач ИсходныйПуть) Экспорт

    // Если код выполняется на клиенте под Windows, возвращаем путь без изменений
    #Если Клиент Тогда
        Возврат ИсходныйПуть;
    #КонецЕсли

    // Если код выполняется на сервере Linux
    СистемнаяИнфо = Новый СистемнаяИнформация;
    Если СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Linux_x86 
        Или СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда
        
        // Задаем правила соответствия сетевых ресурсов локальным точкам монтирования
        СетевойШаблон = "\\extlan\obmen\";
        ТочкаМонтирования = "/mnt/obmen/";
        
        // Приводим слэши к единому виду для поиска совпадений
        ИсходныйПуть = СтрЗаменить(ИсходныйПуть, "/", "\");
        
        Если Найти(ВРег(ИсходныйПуть), ВРег(СетевойШаблон)) > 0 Тогда
            // Заменяем Windows-путь на путь монтирования Linux
            Результат = СтрЗаменить(ВРег(ИсходныйПуть), ВРег(СетевойШаблон), ТочкаМонтирования);
            // Меняем оставшиеся обратные слэши на прямые
            Результат = СтрЗаменить(Результат, "\", "/");
            Возврат Результат;
        КонецЕсли;
        
    КонецЕсли;

    Возврат ИсходныйПуть;

КонецФункции

При использовании этого подхода пользователи на своих рабочих местах под управлением ОС Windows могут спокойно выбирать файлы через стандартные диалоги выбора файлов 1С, сохраняя пути вида \\extlan\obmen\каталог\файл.xml в базу данных. В момент, когда серверу 1С (работающему под Ubuntu) потребуется прочитать этот файл (например, при регламентном задании обмена), он пропустит путь через функцию ПреобразоватьПутьДляСервера() и корректно обратится к файлу по адресу /mnt/obmen/каталог/файл.xml.

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

← На главную