Телеграм: @camouf_ru Почта: mihail@bazarow.ru

FTP доступ на Виртуальной машине Битрикс

Просмотров: 15919

Бывает что нужно открыть FTP доступ к заранее известной папке на сайте под управлением 1С Битрикс, который работает на виртуальной машине от Битрикс. Из коробки, FTP сервера там нет. Расскажу как настроить и ограничить FTP доступ одной папкой, на примере реальной задачи.

Итак: 1С Управление Торговлей умеет подключаться только по FTP, и только по 21-ому порту. На одном из разрабатываемых сайтов, 1С-УТ, с заданной периодичностью, должна была выкладывать прайс-лист в конкретную директорию внутри сайта.

Имеем: сайт работающий на Битрикс VM под управлением CentOS, директория куда должно происходить FTP соединение (от корня системы) /home/bitrix/ext_www/site.ru/price

Задача, настроить FTP доступ к данной директории, при этом создав отдельного пользователя и пароль, и ограничить этого пользователя только данной директорией- для безопасности. Все создаваемые им файлы должны принадлежать пользователю "bitrix", что бы веб-сервер мог с ними работать.

Для начала ставим pure-ftpd, в терминале выполняем команду


yum install pure-ftpd 

Открываем на редактирование файл /etc/pure-ftpd/pure-ftpd.conf и раскомментируем строку


PureDB /etc/pure-ftpd/pureftpd.pdb

Создаем файл для хранения паролей FTP пользователей


touch /etc/pure-ftpd/pureftpd.passwd

Скачиваем вот этот архив, распаковываем и кладем файл gen_ftp_user.sh в директорию /root/ и добавляем право на запуск скрипта


chmod u+x /root/gen_ftp_user.sh

Открываем 21-ый порт в IP tables: команды выполнять поочереди


iptables -I INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT //Открываем порт
service iptables save //сохраняем
/etc/init.d/iptables restart //перезапускаем

И выполняем скрипт по следующему паттерну:


 /root/gen_ftp_user.sh "bitrix" "ЛОГИН" "ПАРОЛЬ" "ПУТЬ ДО НУЖНОЙ ДИРЕКТОРИИ"

Для наглядности, в озвученной выше задаче было вот так


/root/gen_ftp_user.sh "bitrix" "1c_price" "YTprIGHce" "/home/bitrix/ext_www/site.ru/price"

Вот, в общем-то и все

Дополнительно по pure-ftpd

При перезагрузке виртуальной машины Битрикс, Pure-Ftpd не запускается автоматически, вы можете либо запускать его вручную командой


/etc/init.d/pure-ftpd start

Либо выполнить вот такую команду, что бы Pure-Ftpd запускался автоматически при перезагрузке/запуске системы


chkconfig --levels 235 pure-ftpd on

Для CentOS 7

В начале установить полную поддержку iptables
install iptables-services

Чтобы удобнее редактировать конфиги и ходить по каталогам ставим файловый менеджер
install mc

Чтобы распаковать скачанный архив
yum install unzip

Архив скачать
nwget https://camouf.ru/upload/fo_all/gen_ftp_user.sh.zip

Распаковать
unzip gen_ftp_user.sh.zip

В конфиге файл /etc/pure-ftpd/pure-ftpd.conf
MinUID ставим 100 за место 1000
(user bitrix для группы наших виртуальных пользователей у меня имел UID 600 и мне выдавало, что пароль не верент при подключении на FTP)

Михаил Базаров 11.12.2016
Цитата
Иван Огородов написал:
А зачем сложности с ftp? Двустрочный php-файл и curl справляются с закачкой файлов одной командой:
Код
 <? 
$dfn = $_SERVER["DOCUMENT_ROOT"].'/upload/import/import_bitrix.csv';
$fn = $_FILES['data']['tmp_name'];
copy ($fn, $dfn);
?> 
Код
 curl -i -u user:pass -X POST -H "Content-Type: multipart/form-data" -F "data=@import_bitrix.csv" http://bitrixsite/importcsv.php
 
А зачем сложности с curl? Если для 1С можно просто дать нативный (для 1С) способ подключения по FTP и выгрузку по расписанию

На самом деле: решение зависит от задачи ;)
Иван Огородов 17.12.2016
Curl - способ уйти от лишней дырки в системе в виде ftp. На одном проекте, после закрытия ftp-доступа, количество попыток поломать битрикс сильно сократилось. Может и совпадение, конечно, но факт.
Ruha 19.10.2017
Здравствуйте, спасибо Вам большое за публикацию актуальных вещей, а то гугл не всегда отвечает конкретно на вопрос думаю дополню своими вопросами Вашу статью=))
Интересует какой командой удалять ftp пользователей?
Какой командой вывести есть ли созданные пользователи ftp ?
mtsub 02.04.2018
две проблемы возникли:

1)
[root@123456 ~]# service iptables save
The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.

2)
[root@123456 ~]# /etc/init.d/iptables restart
-bash: /etc/init.d/iptables: No such file or directory

что не так?
Михаил Базаров 02.04.2018
Цитата
mtsub написал:
systemctl
Да, заметка для CentOs-6
Если используете CentOS-7 то службы перезапускаются через
systemctl
Код
 systemctl start pure-ftpd.service
mtsub 02.04.2018
если использовать iptables, то firewalld нужно отключать? - https://www.dmosk.ru/instruktions.php?object=iptables-settings -http://prntscr.com/izpm16
mtsub 02.04.2018
А знаете как открыть FTP доступ по 21-ому порту на Битрикс VM под управлением CentOS-7 - ВСЕ ШАГИ, а то что-то не работает у меня?
Андрей Швед 27.08.2019
Я настраиваю FTP по такому сценарию https://capyba.ru/blog/ustanovka-ftp-na-vm-bitrix/
Работает для CentOS 7
Администратор 22.09.2020
Михаил, ОГРОМНОЕ спасибо за статью!!!
Алексей 07.08.2021
Если создать одного пользователя то все работает. При добавлении второго перестает работать и первый и второй.
При рестарте pure-ftpd пишет Job for pure-ftpd.service failed because a configured resource limit was exceeded. See "systemctl status pure-ftpd.service" and "journalctl -xe" for details.

Есть еще какие то ограничения?

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Очистить брошенные корзины с помощью API 1С-Битрикс Просмотров: 367 Задача: в интернет-магазине накапливается большое количество брошенных корзин, нужно их оч... Создание скидки на общую сумму покупки в Битрикс корзине Просмотров: 26960 Функционал интернет-магазина, работающего под управлением 1С Битрикс, позволяет задавать м... Объединить отдельные поля ФИО в одно свойство при оформлении заказа. Просмотров: 877 Пользователь, при оформлении заказа, заполняет три отдельных поля с фамилией, именем и отч... Данные о заказе текущего пользователя Просмотров: 12902 Иногда нужно получить данные о заказе текущего пользователя. Не через компонент, а непосре... Ссылки для добавления и удаления товара из сравнения в Битрикс Просмотров: 8228 Просто оставляю это здесь, вставка ссылок на добавление и удаление товара из сравнения, ес... Информация о заказах и содержимое корзины текущего пользователя. Просмотров: 11776 В процессе разработки сайта могут понадобиться рецепты приведенные ниже. Использовать можн... Подключение jquery из ядра битрикс и объединение своих скриптов в оди... Просмотров: 19743 Если используете большое количество js скриптов на сайте. Например: фансибокс, всяческие г... Дополнительные опции/услуги, добавляемые в корзину, в карточке товаро... Просмотров: 302 Задача: в детальной карточке товара сделать возможность добавления услуги или опции, при д... Вывести имя пользователя добавившего элемент инфоблока в Битрикс Просмотров: 16040 Иногда, необходимо вывести имя пользователя добавившего элемент инфоблока. Например, автор... Отсортировать элементы в Битрикс по свойству привязка к разделам Просмотров: 27917 При создании достаточно сложных интернет-магазинов на Битрикс, иногда встает задача помимо... Сгенерировать скидочные купоны, при заказе и отправить на почту Просмотров: 773 Задача: после того как пользователь сделал заказ, нужно сгенерировать одноразовые купоны д... Вывести свойство отдельно ото всех или исключить из всех Просмотров: 7019 Иногда, на сайте, под управлением 1С-Битрикс, нужно вывести какое-то конкретное свойство о... Настройка прав доступа в 1С-Битрикс Просмотров: 7545 Часто, в интернет-магазине под управлением 1С Битрикс, нужно создать группу пользователей ... Простой WEB сервер на ubuntu, для Битрикс Просмотров: 34478 Расскажу как по быстрому сконфигурировать WEB сервер для работы с Битрикс. Безо всяких ngi... Настройка обмена между 1С:Предприятие и магазином на "1С-Битрикс24: И... Просмотров: 2486 В этой заметке расскажу как настроить синхронизацию между 1С:предприятие и "1С-Битрикс24: ... Вывести общее количество товаров в шаблоне корзины 1С-Битрикс Просмотров: 5720 Задача: вывести общее количество товаров в корзине (именно количество единиц товара, а не ... XML в формате Commerce ML-2, города России и Мира, для выгрузки в инф... Просмотров: 6302 Подвернулась задачка, создать инфоблок для Битрикс, в котором будут просто города России и... Вывести новости из конкретного раздела инфоблока Битрикс Просмотров: 53463 Бывает что требуется вывести конкретные новости или статьи из одного раздела инфоблока в Б... Добавление и удаление из сравнения на AJAX: Битрикс Просмотров: 17698 Рецепт лежал у меня в закромах, почти о нем и забыл, но тут подвернулся под руку- решил оп... Композитный сайт на 1С-Битрикс Просмотров: 3038 Для новых клиентов: Все новые проекты будут включать в себя применение технологии "Компози...