Введение
По моим наблюдениям, популярность ftp серверов с каждым годом падает. Сам я очень редко им пользуюсь и на свои сервера чаще всего не устанавливаю. Так как я работаю с серверами, к которым имею доступ по ssh, необходимости в ftp нет, использую SFTP.
Серьезную конкуренцию ftp создали облачные сервисы для хранения файлов. Чтобы кому-то передать файл, достаточно его расшарить на облачном хранилище и отправить человеку ссылку.
Тем не менее, в некоторых случаях может понадобиться ftp сервер. Доступ к такому серверу часто дают тогда, когда нужно, чтобы к вам кто-то что-то закачал большого объема. Так же ftp доступ дают некоторые хостинг компании, когда вы у них заказываете сервер для бэкапов. Например, ihor, которым я раньше пользовался, предлагает услугу пространство для бэкапа именно по протоколу ftp.
Так что хоть ftp и потерял популярность, но не перестал быть актуальным. Рассмотрим настройку ftp сервера на примере vsftpd. Сделаем несколько конфигураций:
- Самая быстрая и простая. В качестве пользователей ftp будут системные пользователи.
- Более сложная конфигурация, где пользователи будут виртуальные, хранить их будем в отдельном файле.
- Вариант с виртуальными пользователями, но хранить мы их будем в mysql базе.
Работать будем на следующем сервере:
Настройка vsftpd для Centos 8 будет немного отличаться, но в целом, все то же самое. Я не буду дублировать информацию, просто прочитайте отдельный раздел в самом конце, где указаны замечания именно для 8-й версии.
Введение
FTP (сокращенно от File Transfer Protocol) — это сетевой протокол, который когда-то широко использовался для перемещения файлов между клиентом и сервером. FTP до сих пор используется для поддержки устаревших приложений и рабочих процессов с специфическими потребностями. Если у вас есть выбор протокола для загрузки файлов, рассмотрите более современные варианты, которые являются более эффективными, безопасными и удобными. Например загрузка файлов непосредственно из веб-браузера, с помощью безопасного протокола https или такие безопасные протоколы как scp или SFTP которые используются в интерфейсе командной строки.
Vsftpd (акроним very secure FTP daemon) является FTP-сервером для многих Unix-подобных систем, включая Linux, и часто является FTP-сервером по умолчанию для многих дистрибутивов Linux. Vsftpd полезен для оптимизации безопасности, производительности и стабильности. Он также обеспечивает надежную защиту от проблем безопасности, встречающихся в других FTP-серверах. vsftpd может обрабатывать виртуальные конфигурации IPD, поддерживать шифрование с интеграцией SSL и многое другое.
С помощью этого руководства вы сможете настроить vsftpd так, чтобы пользователь мог загружать файлы в свой домашний каталог с помощью подключения по FTP с учетными данными защищенными шифрованием SSL/TLS. Вы также подключитесь к своему выделенному серверу с помощью FileZilla, FTP-клиента с открытым исходным кодом, чтобы проверить шифрование TLS.
Управление доступом
Обратите внимание на то, что в процессе установки vsftp в вашу систему добавляется пользователь с именем учётной записи ftp. Предназначение этой учётной записи — организация доступа к каталогу анонимного FTP
По умолчанию vsftpd разрешает доступ на чтение анонимным пользователям к домашнему каталогу учётной записи ftp. Не забудьте отключить его, если это вам не нужно, изменив значение соответствующего параметра:
anonymous_enable=NO
Если же доступ анонимных пользователей к вашему FTP-серверу разрешён, дополнительно вы можете отключить запрос пароля при анонимном логине:
no_anon_password=YES
Доступ локальных пользователей системы по умолчанию обычно отключён. Включить его при необходимости можно следующим образом:
local_enable=YES
Чтобы ваши локальные пользователи не «бродили» выше их домашних каталогов, можно включить следующее ограничение:
chroot_local_user=YES
Также можно использовать другой способ chroot пользователей, при котором ограничиваться будут не все пользователи, а лишь явно определённые. Для этого необходимо установить значение параметра chroot_local_user равным NO, создать файл с перечнем пользователей для которых chroot должен действовать (например, в /etc/vsftpd.chroot_list) и определить следующие два параметра:
chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list
Обратите внимание на то, что если при определённых выше двух параметрах значение параметра chroot_local_user является равным YES, то учётные записи, перечисленные в файле chroot_list_file НЕ будут попадать под ограничения chroot. Если вы хотите ограничить количество одновременных соединений к vsftpd, есть два способа сделать это: при помощи возможностей суперсервера xinetd или, если ваш демон работает в автономном режиме, при помощи параметра (естественно 10 заменив на нужное вам количество допустимых одновременных подключений):
Если вы хотите ограничить количество одновременных соединений к vsftpd, есть два способа сделать это: при помощи возможностей суперсервера xinetd или, если ваш демон работает в автономном режиме, при помощи параметра (естественно 10 заменив на нужное вам количество допустимых одновременных подключений):
max_clients=10
По умолчанию в конфигурации vsftpd запрещены FTP-команды создания новых файлов и каталогов, таким образом ваши локальные пользователи по умолчанию не смогут получить доступ на запись в своих домашних каталогах. Исправить это легко можно при помощи определения параметра write_enable:
write_enable=YES
После того, как в конфигурации вашего сервера параметр write_enable установлен равным YES и anonymous_enable определён как YES вы можете управлять доступом относительно операций создания новых файлов/каталогов анонимными пользователями. Разрешить создавать новые каталоги анонимам:
anon_mkdir_write_enable=YES
Разрешить анонимным пользователям удалять и переименовывать файлы и каталоги:
anon_other_write_enable=YES
Разрешить анонимам загружать новые файлы:
anon_upload_enable=YES
Ограничить скорость обмена данными для анонимных пользователей в автономном режиме сервера можно следующим параметром (значение указывается в байтах/сек):
anon_max_rate=1024
По умолчанию umask файлов vsftpd использует равный 077, то есть файлы создаются доступными на чтение/запись только для владельца. Изменить значение umask анонимных пользователей можно при помощи параметра anon_umask:
anon_umask=022
а для локальных — при помощи параметра local_umask:
local_umask=022
При необходимости вы можете запретить пользователям скачивать файлы с вашего сервера:
download_enable=NO
Иногда бывает полезно скрыть реальные идентификаторы владельцев файлов, заменив их на идентификатор пользователя ftp:
hide_ids=YES
Iptables и пассивный режим FTP.
<?php // the_content(__(‘Read more’, ‘monochrome’)); ?>
Небольшая заметка о том, как настроить iptables на сервере так, чтобы разрешить подключаться к нему в пассивном режиме FTP. На эту тему в интернете написано немало статей, но описанный вариант, с моей точки зрения, является наиболее правильным и оптимальным.
Для начала необходимо настроить сервер FTP. Будем настраивать сервер на использование фиксированного диапазона верхних портов, например 49152—65535. Эти порты согласно спецификации IANA являются динамическими или частными. Конфигурация каждого конкретного FTP сервера будет выглядеть по своему.
Для vsftpd, например необходимо отредактировать файл /etc/vsftpd/vsftpd.conf (в зависимости от операционной системы путь может отличаться) и внести (или изменить) следующие строки:
pasv_min_port=49152 pasv_max_port=65534
Для proftpd в файле /etc/proftpd.conf (путь, опять таки, может отличаться в зависимости от операционной системы или от способа установки) в секции Global нужно внести следующие изменения:
<Global> ...... PassivePorts 49152 65534 </Global>
И аналогично для всех остальных FTP серверов.
После внесения изменений, соответственно, сервер нужно перезапустить.
Теперь необходимо загрузить модуль ip_conntrack_ftp для iptables. В RedHat/CentOS достаточно в файл /etc/sysconfig/iptables-config добавить ссылку на загрузку модуля ip_conntrack_ftp:
IPTABLES_MODULES="ip_conntrack_ftp"
и отредактировать /etc/sysconfig/iptables, добавив в него строку, разрешающую входящие соединения на порт 21. Пример конфига Iptables, добавленная строка — номер 8.
*filter :INPUT ACCEPT :FORWARD ACCEPT :OUTPUT ACCEPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
Теперь нужно перезапустить файервол:
service iptables restart
Можно проверить правильность диапазона портов через lsmod:
lsmod | grep conntrack_ftp
В результате система ответит чем-то вроде этого:
nf_conntrack_ftp 41361 1 nf_nat_ftp nf_conntrack 65661 8 nf_nat_ftp,nf_conntrack_ftp,ipt_MASQUERADE,iptable_nat,nf_nat,nf_conntrack_ipv4,nf_conntrack_ipv6,xt_state
С этого момента пассивный режим FTP можно использовать.
Небольшое дополнение: Если ваш сервер находится за NAT, возможно придётся загрузить ещё один модуль — ip_nat_ftp.
Помогла заметка — поделись с другом:
Настройка vsftpd с виртуальными пользователями
Рассмотрим вариант, когда пользователи ftp сервера не должны пересекаться с локальными. В данном примере будут работать только виртуальные пользователи. Я мельком проверил, можно ли настроить и тех и других, оказалось, что можно. Но там надо аккуратно с правами разбираться и со списками разрешенных пользователей. Я решил, что не буду описывать эту ситуацию, так как не очень представлю, когда она может пригодиться. Если кому-то надо, то на базе этой статьи он сам сможет разобраться.
Чтобы авторизовать виртуальных пользователей, установим дополнительный пакет compat-db:
# yum install compat-db
На всякий случай сохраните оригинальный pam.d файл, если захотите снова вернуться к системным пользователям:
# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.orig
Нужно изменить pam файл /etc/pam.d/vsftpd, приведя его к следующему виду:
# mcedit /etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/vsftpd/virt_users account required pam_userdb.so db=/etc/vsftpd/virt_users session required pam_loginuid.so
# mcedit /etc/vsftpd/vsftpd.conf
Рисуем следующий конфиг для vsftpd vsftpd.conf
Создаем файл с виртуальными пользователями:
# touch /etc/vsftpd/virt_users
Добавляем туда в первую строку имя пользователя, во вторую его пароль
В конце не забудьте перейти на новую строку, это важно. Файл должен быть примерно таким:
ftp-virt1 password1 ftp-virt2 password2
Сохраняем файл и генерируем локальное хранилище учеток:
# db_load -T -t hash -f /etc/vsftpd/virt_users /etc/vsftpd/virt_users.db
У вас должен появиться файл virt_users.db.
Нужно создать каталоги для этих пользователей:
# mkdir /ftp/ftp-virt1 /ftp/ftp-virt2
Для папки /ftp надо назначить соответствующего владельца, от которого ftp сервер будет пускать виртуальных пользователей:
# chown -R ftp. /ftp
На этом настройка виртуальных пользователей ftp закончена. Перезапускаем vsftpd и пробуем залогиниться:
# systemctl restart vsftpd
Я набросал небольшой скрипт, чтобы было удобно добавлять новых пользователей, предлагаю воспользоваться:
# mcedit /etc/vsftpd/add_virt_user.sh
#!/bin/sh echo -n "Enter name of virtual user: " read virtuser echo -n "Enter password: " read virtpass mkdir /ftp/$virtuser chown ftp. /ftp/$virtuser touch /etc/vsftpd/users/$virtuser echo "$virtuser" >> /etc/vsftpd/virt_users echo "$virtpass" >> /etc/vsftpd/virt_users db_load -T -t hash -f /etc/vsftpd/virt_users /etc/vsftpd/virt_users.db
Делаете файл исполняемым и запускаете:
# chmod 0700 /etc/vsftpd/add_virt_user.sh # /etc/vsftpd/add_virt_user.sh Enter name of virtual user: ftp-virt2 Enter password: 123456
Все, пользователь добавлен, можно сразу им заходить. Вот так легко и просто настраиваются виртуальные пользователи в vsftpd. Рассмотрим теперь третий вариант, когда эти пользователи хранятся в mysql базе.
III. Базовая настройка
Для проверки работоспособности сервера его необходимо запустить от пользователя root, командой vsftpd. Жмякаем Ctrl + C чтобы его выключить.
Консольным клиентом ftp (в любой(?) операционной системе) будем проверять, как мы его настроили.
Файл с настройками /etc/vsftpd.conf, но он нам не нужен, поэтому открываем любимым текстовым редактором, затираем все и пишем свой конфиг. И так…
Включаем работу сервера в режиме самостоятельного демона, без всяких inetd, и ведение логов (по-умолчанию /var/log/vsftpd.log)
Включаем 20 порт для обмена непосредственно данными через команду PORT, и ограничиваем количество одновременных соединений.
Приветствуем пользователей при подключении к FTP, и включаем файлы .message, которые можно создавать в директориях и затем пользователи смогут их читать при заходе в данную директорию. Просто приятные рюшечки.
Прячем пользователей в системе, так, что при листинге директорий имя/группа всех объектов будет просто именоваться ftp, а не иметь id реального владельца этого объекта, и включаем возможность загружать файлы на сервер — для этого мы его и настраиваем, же.
Включаем локальных пользователей, — теперь логиниться на FTP можно под своим реальным пользователем в системе, и вы попадаете в свой хомяк (/home/%USERNAME%). Меня это не устроило, но об этом мы еще поговорим. И устанавливаем права на новые создаваемые файлы, -rw-r—r— т.е. владелец файла может его читать/изменять, группа и остальные только читать. По-умолчанию устанавливаются права -rwxrwxrwx, но зачем оно нам?
Включаем виртуальных пользователей на сервере. Это несомненно безопаснее, чем авторизироваться под реальным пользователем системы и попадать в хомяк. Так же, эта настрока позволяет более гибко настраивать доступ пользователям, о чем поговорим еще ниже. И укажем пользователя, с правами которого будет выполняться сессия — ftp — он у нас совсем без прав, поэтому это безопасно. Под этим пользователем будут создаваться (загружаться на сервер) новые файлы. Можете указать nobody или еще кого.
Запираем пользователя в его хомяке. Без этой настройки, вы могли бы зайти в любую директорию в системе и прочитать любой файл (ну, все зависит от прав).
Все, наша система с такими настройками в безопасности.
ШАГ 5: Тестирование работы vsftpd
Из командной строки запускаем клиента FTP:
# ftp localhost Connected to localhost. 220 (vsFTPd 3.0.3)
Пробуем залогинеться по тестовым пользователем и другими пользователями, в том числе анонимным. При попытки ввода имени пользователя не указанного в файле vsftpd.userlist должна быть запрет (ответ с кодом 530 Permission denied. Login failed.).
Настройка завершена. Удачи!
FAQ 1: Как посмотреть логи изменений (удаления файлов) на FTP сервере vsftpd?
Чтобы посмотреть кто внёс изменение на сервере через FTP, а точнее удалил файлы используйте лог файл /var/log/xferlog. Укажите параметры логирования как в этом
FAQ 2: Как посмотреть ошибки логирования пользователей на FTP сервере vsftpd?
Частая проблема vsftpd заходит кто то с неправильным паролем — куда смотреть то — логов же нет даже обычный правильный заход не пишется. Вы просто не настроили .
Ошибки логирования у вас должны быть в файле /var/log/vsftpd.log И иметь такой вид:
Thu Nov 5 09:24:55 2020 CONNECT: Client "::ffff:10.26.95.175" Thu Nov 5 09:24:55 2020 OK LOGIN: Client "::ffff:10.26.95.175"
VIII. Безопасность
Это конечно хорошо, что файлы хранятся не в открытом доступе на каком-то файлообменнике, а переходят напрямую от пользователя к пользователю через прямое подключение по FTP. Однако, было бы прекрасным трафик еще и шифровать, чтобы никто не узнал какие именно файлы вы передаете.
Настроим SSL/TLS, и прежде включим его в /etc/vsftpd.conf.
Выберите, какой протокол вам нравится.
Генерируем сертификат.
Указываем путь до него.
И, я считаю обязательным всем локальным пользователям подключаться к вашему серверу по зашифрованному соединению. Вдруг, девушка захочет перекинуть свои фотографии жанра Ню?
Поэтому включаем обязательный SSL/TLS для локальных пользователей, а вот anonymous оно пожалуй не нужно, расходовать лишь процессорное время.
Virtual users with TLS/SSL/FTPS and a common upload directory — Complicated VSFTPD
Virtual users are users that do not exist on the system — they are not in /etc/passwd, do not have a home directory on the system, can not login but in vsftpd — or if they do exist, they can login in vsftpd with a non system password — security.
You can set different definitions to each virtual user, granting to each of these users different permissions. If TLS/SSL/FTPS and virtual users are enabled, the level of security of your vsftpd server is increased: encrypted passwords, with passwords that are not used on the system, and users that can’t access directly to their home directory (if you want).
The following example is based and adapted on the example for virtual users in vsftpd site, on documentation and the very good examples in this forum that can be found here and here. Currently there is a restriction that with guest_enable enabled, local users also get mapped to guest_username. This is a polite way to say that if the default vsftpd PAM file is used, the system users will be guests too. To avoid confusions change the PAM file used by vsftpd to authenticate only virtual users, make all vsftpd users as virtual users and set their passwords, home and permissions based on this example.
Настройка Vsftpd
Есть много вариантов, которые вы можете настроить для vsftpd, но в этой инструкции мы рассмотрим только основы. Откройте файл конфигурации vsftpd с помощью следующей команды.
Вы увидите, что различные параметры vsftpd хорошо описаны в конфигурационном файле. Вам нужно только прочитать инструкции, чтобы понять, что вы хотите включить или отключить. Ниже приведено несколько примеров.
Настройка анонимного FTP-доступа
По умолчанию анонимный FTP отключен. Мы рекомендуем оставить этот параметр по умолчанию как есть. Однако если по какой-либо причине вы хотите включить анонимный FTP-доступ, например для тестирования, измените значение параметра anonymous_enable с » NO» На «YES«.
А пока оставь все как есть.
Настройка анонимного FTP-доступа для vsftpd
Разрешить локальным пользователям входить в систему
По умолчанию локальным пользователям разрешен вход в систему. Если вы хотите запретить локальным пользователям входить на сервер Vsftpd, измените значение local_enable с YES на NO.
Разрешить локальным пользователям входить на сервер Vsftpd
Вы также можете разрешить только определенным локальным пользователям входить на сервер Vsftpd. Для этого убедитесь, что local_enable имеет значение YES.
После этого добавьте следующие строки внизу.
Сохраните и закройте файл vsftpd.conf.
Далее создайте файл userlist со следующей командой и введите разрешенных пользователей по одному на строку.
Сохраните и закройте файл userlist.
Перезагрузите vsftpd с помощью:
Включить команду записи FTP
Чтобы разрешить пользователям FTP создавать, удалять, переименовывать и сохранять файлы, раскомментируйте параметр write_enable и убедитесь, что он установлен в значение YES.
Vsftpd Включить команду записи и чтения FTP
Прежде чем мы пойдем дальше, давайте войдем на сервер Vsftpd и убедимся в том, что он работает. А пока сохраните все изменения и закройте конфигурационный файл vsftpd.
Вход на сервер Vsftpd
Для этого создадим тестового пользователя и назначим пароль следующим образом.
Теперь запустите FTP-клиент с поддержкой SSL, такой как FileZilla, а затем войдите в систему с помощью вновь созданного тестового пользователя.
В моем случае FileZilla уведомила, что сервер небезопасен, так как он не поддерживает FTP через TLS.
Уведомление о небезопасном FTP — сервере
Отмените соединение. Давайте исправим это в следующем разделе.
Включите SSL/TLS для безопасной передачи файлов
Чтобы включить безопасную передачу файлов по протоколу TLS, выполните следующие действия.
Во-первых, откройте конфигурационный файл vsftpd с помощью приведенной ниже команды.
Затем найдите параметры rsa_cert_file и rsa_private_key_file и обновите значения, как показано ниже.
Кроме того, найдите строку ssl_enable и измените значение на YES.
Включить TLS/SSL для Vsftpd
Сохраните и закройте файл конфигурации vsftpd.
Создать закрытый ключ и сертификат
Теперь вам нужно будет создать закрытый ключ и сгенерировать сертификат TLS/SSL с помощью openssl. Вы можете использовать бесплатный SSL-сертификат Let’s Encrypt, если у вас есть домен, указывающий на FTP-сервер.
Чтобы сгенерировать закрытый ключ, выполните команду:
Затем сгенерируйте запрос на подпись сертификата с помощью приведенной ниже команды. Вам будет предложено предоставить некоторую информацию, такую как ваша страна, город, адрес электронной почты и т. д. Пожалуйста, внимательно прочтите инструкцию.
Теперь создайте и подпишите сертификат, который будет действителен в течение 365 дней следующим образом.
Перезагрузите vsftpd с помощью:
Попробуйте снова подключиться к серверу Vsftpd.
Безопасное FTP соединение по протоколу TLS
Конечно, на этот раз FileZilla смогла безопасно подключиться через TLS. Вы можете смело выбрать вариант, чтобы всегда доверять этому сертификату в будущих сеансах. Затем нажмите кнопку ОК, чтобы продолжить подключение.
Доверительный самозаверяющий сертификат
Если вы попытаетесь подключиться к FTP-серверу через командную строку, которая не поддерживает FTP через TLS, вы получите сообщение об ошибке. Например:
Ошибка FTP без TLS
Это еще одно доказательство того, что ваш сервер Vsftpd включен для безопасной передачи файлов по протоколу TLS.
Шаг второй — Настройка брандмауэра (фаервола)
Для начала, давайте проверим состояние брандмауэра, чтобы узнать, включен ли он. Если включен, необходимо откорректировать его настройки, чтобы FTP соединения были разрешены, иначе правила брандмауэра по умолчанию будут блокировать подключения по FTP.
Проверьте состояние брандмауэра введя в командной строке:
sudo ufw status
В данном случае брандмауэр выключен и не используется, о чем нам сообщает система. Если вы не используете брандмауэр можно пропустить этот шаг. Но предпочтительнее все же настроить и активировать брандмауэр, поэтому активируем его и настроим правила.
Активация брандмауэра
Первым правилом необходимо разрешить подключения к нашему серверу по протоколу SSH, иначе после активации брандмауэра мы потеряем возможность подключаться к серверу. Чтобы настроить сервер на разрешение входящих SSH-соединений, введите команду:
sudo ufw allow ssh
После этого вернем правила ufw к значениям по умолчанию, то есть блокировать все входящие соединения и разрешить все исходящие, для этого просто вводим две команды последовательно, одну за другой:
sudo ufw default deny incoming sudo ufw default allow outgoing
Ну и напоследок, активируем сам брандмауэр ufw, для этого необходимо ввести команду:
sudo ufw enable
Вы получите предупреждение о том, что активация брандмауэра может прервать активные SSH-соединения. Но поскольку мы установили правило брандмауэра, разрешающее SSH-соединения, мы можем продолжать без опасений. Ответьте на запрос y и нажмите ENTER.
Теперь брандмауэр активен. Выполните команду sudo ufw status verbose, чтобы увидеть активные правила брандмауэра.
sudo ufw status verbose
Система сообщаем нам, что брандмауэр активен и разрешены подключения только по SSH (порт 22).
Поскольку у нас разрешены только SSH подключения, то нам необходимо добавить правила и для подключений по FTP. Откроем порты 20, 21 и 990, чтобы была возможность подключаться по TLS:
sudo ufw allow 20,21,990/tcp
Затем откроем порты 40000-50000 это диапазон пассивных портов для FTP, которые мы потом укажем в конфигурационном файле vsftpd:
Проверим, что у нас получилось в итоге, для этого введем команду:
sudo ufw status verbose
Теперь вывод правил брандмауэра должен выглядеть примерно следующим образом:
Когда vsftpd установлен и открыты необходимые порты в брандмауэре, пришло время создать специального FTP-пользователя.
Первоначальная настройка брандмауера
eth0 – смотрит в локальную сеть, eth1 – смотрит в мир. Данным скриптом (firewall.sh) удобно пользоваться на стадии отладки правил.
После того, как у вас все настроено, лучше воспользоваться штатными средствами управления iptables. Для этого воспользуемся скриптом для сохранения текущих правил в файл. В разных дистрибутивах набор правил может сохраняться по отличному от /etc/sysconfig/iptables пути. Данный путь является стандартным для Red Hat дистрибутивов и его клонов, например CentOS.
Но при таких настройках фаервола ftp через nat еще не будет работать. Для облегчения нашей задачи воспользуемся специальным модулем, который и был разработан как раз для этих целей. Загрузим модуль ip_nat_ftp, который и будет выполнять всю черную работу вместо нас.
Обратите внимание, что в цепочке eth0-eth1, через которую проходят все транзитные пакеты, мы открыли только порт 21 и разрешили прохождение пакетов с состоянием RELATED и ESTABLISHED. Для работы ftp как в активном так и в пассивном режимах больше ничего не требуется, все остальные заботы берут на себя модули ip_nat_ftp и ip_conntrack_ftp
README (вместо введения)
Эти подкаталоги содержат примеры использования vsftpd.
Эти примеры описывают установку для работы в RedHat 7.2. Некоторые из них описывают взаимодействие с «xinetd» и/или очень функциональный вариант с PAM.
Примеры служат для иллюстрации того, как vsftpd становится чрезвычайно мощным инструментом при взаимодействии с «xinetd», для обработки соединений, и PAM для аутентификации.
Содержимое
INTERNET_SITE Как можно настроить vsftpd для сайта. INTERNET_SITE_NOINETD Как использовать vsftpd без xinetd. PER_IP_CONFIG Как использовать различные настройки, в зависимости от подключившегося IP-адреса. VIRTUAL_HOSTS Как использовать vsftpd с виртуальным хостингом. VIRTUAL_USERS Как использовать виртуальных пользователей в vsftpd. VIRTUAL_USERS_2 Продвинутые виртуальные пользователи - различные права доступа.
Добавление нового пользователя ftp на vsftpd сервер
Итак сервер настроен и трафик зашифрован. Но у нас пока есть только один пользователь. Наверняка понадобится добавлять дополнительные учетные записи.
Приведу краткую инструкцию — vsftpd настройка пользователей, из пяти действий, для быстрого добавления новых аккаунтов.
Чтобы работали vsftpd пользователи первым делом создаем его. Для примера это будет
vasiliy , вы укажите то имя которое нужно.
Первое. создаем пользователя:
$ sudo adduser vasiliy
1 | $sudo adduser vasiliy |
Второе. Работа с папкой пользователя:
$ sudo mkdir /home/vasiliy/ftp
$ sudo chown nobody:nogroup /home/vasiliy/ftp
$ sudo chmod a-w /home/vasiliy/ftp
1 |
$sudo mkdirhomevasiliyftp $sudo chown nobodynogrouphomevasiliyftp $sudo chmoda-whomevasiliyftp |
Третье. Папка для файлов:
$ sudo mkdir /home/vasiliy/ftp/files
$ sudo chown vasiliy:vasiliy /home/vasiliy/ftp/files
1 |
$sudo mkdirhomevasiliyftpfiles $sudo chown vasiliyvasiliyhomevasiliyftpfiles |
Четвертое. Добавим нового пользователя в список разрешенных для подключения. Открываем список:
$ sudo nano /etc/vsftpd.userlist
1 | $sudo nanoetcvsftpd.userlist |
Вписываем имя новой учетной записи под существующей.
Пятое. Перезапустить демон командой:
$ sudo systemctl restart vsftpd
1 | $sudo systemctl restart vsftpd |
Можно дополнительно отключить возможно подключения к серверу как обычный пользователь:
$ sudo usermod vasiliy -s /bin/ftponly
1 | $sudo usermod vasiliy-sbinftponly |
Проверяем и пользуемся.
Как удалить пользователя ftp
Для работы с фтп сервером необходимо не только создавать новых пользователей но и удалять ставшие не актуальными учетные записи. Более подробно о работе пользователями читайте в статье как создать пользователя в Linux. А сейчас кратко рассмотрим данную операцию.
Чтобы удалить пользователя ftp, без удаления пользовательских файлов и каталогов выполните команду:
$ sudo deluser имя_пользователя
1 | $ sudo deluser имя_пользователя |
Например чтобы удалить учетную запись
vasiliy команда будет такой:
$ sudo deluser vasiliy
1 | $sudo deluser vasiliy |
Для того, чтобы удалить и пользователя и все его данные используйте флаг —remove-home username. Пример команды:
$ sudo deluser —remove-home имя_пользователя
1 | $ sudo deluser —remove-home имя_пользователя |
Резюме
В этой инструкции я рассказал как создать и настроить ftp сервер vsftpd на Debian с локальной учетной записью и ограничить пользователя домашним каталогом. Такой метод хорошо подойдет для личного использования если хотите создать безопасное и надежное удаленное хранилище.
Программа vsftpd является хорошим выбором. Расшифровывается как — Very Secure FTP Daemon, то есть очень защищенный ftp демон. Является ftp — сервером по умолчанию для многих дистрибутивов.
На официальном сайте вы найдете много дополнительной информации и документации. Если вам нужно больше.
С помощью фтп можно удобно управлять файлами (загружать видео, фото, аудиозаписи, текстовые файлы и т.д.), создавать и хранить резервные копии своих проектов, сайтов, образы систем и т.п.. Хотя чаще используется для подключения к хостингу и управления файлами сайтов. Для покупки сервера рекомендую воспользоваться услугами FirstVds качественные vps по доступным ценам. При переходе по этой ссылке скидка 25%.
ШАГ 4: Настройка vsftpd — скачать работающий конфиг vsftpd.conf
Сделаем копию оригинального файла настроек vsftpd.
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
Правим конфигурационный файл vsftpd.conf.
- Отключаем анонимный вход: anonymous_enable = NO
- Разрешаем использовать имена локальных пользователей для входа: local_enable = YES
- Для авторизованных пользователей разрешаем команды, позволяющие изменять файловую систему: write_enable = YES
- Установим значение umask для новых файлов, создаваемых по FTP: local_umask = 022
- Использовать порт 20 для передачи данных вместо случайного: connect_from_port_20 = YES
- Записывать в лог файл все транзакции по передаче файлов и использовать стандартный формат лога
- Чтобы заставить vsftpd вести логи подключений добавьте параметр dual_log_enable=YES
xferlog_enable = YES xferlog_std_format=YES
Вы может скачать работающий конфиг vsftpd.conf в окружении Ubuntu 20.04.1 LTS: vsftpd сервер успешно работает под нагрузкой как на ethernet интерфейсе, так и tun0 интерфейса .
- vsftpd.conf
-
listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES #chown_uploads=YES #chown_username=whoever #xferlog_file=/var/log/vsftpd.log xferlog_std_format=YES #data_connection_timeout=120 #nopriv_user=ftpsecure #async_abor_enable=YES #ascii_upload_enable=YES #ascii_download_enable=YES #ftpd_banner=Welcome to blah FTP service. #deny_email_enable=YES #banned_email_file=/etc/vsftpd.banned_emails chroot_local_user=YES #chroot_list_enable=YES #chroot_list_file=/etc/vsftpd.chroot_list #ls_recurse_enable=YES secure_chroot_dir=varrunvsftpdempty pam_service_name=vsftpd rsa_cert_file=etcsslcertsssl-cert-snakeoil.pem rsa_private_key_file=etcsslprivatessl-cert-snakeoil.key ssl_enable=NO #utf8_filesystem=YES userlist_enable=YES userlist_file=etcvsftpd.userlist userlist_deny=NO allow_writeable_chroot=YES dual_log_enable=YES