Почему перестал работать FTP в 1С на Linux после обновления платформы и как это исправить

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

Обновление платформы 1С:Предприятие на серверах под управлением ОС Linux (Debian, Ubuntu, CentOS) часто сопровождается неожиданными сложностями в работе сетевых протоколов. Одной из наиболее запутанных проблем является внезапный отказ работы FTPСоединение именно в серверном контексте, в то время как на файловых базах или в режиме тонкого клиента под Windows всё продолжает функционировать исправно. Проанализируем причины этой ситуации, разберем программные ошибки платформы и выясним, как восстановить работоспособность обмена данными.

Анализ контекста выполнения: почему на клиенте работает, а на сервере — нет

Разберем типичную ситуацию: после перехода на релизы веток 8.3.17.xxxx или 8.3.18.xxxx перестает работать синхронизация (например, между БП и ЗУП), использующая FTP. Первым делом проверим, в каком контексте исполняется код. В типовых конфигурациях обмен часто реализован через модуль ТранспортСообщенийОбменаFTP, который полностью выполняется на стороне сервера.

Рассмотрим пример кода, который может быть использован для диагностики подключения:


&НаСервере
Процедура ПроверитьПодключениеНаСервере()
    Попытка
        Соединение = Новый FTPСоединение("ftp.myserver.ru", 21, "ЛогинFTP", "ПарольFTP");
        МассивФайлов = Соединение.НайтиФайлы("/", "*");
        Сообщить("Успешно! Найдено файлов: " + МассивФайлов.Количество());
    Исключение
        Сообщить("Ошибка подключения: " + КраткоеОписаниеОшибки(ИнформацияОбОшибке()));
    КонецПопытки;
КонецПроцедуры

Если этот код успешно отрабатывает &НаКлиенте, но выдает ошибку &НаСервере, значит проблема кроется в особенностях работы серверной части платформы 1С под Linux или в настройках окружения пользователя usr1cv8.

Критический баг платформы: подмена пароля строкой usr1cv8

Проанализируем самую необычную и при этом часто встречающуюся причину в версиях 8.3.17 и 8.3.18. Выясним интересную деталь: при инициализации объекта FTPСоединение сервер 1С в некоторых сборках некорректно обрабатывает параметры аутентификации. Вместо пароля, который вы передаете в конструктор, платформа подставляет имя системной учетной записи Linux, от которой запущен процесс rphost (обычно это usr1cv8).

Как это проверить:

  1. Посмотрим логи вашего FTP-сервера (например, proftpd или vsftpd).
  2. Если в логах видны попытки входа вашего пользователя, но с отказом в авторизации (ошибка 530), попробуйте временно изменить пароль пользователя на самом FTP-сервере на usr1cv8.
  3. Если после этого соединение из 1С установится — вы столкнулись именно с этим багом платформы.

Решение проблемы: оптимальным решением является обновление платформы до исправленных релизов (например, выше 8.3.18.1483 или переход на ветку 8.3.20+). Если оперативное обновление невозможно, временным «костылем» станет синхронизация пароля FTP-аккаунта с именем пользователя службы 1С.

Настройка пассивного режима соединения

В ОС Linux работа с сетевыми портами жестко контролируется брандмауэром. По умолчанию 1С может пытаться использовать активный режим FTP, который часто блокируется сетевыми экранами или NAT. В Windows-клиенте настройки Internet Explorer могут принудительно переводить FTP в пассивный режим, но на Linux-сервере это нужно указывать явно.

Модифицируем создание объекта FTPСоединение, добавив параметры пассивного режима:


// Параметры: Сервер, Порт, Пользователь, Пароль, Прокси, ПассивныйРежим
Соединение = Новый FTPСоединение("ftp.myserver.ru", 21, "Логин", "Пароль", , Истина);

Использование значения Истина в шестом параметре конструктора (ПассивныйРежим) позволяет серверу 1С самому инициировать соединение для передачи данных, что решает проблему «зависания» на этапе получения списка файлов или передачи сообщения обмена.

Влияние библиотек libcurl и протокола IPv6

Платформа 1С в среде Linux использует системную библиотеку libcurl. Разберем ситуацию, когда обновление системы или платформы приводит к конфликту версий. В некоторых случаях 1С начинает отдавать приоритет протоколу IPv6, что видно в логах как префикс ::ffff: перед IP-адресом. Если FTP-сервер не настроен на работу с IPv6, соединение будет сброшено.

Для диагностики и решения проанализируем следующие шаги:

  1. Проверим доступность FTP-сервера из консоли сервера 1С под пользователем usr1cv8: sudo -u usr1cv8 curl -v ftp://login:password@ftp.server.ru.
  2. Если curl выдает ошибку GSS-API, возможно, 1С пытается использовать Kerberos-авторизацию там, где она не нужна.
  3. Попробуем отключить IPv6 на уровне операционной системы, если ваш FTP-сервер его не поддерживает.

Использование файла конфигурации inetcfg.xml

Для серверных баз на Linux настройки сетевых соединений (включая прокси-серверы для FTP) часто считываются из файла inetcfg.xml. Рассмотрим ситуацию, когда система пытается применить настройки прокси по умолчанию, которых фактически нет в Linux-окружении.

Файл должен находиться по пути /opt/1cv8/x86_64/conf/ (путь может отличаться в зависимости от версии и разрядности). Убедимся, что параметры прокси не мешают соединению:


<config xmlns="http://v8.1c.ru/8.2/inetcfg">
    <proxy autoConfig="false" />
</config>

Установите корректные права на этот файл, чтобы пользователь usr1cv8 мог его прочитать. Это исключит влияние системных переменных окружения вроде ftp_proxy, которые могут быть установлены в Debian или Ubuntu по умолчанию.

Права доступа к временным каталогам

При выполнении команд Получить() или Записать() через FTP, сервер 1С создает временные файлы. Выясним причину возможного отказа: если у пользователя usr1cv8 нет прав на запись в директорию /tmp или если она переполнена, объект FTPСоединение может возвращать неочевидную ошибку, которую программист интерпретирует как проблему связи.

Проанализируем состояние системы командой df -h и проверим права на /tmp. Также стоит убедиться, что в настройках 1С (файл conf.cfg) не переопределен каталог временных файлов на место, недоступное серверному процессу.

Подводя итог, можно сказать, что решение проблем с FTP на Linux-сервере 1С требует комплексного подхода: от проверки специфических багов платформы с подменой паролей до тонкой настройки сетевых протоколов и прав доступа в ОС.

← На главную