FTP (часть 1). Установка proftpd под Ubuntu 16.04

proftpd
В данной статье пойдет речь об установке и базовой настройке FTP под операционной системой Ubuntu 16.04. В роли FTP сервера будем использовать proftpd, для заливки файлов будем использовать FileZilla клиент.

Установка proftpd сервера

На данный момент Google дает 300$ на триальное использование GCP (Google Cloud Platform), чем мы и воспользуемся для поднятия виртуальной машины Ubuntu 16.04. Сначала находим наиболее близкий к нам регион используя сайт — gcping.com. Как только вы перейдете по данной ссылке, браузер “начнет пинговать” gcp регионы и создаст ваш собственный ТОП по задержке. Выбираете самую низкую.

proftpd_1_1

Далее идем в console.cloud.google.com и создаем виртуальную машину в выбранном регионе. Самый мелкий инстанс (g1-small) мне обошелся 13$ в месяц.

rgb000@deep-bivouac-184505:~$ gcloud compute instances list
NAME  ZONE        MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP     STATUS
u16   europe-west3-a  g1-small                   10.138.0.2   35.185.210.109  RUNNING

ОС у нас есть, теперь можно установить нужные пакеты.

root@u16:~# apt update -y && apt upgrade -y && apt install proftpd-basic

При установке выбираем standalone режим работы. На этом этапе установка завершена.

Настройка proftpd сервера

FTP сервер нужно настраивать исходя из нужд и специфики вашей системы. Мой подход – это создание и хранение пользователей и групп в отдельных файлах, нежели добавление их в систему через /etc/passwd, /etc/group. Также, все залитые файлы будут иметь один и тот же UID и GID, но каждый пользователь будет привязан только ко своей домашней папке.
Для начала добавляем новую системную группу для FTP и привязываем к proftpd пользователю:

root@u16:~# groupadd -g 3000 proftpd
root@u16:~# usermod -g proftpd proftpd
root@u16:~# id proftpd 
uid=113(proftpd) gid=3000(proftpd) groups=3000(proftpd)

Как видим, созданный при установке, proftpd пользователь теперь имеет UID=113 и GID=3000.
Теперь можно создать первого FTP пользователя в альтернативном файле ftp.passwd используя утилиту ftpasswd. Можно использовать маленький скрипт.

root@u16:~# cat ftp_add_user.sh
#!/bin/bash
FTP_USER="frodo" 
FTP_HOME_DIR="/var/www/frodo" 
FTP_PASSWORD="TpOeBFPDzCQYK5nRd"
FTP_USER_ID="113"
FTP_GROUP_ID="3000"

mkdir -pv "$FTP_HOME_DIR"
chown -v proftpd:proftpd "$FTP_HOME_DIR"
echo "$FTP_PASSWORD" | ftpasswd --passwd --file /etc/proftpd/ftpd.passwd --name "$FTP_USER" --home "$FTP_HOME_DIR" --shell /bin/false --uid "$FTP_USER_ID" --gid "$FTP_GROUP_ID" --stdin

Запускаем скрип.

root@u16:~# bash ftp_add_user.sh 
mkdir: created directory '/var/www/frodo'
changed ownership of '/var/www/frodo' from root:root to proftpd:proftpd
ftpasswd: using alternate file: /etc/proftpd/ftpd.passwd
ftpasswd: creating passwd entry for user frodo
ftpasswd: entry created

Теперь добавляем конфигурацию для proftpd сервера.

root@u16:~# cat /etc/proftpd/conf.d/security.conf 
# Привязать пользователя к домашней папке
DefaultRoot             ~
# Выключаем вывод информации о сервере при логине
ServerIdent             off
# Альтернативный файл с пользователями
AuthUserFile            /etc/proftpd/ftpd.passwd
# Если сервер за NAT: маскарадинг внешнего ІР или домена (можно и без него)
MasqueradeAddress       35.185.210.109
# Если сервер за NAT: для добавления в Firewall при пассивном режиме передачи. 
PassivePorts            60000 65535

Делаем рестарт и заканчиваем с базовой настройкой.

root@u16:~# service proftpd restart

Так как я использую google cloud, нужно разрешить весь исходящий трафик и входящий для указанного диапазона портов и самого proftpd сервера, а именно:

proftpd_1_2
proftpd_1_3

Теперь можно заливать файлы.

Настройка FTP клиента

Долго не думаю устанавливаем FileZilla клиент под Windows, запускаем и добавляем наш FTP сервер.

proftpd_1_4

Далее жмем Соединиться и заливаем тестовый файлик.

proftpd_1_5

Как видим, тестовый файлик успешно залился.
Переходим на сервер и проверяем права на файлик.

root@u16:~# ls -l /var/www/frodo/
total 3784
-rw-r--r-- 1 proftpd proftpd 3873197 Nov  4 06:40 P61223-222401.jpg

Как раз то, чего мы добивались.
В итоге мы подняли рабочий FTP сервер за 15 мин с минимальной конфигурацией.
Здесь я не описывал детали и нюансы, связанные с Активной и Пассивной передачей данных, об этом можете почитать в статье из дополнительной литературы, приведенной ниже. Вкратце, при Активной передаче клиентская машина открывает локальный порт для передачи команд (> 1023) и порт для передачи данных (> 1023), подключается к 21 порту FTP сервера и отправляет ему номер порта данных. Далее, сервер говорит ОК и инициирует подключение к этому клиентскому порту. Если на обоих сторонах нет NAT/Firewall (или нормально настроено под FTP передачу), то все будет ок. Во всех остальных случаях, попытка сервера подключиться на прямую к порту данных клиента будет заблокирована (firewall, antivirus, etc).
В связи с этим придумали Пассивную передачу данных. В этом случаи клиент открывает локальный порт для передачи команд (> 1023), порт для передачи данных (> 1023), но передает только сигнал PASV, что говорит серверу, чтобы тот сам открыл у себя порт для передачи данных и сообщил о нем клиенту. Сервер, получив сигнал, открывает у себя порт для передачи данных (из заданного нами диапазона) и отправляет его клиенту. Ну и клиент, соответственно, уже сам подключается к северу к нужному порту данных.
В следующей статье пойдет речь о модуле mod_ctrls, который позволяет управлять поведением proftpd в реальном времени.

Материалы

Proftpd: Использование AuthUserFiles
Proftpd: Список всех директив
Proftpd: За NAT-ом
FTP: Активная vs Пассивная передача

Автор: admin, 4 ноября 2017
Рубрики: Linux
Метки:

Написать комментарий

Последние статьи

Яндекс.Метрика
?>