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

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

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

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