summaryrefslogtreecommitdiff
path: root/LINUX/VSFTPD.md
diff options
context:
space:
mode:
authorvlapa <vlapa@ya.ru>2026-06-13 20:33:26 +0300
committervlapa <vlapa@ya.ru>2026-06-13 20:33:26 +0300
commite5abc1fe99340b979b18864d978179f71fe8f5c5 (patch)
tree98fd0ad7c6d0744894d6e74e446daacd9e6dd1b5 /LINUX/VSFTPD.md
First
Diffstat (limited to 'LINUX/VSFTPD.md')
-rw-r--r--LINUX/VSFTPD.md367
1 files changed, 367 insertions, 0 deletions
diff --git a/LINUX/VSFTPD.md b/LINUX/VSFTPD.md
new file mode 100644
index 0000000..d2e80ed
--- /dev/null
+++ b/LINUX/VSFTPD.md
@@ -0,0 +1,367 @@
+## Обновление системных пакетов
+
+Перед установкой любого нового ПО рекомендуем обновлять системные пакеты до актуальных версий. Рассмотрим, какие команды для этого следует выполнить.
+
+1. Обновление списка доступных пакетов и их версий:
+
+ `sudo apt update`
+
+2. Обновление установленных пакетов до последних версий:
+
+ `sudo apt upgrade -y`
+
+Теперь система готова к установке FTP-сервера.
+
+## Выбор FTP-сервера на Ubuntu
+
+FTP-серверы широко используют для обмена файлами, так как FTP-протокол позволяет одновременно передавать большие объемы данных, например резервные копии. Быстрое копирование файлов на FTP-сервер достигается благодаря передаче данных потоком. 
+
+Существует несколько популярных FTP-серверов для Linux. Рассмотрим некоторые из них.
+
+**VSFTPD (Very Secure FTP Daemon)**
+
+Преимущества: высокий уровень безопасности, отличная производительность, поддержка виртуальных пользователей, возможность ограничения доступа к домашним директориям.
+
+Недостатки: для обеспечения максимальной безопасности нужна детальная настройка.
+
+**ProFTPD (Professional FTP Daemon)**
+
+Преимущества: гибкие настройки, поддержка модулей, возможность использования конфигурации, похожей на Apache.
+
+Недостатки: более длительная настройка по сравнению с VSFTPD, меньшая производительность при высокой нагрузке.
+
+**Pure-FTPd**
+
+Преимущества: легкость установки и использования, высокая производительность, поддержка виртуальных пользователей.
+
+Недостатки: меньшее количество настроек безопасности по сравнению с VSFTPD и ProFTPD.
+
+### Что выбрали
+
+Для демонстрации установки и настройки будем использовать VSFTPD по нескольким причинам.
+
+- Низкий ресурсный overhead. VSFTPD потребляет минимум ресурсов, что делает его идеальным для систем с ограниченными возможностями.
+- Высокая скорость передачи данных. Обеспечивает отличную производительность при передаче файлов, что важно для высоконагруженных серверов.
+- Встроенная поддержка шифрования для безопасной передачи данных — SSL/TLS.
+- Многоплатформенность. Работает на большинстве UNIX-подобных систем.
+- Простота интеграции с системами безопасности. Легко интегрируется с PAM и другими системами аутентификации для гибкого управления доступом.
+
+[
+
+## Создайте FTP-сервер на мощностях Selectel
+
+Более 100 фиксированных конфигураций с готовностью — 2 минуты.
+
+](https://selectel.ru/services/cloud/servers/ftp/)
+
+## Установка FTP-сервера на Ubuntu
+
+### Установка VSFTPD
+
+VSFTPD прост в установке — он доступен в стандартных репозиториях Ubuntu. Откроем терминал и выполним следующую команду:
+
+ `sudo apt install vsftpd -y`
+
+### Запуск и настройка автозагрузки VSFTPD
+
+После установки запустим VSFTPD:
+
+ `sudo systemctl start vsftpd`
+
+Совет: для настройки автозагрузки VSFTPD при запуске системы выполните команду sudo systemctl enable vsftpd.
+
+### Проверка состояния VSFTPD
+
+После запуска службы проверим ее состояние:
+
+ `sudo systemctl status vsftpd`
+
+В выводе отобразится текущий статус службы VSFTPD. Если она запущена корректно, мы увидим сообщение, что VSFTPD активен и работает (Active: active (running)).
+
+Пример вывода sudo systemctl status vsftpd:
+
+ `● vsftpd.service - vsftpd FTP server Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2024-06-23 14:35:26 UTC; 2h 15min ago Main PID: 12345 (vsftpd) Tasks: 1 (limit: 4915) Memory: 1.3M CGroup: /system.slice/vsftpd.service └─12345 /usr/sbin/vsftpd /etc/vsftpd.conf`
+
+### Настройка файрвола для FTP
+
+Если на сервере включен файрвол, следует открыть порты для FTP, чтобы обеспечить доступ к серверу.
+
+В примере используем UFW (Uncomplicated Firewall). Команды далее могут отличаться в зависимости от вашего брандмауэра.
+
+
+1. По умолчанию FTP использует порты 20 и 21 (TCP-трафик), а также диапазон 30000-31000 (пассивный режим FTP). Чтобы открыть их, выполним команды:
+
+ `sudo ufw allow 20/tcp sudo ufw allow 21/tcp sudo ufw allow 30000:31000/tcp`
+
+2. Перезапустим файрвол для применения изменений:
+
+ `sudo ufw reload`
+
+3. Убедимся, что правила файрвола применены корректно:
+
+ `sudo ufw status`
+
+Пример вывода sudo ufw status:
+
+ `Status: active To Action From -- ------ ---- 20/tcp ALLOW Anywhere 21/tcp ALLOW Anywhere 30000:31000/tcp ALLOW Anywhere 22/tcp ALLOW Anywhere`
+
+## Настройка FTP-сервера в Ubuntu
+
+### Основная настройка
+
+Конфигурационный файл VSFTPD находится в директории /etc/vsftpd.conf. Чтобы его отредактировать, можно воспользоваться любым текстовым редактором, например nano:
+
+ `sudo nano /etc/vsftpd.conf`
+
+Для обеспечения безопасности и эффективности работы сервера изменим конфигурационный файл VSFTPD в соответствии с настройками.
+
+1. Отключим анонимный доступ, заменив значение параметра anonymous_enable на NO:
+
+ `anonymous_enable=NO`
+
+2. Для разрешения входа на сервер локальным пользователям установим значение параметра local_enable на YES:
+
+ `local_enable=YES`
+
+3. Разрешим команды записи. Чтобы пользователи могли загружать файлы на сервер, установим значение параметра write_enable на YES:
+
+ `write_enable=YES`
+
+4. Настроим права доступа для новых файлов, создаваемых пользователями. Их автоматическое назначение осуществляется с помощью параметра local_umask. Значение 022 позволяет владельцу файла записывать, читать и выполнять, а всем остальным — читать и выполнять:
+
+ `local_umask=022`
+
+Набор прав состоит из трех цифр:
+
+- первая — права владельца,
+- вторая — права группы владельца,
+- третья — права остальных пользователей.
+
+Каждая из них может принимать значения:
+
+- 0 — нет прав;
+- 1 — выполнение;
+- 2 — запись;
+- 3 — запись и выполнение;
+- 4 — чтение;
+- 5 — чтение и выполнение;
+- 6 — чтение и запись;
+- 7 — чтение, запись и выполнение.
+
+Новые файлы и директории будут создаваться с правами, которые исходят из полного набора (777) за вычетом значений local_umask. Например, маска 022 означает набор прав 755.
+
+5. Включим отображение приветственных сообщений при входе в директории:
+
+ `dirmessage_enable=YES`
+
+Для настройки текста сообщений следует перейти в интересующую директорию и создать в ней файл .message. Когда пользователь будет переходить в данную директорию, он будет получать сообщение, текст которого указан в файле.
+
+6. Для корректной работы файрвола установим использование порта 20 для передачи данных:
+
+ `connect_from_port_20=YES`
+
+7. Чтобы ограничить пользователей их домашними директориями, установим значение параметра chroot_local_user на YES:
+
+ `chroot_local_user=YES allow_writeable_chroot=YES`
+
+Параметр allow_writeable_chroot используется, чтобы разрешить запись в домашнюю директорию пользователя при использовании chroot_local_user=YES.
+
+8. Зададим корневую директорию для каждого пользователя:
+
+ `user_sub_token=$USER local_root=/home/$USER/ftp`
+
+9. После внесения всех изменений сохраним файл (**Ctrl+O** в nano), закроем редактор (**Ctrl+X** в nano) и перезапустим службу VSFTPD для применения изменений:
+
+ `sudo systemctl restart vsftpd`
+
+### Тестирование VSFTPD
+
+1. Проверим корректность применения настроек. Для начала создадим тестового пользователя:
+
+ `sudo adduser testuser sudo passwd testuser`
+
+2. Создадим необходимые директории и настроим на них права:
+
+ `sudo mkdir -p /home/testuser/ftp/upload sudo chown nobody:nogroup /home/testuser/ftp sudo chmod a-w /home/testuser/ftp sudo chown -R testuser:testuser /home/testuser/ftp/upload`
+
+3. Добавим пользователя в список пользователей VSFTPD:
+
+ `echo "testuser" | sudo tee -a /etc/vsftpd.userlist`
+
+4. Подключимся к серверу с учетными данными тестового пользователя и убедимся в возможности загружать файлы в директорию /upload. Можно использовать любой FTP-клиент, в рамках инструкции будем пользоваться FileZilla.
+
+### Настройка часового пояса
+
+Чтобы сервер использовал локальное время, откроем конфигурационный файл VSFTPD и установим параметр use_localtime на YES:
+
+ `use_localtime=YES`
+
+### Настройка логов
+
+Для настройки логирования перейдем в конфигурационный файл VSFTPD и включим логирование всех FTP-транзакций:
+
+ `xferlog_enable=YES xferlog_std_format=YES`
+
+Параметр xferlog_std_format позволяет использовать стандартный формат логов.
+
+Также следует указать корректный путь к файлу логов (обычно /var/log/vsftpd.log):
+
+ `xferlog_file=/var/log/vsftpd.log`
+
+### Настройка PAM-сервиса
+
+PAM (Pluggable Authentication Modules) — это система аутентификации, используемая в UNIX-подобных ОС, включая Linux. PAM позволяет администраторам настраивать политику аутентификации для различных приложений и служб. Для этого используется набор модулей, которые могут быть включены и настроены по мере необходимости. 
+
+Для использования PAM необходимо предварительно включить его в файле /etc/vsftpd.conf.
+
+1. Откроем файл /etc/vsftpd.conf:
+
+ `sudo nano /etc/vsftpd.conf`
+
+2. Отредактируем строку pam_service_name:
+
+ `pam_service_name=vsftpd`
+
+Для дальнейшей настройки сервиса PAM в VSFTPD следует внести изменения в файл /etc/pam.d/vsftpd. Внутри него — инструкции, которые PAM использует для управления аутентификацией пользователей при подключении к FTP-серверу. 
+
+3. Откроем файл конфигурации PAM для VSFTPD:
+
+ `sudo nano /etc/pam.d/vsftpd`
+
+4. Настроим параметры аутентификации в соответствии со списком:
+
+ `auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed auth required pam_shells.so auth include common-auth account include common-account session include common-session`
+
+- auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed — отказывает в доступе пользователям из файла /etc/vsftpd.ftpusers.
+- auth required pam_shells.so — проверяет, что оболочка пользователя разрешена.
+- auth include common-auth — включает общие правила аутентификации.
+- account include common-account — включает общие правила управления учетными записями.
+- session include common-session — включает общие правила управления сеансами.
+
+5. Создадим файл списка пользователей:
+
+ `sudo nano /etc/vsftpd.ftpusers`
+
+Добавим имена пользователей, которым следует запретить доступ (по одному на строку).
+
+6. Перезапустим службу VSFTPD:
+
+ `sudo systemctl restart vsftpd`
+
+## Создание пользователей
+
+### Создание
+
+Для создания нового пользователя на сервере выполним команду:
+
+ `sudo adduser ftpuser`
+
+Далее следует ввести пароль для нового пользователя и несколько дополнительных данных (имя, номер телефона и прочее). Можно оставить эти поля пустыми, нажав **Enter**.
+
+Для назначения или изменения пароля пользователя нужно выполнить команду sudo passwd ftpuser, ввести новый пароль и подтвердить его.
+
+### Настройка домашних папок
+
+1. Создадим домашнюю папку пользователя:
+
+ `sudo mkdir -p /home/ftpuser/ftp`
+
+2. Домашний каталог пользователя должен быть защищен от записи, чтобы соблюсти требования безопасности VSFTPD:
+
+ `sudo chown nobody:nogroup /home/ftpuser/ftp sudo chmod a-w /home/ftpuser/ftp`
+
+3. Далее создадим папку, в которую пользователь сможет загружать файлы, и настроим права доступа:
+
+ `sudo mkdir -p /home/ftpuser/ftp/upload sudo chown -R ftpuser:ftpuser /home/ftpuser/ftp/upload sudo chmod -R 0755 /home/ftpuser/ftp/upload`
+
+### Настройка анонимного или только авторизованного доступа
+
+VSFTPD поддерживает доступ как анонимных, так и авторизованных пользователей. Для настройки политики следует внести изменения в конфигурационный файл.
+
+#### Анонимный доступ
+
+Если нам нужно разрешить анонимный доступ к FTP-серверу, следует указать для параметра anonymous_enable значение YES в конфигурационном файле /etc/vsftpd.conf:
+
+ `anonymous_enable=YES`
+
+#### Авторизованный доступ
+
+Чтобы разрешить доступ к FTP-серверу авторизованным пользователям, укажем для параметра local_enable значение YES:
+
+ `local_enable=YES`
+
+### Разрешение / запрет доступа по SSH
+
+Все настройки доступа к серверу по SSH находятся в конфигурационном файле /etc/ssh/sshd_config. В нем описываются разрешающие и запрещающие правила.
+
+Для разрешения или запрета доступа к серверу по SSH группе пользователей следует указать в конфигурационном файле одну из следующих строк соответственно:
+
+ `AllowGroups ftpusers`
+
+ `DenyGroups ftpusers`
+
+Чтобы разрешить или запретить доступ для отдельных пользователей, следует использовать следующие параметры:
+
+ `AllowUsers ftpuser`
+
+ `DenyUsers ftpuser`
+
+Группа ftpusers и пользователь ftpuser указаны в качестве примера.
+
+Для применения новых правил перезапустим службу SSH:
+
+ `sudo systemctl restart ssh`
+
+Порядок правил, указанных в конфигурационном файле SSH, имеет важное значение в определении политики доступа пользователя. Например, первым указано правило, запрещающее пользователям группы ftpusers доступ по SSH, а затем указано правило, разрешающее доступ пользователю ftpuser1 (входящему в группу ftpusers). 
+
+В таком случае у пользователя ftpuser1 будет доступ к серверу по SSH. При установке этих правил в обратном порядке, пользователь ftpuser1 не получит доступ по SSH.
+
+## Настройка SSL/TLS
+
+Обеспечение безопасности FTP-соединений может обеспечить [SSL/TLS-протокол](https://selectel.ru/blog/what-is-ssl/).  
+
+1. Создадим директорию,  в которой будут храниться SSL-сертификаты и ключи:
+
+ `sudo mkdir /etc/ssl/private`
+
+2. Создадим самоподписанный сертификат:
+
+ `sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.key -out /etc/ssl/private/vsftpd.pem`
+
+Ключ будет действителен в течение 10 лет.
+
+В процессе генерации будет предложено ввести информацию о сертификате: страну, город, организацию и т. д. Можно оставить некоторые поля пустыми, нажав **Enter**.
+
+3. Для использования созданного сертификата откроем конфигурационный файл VSFTPD:
+
+ `sudo nano /etc/vsftpd.conf`
+
+4. Внесем в него изменения в соответствии со следующим списком:
+
+ `rsa_cert_file=/etc/ssl/private/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.key ssl_enable=YES allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO require_ssl_reuse=NO ssl_ciphers=HIGH`
+
+- rsa_cert_file и rsa_private_key_file — указывают путь к сертификату и приватному ключу.
+- ssl_enable=YES — включает SSL.
+- allow_anon_ssl=NO — запрещает анонимный доступ через SSL.
+- force_local_data_ssl=YES и force_local_logins_ssl=YES — требуют использование SSL для всех данных и логинов локальных пользователей.
+- ssl_tlsv1=YES, ssl_sslv2=NO, ssl_sslv3=NO — включают TLSv1 и отключают устаревшие SSLv2 и SSLv3.
+- require_ssl_reuse=NO — отключает требование повторного использования SSL-сессий.
+- ssl_ciphers=HIGH — устанавливает использование только сильных шифров.
+
+5. После внесения изменений сохраним файл и перезапустим службу VSFTPD:
+
+ `sudo systemctl restart vsftpd`
+
+При установке SSL/TLS-сертификатов подключение через FTP-клиенты осуществляется стандартным путем.
+
+## Проверка подключения к серверу через FTP-клиент
+
+Теперь FTP-сервер настроен и готов принимать безопасные соединения от клиентов.
+
+Популярные программы, позволяющие подключаться к FTP-серверам, — FileZilla, WinSCP, FAR Manager, Total Commander, Midnight Commander и Cyberduck. Далее будем использовать наиболее известный кроссплатформенный FTP-клиент — FileZilla.
+
+Для его установки в Ubuntu выполним команду:
+
+ `sudo apt-get install filezilla`
+
+Для подключения к FTP-серверу следует заполнить поля **Хост** (IP-адрес сервера), **Имя пользователя**, **Пароль** и нажать на кнопку **Быстрое соединение**. После подключения к FTP-серверу в правой части окна появится список директорий, доступных для данного пользователя. \ No newline at end of file