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

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

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

Бывает что нужно открыть 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)

Владимир Бызов28.10.2016
При попытке соединится выдает вот что, как с этим быть?
http://prntscr.com/czxymp
Михаил Базаров28.10.2016
Цитата
Владимир Бызов написал:
При попытке соединится выдает вот что, как с этим быть?
http://prntscr.com/czxym
Видимо как то путь не правильно прописали или реально каталог закрыт по правам
ssass ssss11.11.2016
То же не работает , локальная машина ftp: connect: No route to host выдает. Сервис не достпуен или что это ?
Иван Огородов10.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
Михаил Базаров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-доступа, количество попыток поломать битрикс сильно сократилось. Может и совпадение, конечно, но факт.
Ruha19.10.2017
Здравствуйте, спасибо Вам большое за публикацию актуальных вещей, а то гугл не всегда отвечает конкретно на вопрос думаю дополню своими вопросами Вашу статью=))
Интересует какой командой удалять ftp пользователей?
Какой командой вывести есть ли созданные пользователи ftp ?
mtsub02.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
mtsub02.04.2018
если использовать iptables, то firewalld нужно отключать? - https://www.dmosk.ru/instruktions.php?object=iptables-settings -http://prntscr.com/izpm16
mtsub02.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 Битрикс Просмотров: 39525 Компонент iblock.element.add.form написан таким образом, что вы не сможете (не попотев изр... Модифицировать состав заказа #ORDER_LIST# в почтовом событии "Новый з... Просмотров: 26672 Если вы хотите как-то по особенному сверстать состав заказа в почтовом уведомлении 1С-Битр... Правильное подключение стилей и скриптов в Битрикс Просмотров: 75205 Есть несколько способов подключения файлов стилей и скриптов, при верстке шаблонов в систе... Отфильтровать новости в Битрикс за заданный период Просмотров: 14409 Иногда, нужно отфильтровать элементы (новости например) по дате в Битрикс, с помощью компо... Показать пользователю накопительную скидку за все сделанные заказы, и... Просмотров: 1265 Задача: показать, текущему авторизованному, пользователю сумму всех выполненных заказов и ... Автоматически помечаем новинки лейблом в каталоге битрикс Просмотров: 4886 Если вы хотите помечать новинки каталога, вашего магазина на Битрикс, лейблом "Новинка". И... Установка Битрикс24 "Интернет-Магазин + CRM" на один домен и настройк... Просмотров: 125 Задача: установить лицензию "Интернет-Магазин + CRM" на один домен. Что бы crm была доступ... Подключение jquery из ядра битрикс и объединение своих скриптов в оди... Просмотров: 18744 Если используете большое количество js скриптов на сайте. Например: фансибокс, всяческие г... Вывести свойство привязка к Яндекс Картам в Битрикс Просмотров: 17212 Часто бывает нужно вывести свойство привязка к Яндекс карте в детальном описании элемента... Создание блога с комментариями, оценками и просмотрами на сайте с 1С-... Просмотров: 21671 Если на вашем сайте требуется создание раздела с блогом или новостями, статьями. Записям в...