- Как настроить FTP на Ubuntu 20.04 LTS
- Установка FTP-сервера
- Защита передачи данных при помощи SSL/TLS
- Настройка учётной записи FTP-пользователя
- Настройка брандмауэра
- Проверка подключения к FTP-серверу
- Создание FTP-пользователя без панели управления ISPmanager
- Установка FTP-сервера proftpd
- Добавление разрешающих правил для брандмауэра
- Ограничение FTP-пользователей пределами домашнего каталога
- Создание нового FTP-пользователя
- Дополнительная информация
- Установка и настройка vsFTPd на Ubuntu или Astra
- Установка и настройка
- Добавление пользователя
- Проверка
- Настройка SSL/TLS
- Виртуальные пользователи
Как настроить FTP на Ubuntu 20.04 LTS
FTP – это протокол, который позволяет передавать файлы по сети от одного узла другому. Данный протокол является самым старым протоколом прикладного уровня, который появился намного раньше, чем HTTP или TCP/IP. С помощью протокола FTP могут быть организованы соединения с удаленными серверами для просмотра и передачи необходимых данных. При подключении к серверам и рабочим станциям при помощи протокола FTP необходимо использовать специальные приложения, которые именуются FTP-клиентами. Далее о том, как настроить работу с протоколом FTP на сервере, работающем под управлением Ubuntu 20.04 LTS.
Для того чтобы развернуть свой FTP-сервер на Ubuntu 20.04 LTS, необходимо:
- установить FTP-сервер с поддержкой SSL для безопасного подключения;
- настроить учетную запись FTP-пользователя;
- проверить подключение к FTP-серверу.
Установка FTP-сервера
Как всегда при работе с Ubuntu необходимо произвести первоначальную настройку сервера в соответствии с посвящённой данной процедуре статье. Далее следует обновить списки пакетов:
После чего необходимо установить программу vsftpd :
По окончании установки можно убедиться, что сервис vsftpd уже успешно работает:
Далее необходимо произвести некоторые настройки в конфигурационном файле. Для этого откройте при помощи текстового редактора файл vsftpd.conf :
Вот те основные изменения, которые необходимо внести для корректной работы FTP-сервера:
listen=YES listen_ipv6=NO anonymous_enable=NO local_enable=YES write_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd allow_writeable_chroot=YES
После внесения изменений в файл настроек необходимо сохранить их и перезапустить службу vsftpd :
$ sudo systemctl restart vsftpd
Защита передачи данных при помощи SSL/TLS
Для защиты передачи ваших данных между FTP-клиентом и FTP-сервером в данной инструкции мы будем использовать генерацию самозаверяющего SSL-сертификата. Закрытый ключ и сертификат будут сохранены в одном файле, для чего следует применить команду:
$ sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
После установки SSL-сертификата необходимо внести изменения в конфигурационный файл:
А именно, внесите изменения в следующие строки данного файла:
rsa_cert_file=/etc/ssl/private/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.pem ssl_enable=YES
Настройка учётной записи FTP-пользователя
Для авторизации на FTP-сервере необходимо создать учетную запись пользователя. Изначально, подключаться к серверу можно и под локальным пользователем. Но более целесообразно для этих целей использовать специальную учётную запись. Для её создания используйте следующую команду:
Таким образом, у нас теперь есть пользователь ftpuser . Следующей командой нужно создать для него домашний каталог:
$ sudo mkhomedir_helper ftpuser
После этого для него необходимо создать пароль на вход:
Настройка брандмауэра
Если вы производили работы по первоначальной настройке виртуального сервера, то на нём должен быть запущен межсетевой экран UFW. Соответственно, для того, чтобы брандмауэр вашего VPS позволял осуществлять подключения, необходимо внести небольшие изменения в настройки UFW. Проще говоря, нужно будет добавить в брандмауэр исключения для TCP-портов 20 и 21. Делается это следующими командами:
$ sudo ufw allow 20/tcp $ sudo ufw allow 21/tcp
После чего брандмауэр следует перезапустить:
$ sudo ufw disable $ sudo ufw enable
И убедиться, что служба работает без ошибок:
Проверка подключения к FTP-серверу
Корректность произведённых настроек можно проверить через осуществление подключения к FTP-серверу. Для этой цели можно воспользоваться бесплатным FTP-клиентом FileZilla. После запуска приложения в FileZilla следует заполнить поля Хост и Имя пользователя . После нажатия кнопки Быстрое соединение система попросит ввести пароль учётной записи, под именем которой происходит подключение к FTP-серверу.
Подключение к серверу осуществлено успешно, значит произведенные настройки в конфигурационном файле корректны. В статусе подключения видно, что в данной сессии TLS соединение установлено , значит передача данных между клиентом и сервером шифруются.
Создание FTP-пользователя без панели управления ISPmanager
По умолчанию при установке ОС Linux из любых шаблонов на сервере доступен только суперпользователь root. Подключение с данными root по протоколу FTP невозможно в целях безопасности (используется незашифрованный пароль). При установке шаблонов ОС типа minimal сервер FTP также не будет включён в установочный пакет. Если у Вас возникла необходимость быстрой ручной настройки нового FTP-пользователя при отсутствии на сервере панели управления ISPmanager, нужно сделать следующее. Для начала подключитесь к серверу по протоколу SSH с правами root.
Установка FTP-сервера proftpd
systemctl start proftpd.service systemctl enable proftpd.service
Добавление разрешающих правил для брандмауэра
iptables -I INPUT -p tcp -m tcp --dport 21 -j ACCEPT systemctl iptables save
firewall-cmd --permanent --zone=public --add-port=21/tcp firewall-cmd --reload
Ограничение FTP-пользователей пределами домашнего каталога
Данная статья подразумевает работу c конфигурацией ProFTPd «по умолчанию», а в этом случае пользователь может выходить за пределы своего домашнего каталога, и хотя прав на работу с другими папками у него, скорее всего, нет, но при недостаточно строгой конфигурации сервера это может представлять угрозу безопасности. Решить эту проблему можно добавив одну строку в файл proftpd.conf :
systemctl restart proftpd.service
Создание нового FTP-пользователя
Простым FTP-пользователям нет необходимости иметь доступ к командной оболочке. Перед тем, как приступите к созданию новых пользователей, выполните команду:
useradd имя_пользователя -d /home/имя_папки -m -s /bin/false passwd имя_пользователя
Командами выше мы создали пользователя (имя_пользователя нужно заменить на незанятое имя) и соответствующую группу, назначили и создали (ключ -m можно опустить, если каталог уже существует) домашний каталог /home/имя_папки и выбрали /bin/false в качестве командной оболочки пользователя, тем самым отключив её в целях безопасности. Командой passwd мы задали пользователю необходимый пароль. В большинстве случаев на данном этапе вы уже можете подключаться с созданным пользователем к FTP-серверу, который по умолчанию работает на 21 порту. Однако, есть еще несколько шагов, которые вы, возможно, захотите выполнить.
Дополнительная информация
Доступ к командной оболочке (shell) Если вы всё-таки хотите предоставлять пользователю доступ к командной оболочке, то указывайте путь до любой действующей вместо /bin/false , например:
Пользователям обычного протокола FTP не нужен доступ к shell, поэтому безопаснее его не предоставлять. Расположение proftpd.conf Debian/Ubuntu: /etc/proftpd/proftpd.conf CentOS: /etc/proftpd.conf Используйте этот файл для более детальной настройки своего FTP-сервера при необходимости. Ограничение прав FTP-пользователя При необходимости вы можете ограничить права пользователя на запись в домашнюю директорию, позволив ему работать только с какой-нибудь внутренней папкой, например upload. От имени суперпользователя измените права:
chmod 555 /home/имя_папки mkdir /home/имя_папки/upload chown имя_пользователя:имя_пользователя /home/имя_папки/upload
В данном случае второе имя_пользователя является именем группы, которое по умолчанию совпадает с созданным вами именем пользователя.
Установка и настройка vsFTPd на Ubuntu или Astra
Обновлено: 17.04.2023 Опубликовано: 30.03.2017
Термины по теме: FTP, Ubuntu vsFTPd и proFTPd — одни из самых простых способов поднять сервер FTP на Linux. В данной инструкции пойдет речь о vsFTPd и Ubuntu (на примере версий 20 и 22), а также Debian и Astra Linux.
Установка и настройка
* write_enable — разрешить копировать файлы на сервер; chroot_local_user — использовать для пользователей изолированное окружение. И дописываем следующее:
- 20 — основной порт FTP для передачи.
- 21 — для активного режима. Используется для передачи команд.
- 60000-65535 — диапазон динамических портов, который нами был определен в конфигурационном файле. Используется для пассивного режима.
iptables -I INPUT -p tcp —match multiport —dports 20,21,60000:65535 -j ACCEPT
Для сохранения правил можно использовать утилиту:
apt install iptables-persistent
Разрешаем и перезапускаем сервис:
Добавление пользователя
По умолчанию, авторизация выполняется с использованием локальных пользователей. Чтобы использовать специальную учетную запись, для подключения к FTP, создаем пользователя следующей командой:
useradd ftpuser -d /ftp -s /bin/false -m
* где ftpuser — имя учетной записи; /ftp — домашний каталог (в него будем попадать при подключении); /bin/false — запрет пользователю на локальный вход в систему.
Открываем на редактирование следующий файл:
* мы добавили /bin/false в список разрешенных оболочек. В противном случае, может вернуться ошибка 530 Login incorrect.
Проверка
Для проверки подключения можно воспользоваться FTP-клиентом на другом компьютере (например, FileZilla или Total Commander).
Также можно установить FTP-клиент на сервер:
И для подключения используем следующую команду:
Система запросит логин и пароль.
Настройка SSL/TLS
TLS позволяет настроить безопасный FTP, передача данных через который осуществляется по шифрованному каналу.
Для данной цели можно использовать самоподписанный сертификат. Чтобы его создать, вводим команду:
openssl req -new -x509 -days 1461 -nodes -out /etc/ssl/certs/vsftpd.pem -keyout /etc/ssl/private/vsftpd.key -subj «/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=ftp.dmosk.local/CN=ftp»
* в данном примере мы создаем самоподписанный сертификат на 4 года для URL ftp.dmosk.local или ftp. Открытый ключ будет сохранен в файле /etc/ssl/certs/vsftpd.pem, закрытый — /etc/ssl/private/vsftpd.key. При желании, мы можем использовать купленный сертификат или получить его бесплатно у Let’s Encrypt.
Открываем на редактирование конфигурационный файл vsFTPd:
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key
ssl_enable=YES
* где ssl_enable разрешает использование шифрования; rsa_cert_file — путь к открытому ключу; rsa_private_key_file — путь к закрытому ключу.
allow_anon_ssl=NO
force_local_data_ssl=NO
force_local_logins_ssl=NO
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
ssl_ciphers=HIGH
- allow_anon_ssl разрешает использовать SSL анонимным пользователям;
- force_local_data_ssl требует использования шифрования, и если установить YES, клиенты без шифрования не смогут подключиться;
- force_local_logins_ssl также требует подключение по SSL;
- ssl_tlsv1 — использовать TLS версии 1;
- ssl_sslv2 и ssl_sslv3 — использовать SSL версии 1 и 2;
- ssl_ciphers — выбор шифра. В данном примере мы говорим использовать максимально безопасный.
Виртуальные пользователи
Устанавливаем pam-модуль, позволяющий аутентифицировать пользователей с помощью passwd-like файлов:
apt install libpam-pwdfile
Открываем конфигурационный файл vsftpd и добавляем следующее:
user_config_dir=/etc/vsftpd_virtuser_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
nopriv_user=vsftpd
guest_username=vsftpd
- user_config_dir — каталог для хранения настроек пользователя.
- guest_enable — разрешаем гостевой вход.
- virtual_use_local_privs — виртуальные пользователи используют привилегии, как локальные, а не анонимные.
- pam_service_name — имя pam-сервиса.
- nopriv_user — под каким пользователем работает сервер, когда ему не нужны привилегии.
- guest_username — имя гостевого пользователя.
Для возможности использовать утилиту htpasswd ставим следующий пакет:
Создаем каталог для хранения файла виртуальных пользователей и двух пользователей:
htpasswd -cd /etc/vsftpd/ftpd.passwd virt1
htpasswd -d /etc/vsftpd/ftpd.passwd virt2
* обратите внимание, опция -c команды htpasswd используется только при создании файла (при первом вводе команды). Мы создаем два пользователя — virt1 и virt2.
Архивируем имеющийся pam-сервис для vsftpd:
mv /etc/pam.d/vsftpd /etc/pam.d/back_vsftpd
Создаем новый со следующим содержимым:
auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so
В самой системе создаем пользователя, которого используем как гостевого:
useradd vsftpd -d /home/vsftpd -g nogroup -m -s /bin/false
* с домашней директорией /home/vsftpd, основной группой nogroup и без возможности входа в систему (-s /bin/false).
Создаем каталог хранения настроек виртуальных пользователей:
и создаем настройку для первого:
* local_root — домашняя директория для FTP пользователя virt1.
Создаем домашний каталог для нашего пользователя virt1 и задаем правильные права:
chown vsftpd:nogroup /var/www/virt1
systemctl restart vsftpd || service vsftpd restart