Vsftpd ftp-сервер для ежедневных нужд

Vsftpd ftp-сервер для ежедневных нужд

29.01.2018 Сервер 0
VSFTPD

Сервер vsftpd (Very Secure Ftp Daemon) является быстрым и безопасным FTP-сервером. С использованием данного сервера работают ftp.debian.org, ftp.redhat.com, ftp.openbsd.org и многие другие. Сервер поддерживает работу с SSL, IPv6, виртуальными пользователями, имеется возможность управления трафиком и другое. Гибкость и безопасность данного сервера за пределами этой статьи, я рассмотрю лишь один пример его работы в рамках локальной сети.

Требуется:

Пускать анонимных пользователей (не прошедших регистрацию) в директорию distfiles, запретить анонимам считывать имеющиеся директории, скрыть от глаз корневой и другие каталоги, одновременно с этим позволить пользователям, имеющим локальную учетную запись блуждать, в зависимости от присвоенных им прав, по корневому каталогу, с возможностью читать, удалять, перемещать, копировать файлы в своих директориях. В свою очередь, имеется желание указать другим компьютерам с ОС Gentoo Linux получать автоматический доступ к хранящимся distfiles и забирать их с этого сервера без регистрации, то бишь, анонимно. Сервер должен вести регистрацию успешных входов и отказов.

Рабочая директория ftp-сервера будет /home/ftp

С правами

drwxr-xr-x 4 root root 104 Сен 10 00:09 ftp

А для системы portage

drwxrwsr-x 2 root portage 283600 Сен 21 18:04 distfiles
drwxr-xr-x 3 root root 72 Авг 3 05:21 gentoo

В системе Gentoo Linux директорией, где расположены конфигурационные файлы vsftpd является каталог

/etc/vsftpd

Сервер считывает единственный конфигурационный файл /etc/vsftpd/vsftpd.conf, который мы и рассмотрим.

banner_file=/etc/vsftpd/vsftpd.banner #показ баннера при входе на сервер, в данном случае баннер находится в файле
anonymous_enable=1 #Разрешаем доступ анонимным пользователям
listen=YES #Запуск в ручном режиме
local_enable=1 #Регистрация сообщений локальных пользователей
write_enable=1 #Разрешение записи в каталог
local_umask=022 #Дефолтная маска для пользователей установлена в 077, меняем ее на 022
anon_upload_enable=0 #Запрещаем анонимным пользователям запись и загрузку файлов
anon_mkdir_write_enable=0 #Запрещаем анонимам создавать директории
dirmessage_enable=1 #Включить сообщения при смене директории
xferlog_enable=0 #Включаем регистрацию событий
connect_from_port_20=1 #Порт, который слушает сервер, оставляем 20-й по умолчанию
chown_uploads=1 #Разрешить загружать файлы
chown_username=anatoly #Владелец загруженных файлов, локальная запись
xferlog_file=/var/log/vsftpd.log #log-файл vsfpd
idle_session_timeout=600 #тайм-аут сессии, после которого она будет закрыта
data_connection_timeout=120 #Таймаут передачи данных в секундах, большие файлы не смогут быть загружены
ascii_upload_enable=1 #Позволяет выбрать для закачивания файлов режим ASCII
ascii_download_enable=1 #Тоже, только для скачивания файлов режим ASCII
deny_email_enable=0 #Запрет списка e-mail адресов отключен
banned_email_file=/etc/vsftpd.banned_emails #Файл с запрещенными e-mail адресами
chroot_list_enable=1 #Ограничить возможность локальных пользователей перемещаться по дереву каталогов
chroot_list_file=/etc/vsftpd/chroot_list #список локальных пользователей, для которых после входа будет выполнен chroot() в их домашний каталог
chroot_local_user=1 #после входа, для локальных пользователей будет выполнен chroot() в их домашний каталог
ls_recurse_enable=1 #разрешить рекурсивный листинг

В файл /etc/vsftpd/chroot_list вносим имя пользователя, имеющего право листинга корневого каталога.

Файл /etc/vsftpd/vsftpd.banner может выглядеть как угодно, стоит лишь заметить, что все, что в нем находится, будет выведено пользователю на экран.

Создадим пользователя ftp с домашним каталогом, с запретом локального входа, входящего в группу ftp и с учетом того, что каталог /home/ftp уже существует

useradd -c FTP-users -d /home/ftp -g ftp -G ftp -m -s /sbin/nologin ftp

Проверим, работает ли vsftpd

netstat -pan —inet | grep ftp
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 15174/vsftpd
tcp 15 0 127.0.0.1:60274 127.0.0.1:21 CLOSE_WAIT 17677/ftp

Подключаемся как пользователь anonymous, будем использовать программу net-ftp/ftp

ftp localhost
Connected to localhost (127.0.0.1).
220-+++++++++++++ftp-server by Ice @og aka Predator passwd nethelp++++++++++++++
220-+ . +
220-+ .vir. d$b +
220-+ .d$$$$$$b. .cd$$b. .d$$b. d$$$$$$$$$$$b .d$$b. .d$$b. +
220-+ $$$$( )$$$b d$$$()$$$. d$$$$$$$b Q$$$$$$$P$$$P.$$$$$$$b. .$$$$$$$b. +
220-+ Q$$$$$$$$$$B$$$$$$$$P» d$$$PQ$$$$b. $$$$. .$$$P’ $$$ .$$$P' $$$ +
220-+ «$$$$$$$P Q$$$$$$$b d$$$P Q$$$$b $$$$b $$$$b..d$$$ $$$$b..d$$$ +
220-+ d$$$$$$P» «$$$$$$$$ Q$$$ Q$$$$ $$$$$ Q$$$$$$$P Q$$$$$$$P +
220-+ $$$$$$$P """"" "" "" Q$$$P "Q$$$P" "Q$$$P" +
220-+
Q$$P» «»» +
220-+++++++++++++ftp-server by Ice @og aka Predator passwd nethelp++++++++++++++
220
Name (localhost:root): anonymous
530 Please login with USER and PASS.
SSL not available
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxrwsr-x 2 0 250 283600 Sep 21 14:04 distfiles
drwxr-xr-x 3 0 0 72 Aug 03 01:21 gentoo
226 Directory send OK.
ftp>

Выходим и логинимся локальным пользователем. В завершение стоит отметить, что iptables можно отфильтровать интерфейсы, на которых будет работать сервер, а так-же определенные компьютеры, имеющие возможность к нему одключаться.

Hasta luego!