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

Цитата | ||||
---|---|---|---|---|
Иван Огородов написал: А зачем сложности с ftp? Двустрочный php-файл и curl справляются с закачкой файлов одной командой:
|
На самом деле: решение зависит от задачи

Интересует какой командой удалять ftp пользователей?
Какой командой вывести есть ли созданные пользователи ftp ?
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
что не так?

Цитата |
---|
mtsub написал: systemctl |
Если используете CentOS-7 то службы перезапускаются через
systemctl
Код |
---|
systemctl start pure-ftpd.service |

Работает для CentOS 7
При рестарте 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.
Есть еще какие то ограничения?