Установка и настройка FTP сервера VsFTPd в Debian 7

установка и настройка vsftpdVsFTPd ( Very secure FTP daemon ) - Быстрый и безопасный FTP сервер, легкий в установке, настройке и обслуживании.
К вышесказанному можно добавить следующие функциональные возможности:

Основные функциональные возможности VsFTPd

Настройка и использование виртуальных пользователей и IP адресов, поддержка шифрования SSL/TLS, гибкая настройка на уровне пользователей, контроль полосы пропускания, поддержка протокола ipv6 и т.д. Сокращение "...и т.д.", написано практически во всех мануалах (включая документацию разработчиков), и используется не зря, большинство функциональных возможностей ftp сервера VsFTPd раскрываются при решении каких-то не совсем стандартных задач, в данном-же опусе описывается стандартная установка и настройка VsFTPd на сервере с операционной системой Debian 7 "wheezy".

Установка VsFTPd сервера и автозагрузка

Установка VsFTPd сервера ничем не отличается от установки любого другого софта в Debian, обновляем список источников пакетов затем устанавливаем сам сервер:

root@debian7:/# apt-get update
root@debian7:/# apt-get install vsftpd -y
..................................
Starting FTP server: vsftpd.

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

root@debian7:/# netstat -tupln | grep ftp
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      4162/vsftpd

Для управления автозагрузкой в debian можно использовать штатную утилиту update-rc.d, лично мне больше нравится псевдографическая утилита sysv-rc-conf. Ее нужно установить дополнительно, ну и дальше уже рулить автозапуском.

root@debian7:/# apt-get install sysv-rc-conf

Режимы работы FTP и настройка iptables

Упомяну парой слов фаервол iptables, режимы работы FTP сервера и используемые порты. FTP сервер использует для работы 2 порта и имеет два режима работы, активный и пассивный. Порт 21 используется для управляющего соединение ( по нему передаются команды ftp ), 20-й порт используется для передачи данных. И в активном и в пассивном режимах, FTP сервер получает запрос на установку управляющего соединения на 21-й порт, после чего:
В активном режиме работы, ftp клиент отправляет номер своего порта, на который ftp сервер устанавливает соединение для передачи данных. Сервер использует на своей стороне порт 20.
В пассивном режиме работы, ftp сервер отправляет клиенту номер порта из диапазона 1024-65535, на который клиент сам устанавливает соединение для передачи данных.

Настройка портов для пассивного режима работы делается парой опций файла конфигурации vsftpd.conf, pasv_min_port и pasv_max_port. В соответствии с параметрами портов в файле конфигурации VsFTPd, нужно создать правила iptables (если он конечно настроен и по умолчанию блокирует порты). Если в vsftpd.conf мы прописали:

pasv_min_port=60000
pasv_max_port=60100

значит создадим правила iptables открывающие основные рабочие порты 20 и 21 плюс настроенный диапазон портов:

root@debian7:/# iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT # управляющее соединение
root@debian7:/# iptables -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT # передача данных для активного режима
root@debian7:/# iptables -A INPUT -p tcp -m tcp --dport 60000:60100 -j ACCEPT # передача данных для пассивного режима

ну или можно одной строкой для обоих режимов работы FTP сервера:

root@debian7:/# iptables -A INPUT -p tcp -m multiport --destination-port 20,21,60000:60100 -j ACCEPT

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

Файл конфигурации VsFTPd сервера лежит тут, /etc/vsftpd.conf. Копируем оригинал, что-бы был:

root@debian7:/# cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

Большинство параметров ftp сервера не включены в дэфолтовый файл конфигурации vsftpd, но те что есть неплохо прокомментированы. Для полного списка опций почитайте man vsftpd.conf.
Приведенного ниже конфига достаточно для обычной настройки ftp сервера, ну и плюс пара дополнительных опций.

listen=YES
connect_from_port_20=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
chroot_local_user=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
xferlog_std_format=NO
xferlog_file=/var/log/vsftpd.log
log_ftp_protocol=YES
dual_log_enable=YES
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem

Разрешает вход на FTP только пользователям указанным в файле vsftpd.userlist

userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO

Создание и настройка пользователей, проверка ftp сервера

Если просто создать пользователя, ftp сервер будет работать не так как ожидается. На домашний каталог пользователя должны быть установлены права доступа 555, то есть запрет на запись, папки которые лежат внутри будут иметь стандартные права и работать как обычно. Сначала делаем вручную:

root@debian7:/# useradd -m -s /bin/false testuser
root@debian7:/# passwd testuser
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

Будет создан пользователь testuser а так-же его домашний каталог /home/testuser с правами 755 и содержать несколько служебных файлов. Сейчас VsFTPd сервер не даст залогиниться. Поэтому нужно установить на домашний каталог пользователя нужные права и создать в нем необходимые подкаталоги.

root@debian7:/# mkdir /home/testuser/www
root@debian7:/# mkdir /home/testuser/data
root@debian7:/# mkdir /home/testuser/logs

назначаем нужного владельца на папки домашнего каталога:

root@debian7:/# chown -R testuser:testuser /home/testuser

Не забываем добавить этого пользователя в файл /etc/vsftpd.userlist, иначе сервер его не пустит.

Логинимся к нашему ftp серверу:

root@debian7:/etc# ftp localhost
ftp: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
220 (vsFTPd 2.3.5)
Name (localhost:root): testuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

Получаем список файлов и директорий:

ftp> ls -la
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
dr-xr-xr-x    5 1001     1001         4096 Mar 10 03:40 .
dr-xr-xr-x    5 1001     1001         4096 Mar 10 03:40 ..
-rw-r--r--    1 1001     1001          220 Sep 25  2014 .bash_logout
-rw-r--r--    1 1001     1001         3392 Sep 25  2014 .bashrc
-rw-r--r--    1 1001     1001          675 Sep 25  2014 .profile
drwxr-xr-x    2 1001     1001         4096 Mar 10 03:40 data
drwxr-xr-x    2 1001     1001         4096 Mar 10 03:40 logs
drwxr-xr-x    2 1001     1001         4096 Mar 10 03:40 www
226 Directory send OK.

Сервер VsFTPd не позволит создавать файлы и каталоги в корне домашнего каталога:

ftp> mkdir a
550 Create directory operation failed.

Однако внутри остальных каталогов таких ограничений нет

ftp> cd www
250 Directory successfully changed.

ftp> mkdir test
257 "/www/test" created

ftp> ls -la
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x    3 1001     1001         4096 Mar 10 03:49 .
dr-xr-xr-x    5 1001     1001         4096 Mar 10 03:40 ..
drwxr-xr-x    2 1001     1001         4096 Mar 10 03:49 test
226 Directory send OK.

На этом можно закругляться, добавлю что, что-бы не заморачиваться с созданием каталогов и установкой прав доступа, можно все это дело автоматизировать. Утилита useradd, запущенная с ключем -m, создает домашнюю директорию по шаблону /etc/skel, то есть нужно просто создать там необходимую структуру каталогов, и при создании нового пользователя они будут автоматически созданы в его домашней директории. А что-бы не заморачиваться с правами доступа, нужно изменить значение UMASK в файле /etc/login.defs на 0222. Теперь при создании пользователя все будет сделано как нужно.

Удачи.

Комментарии

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
Регистр имеет значение
                                    ooooo   ooooo  ooooooooo.    ooooo        
`888' `888' `888 `Y88. `888'
.oooo.o oo.ooooo. oooo ooo 888 888 888 .d88' 888
d88( "8 888' `88b `88. .8' 888ooooo888 888ooo88P' 888
`"Y88b. 888 888 `88..8' 888 888 888`88b. 888
o. )88b 888 888 `888' 888 888 888 `88b. 888 o
8""888P' 888bod8P' `8' o888o o888o o888o o888o o888ooooood8
888
o888o
Введите код, изображенный в стиле ASCII-арт.