FTP на сервере Linux Это клиент-серверный протокол, передающий файлы по протоколу TCP/IP, обычно через порт 21. Он поддерживает аутентификацию пользователей, навигацию по каталогам и операции загрузки/выгрузки.
В то время как классический FTP Если данные не зашифрованы, вы можете защитить их с помощью FTPS (TLS) или замените его на SFTP (SSHДля большинства производственных целей, SFTP or FTPРекомендуется вариант S.
Понимание FTP Эта функция на сервере Linux помогает перемещать файлы веб-сайта, автоматизировать резервное копирование и взаимодействовать с командами. В этом руководстве объясняется, как это сделать. FTP работает, разница между FTP, FTPПесок SFTPкак установить и настроить FTP сервер (vsftpd), обеспечьте его безопасность, устраняйте неполадки и следуйте передовым методам повышения производительности и надежности.
Как FTP Работает на сервере Linux.
FTP Используется два канала: управляющий канал для команд и канал передачи данных для передачи файлов и просмотра содержимого каталогов. Сложность заключается в способе открытия канала передачи данных: активный или пассивный режим.

Активный и пассивный FTP
В активном режиме сервер инициирует соединение для передачи данных клиенту. В пассивном режиме клиент инициирует как управляющее, так и информационное соединение, а сервер сообщает клиенту, какой пассивный порт использовать. Пассивный режим лучше работает за NAT, брандмауэрами и в облачных средах.
- Канал управления: ТКП 21 (FTP) или TCP 21 с аутентификацией TLS (явная) FTPS)
- Активный канал передачи данных: Сервер подключается по протоколу TCP 20 к клиентскому порту.
- Канал передачи данных (пассивный): Сервер прослушивает порты в заданном вами диапазоне (например, 40000–50000).
FTP против FTPС против. SFTP
- FTP: Незашифрованный, простой, широко поддерживаемый. Не рекомендуется использовать в общедоступном интернете.
- FTPС (FTP через TLS): Шифрует учетные данные и данные. Два варианта: явный. FTPS (аутентификация TLS на порту 21) — наиболее распространенный вариант; неявный. FTPS (порт 990) — устаревшая версия.
- SFTP (SSH Протокол передачи файлов): Другой протокол SSH (TCP 22). Совместимость с брандмауэрами, аутентификация на основе ключей, легко повышает уровень безопасности. Предпочтителен в большинстве современных конфигураций.
Общее правило: если вы контролируете оба конца и вам нужен классический вариант FTP совместимость, использование FTPЕсли вам нужна более простая система безопасности и меньше проблем с брандмауэром, используйте... SFTP.
Выбор FTP Сервер на Линукс
- vsftpd: Очень безопасный FTP Демон. Быстрый, легковесный, ориентированный на безопасность. Отличный выбор по умолчанию для FTP/FTPS.
- ProFTPD: Гибкий, ApacheКонфигурация в стиле программирования, богатый набор модулей. Подходит для сложных виртуальных хостингов.
- Чистый-FTPd: Простая настройка, виртуальные пользователи, поддержка TLS. Сбалансированная простота и функциональность.
Для большинства администраторов vsftpd предлагает оптимальное сочетание производительности и безопасности при минимальной настройке. В описанных ниже шагах используется vsftpd.
Установка и настройка vsftpd
Установка пакета
# Debian/Ubuntu
sudo apt update
sudo apt install -y vsftpd
# RHEL/CentOS/AlmaLinux/Rocky
sudo dnf install -y vsftpd
# Start and enable service
sudo systemctl enable --now vsftpd
sudo systemctl status vsftpdБазовая конфигурация, ориентированная на безопасность.
Отредактируйте файл /etc/vsftpd.conf. Следующая настройка повышает безопасность распространенной конфигурации «только для локальных пользователей» с использованием chroot, пассивных портов и запретом анонимного доступа.
# /etc/vsftpd.conf (baseline secure config)
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
# Chroot local users to their home directories
chroot_local_user=YES
allow_writeable_chroot=YES
# Passive mode ports (match your firewall)
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000
# Limit users to a whitelist file (optional)
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
# Disable ASCII mode for performance and safety
ascii_upload_enable=NO
ascii_download_enable=NO
# Security & performance
seccomp_sandbox=YES
pam_service_name=vsftpd
Затем перезапустите vsftpd:
sudo systemctl restart vsftpdСоздайте пользователей и установите права доступа.
# Create a Linux user without shell access
sudo useradd -m -s /usr/sbin/nologin ftpuser
sudo passwd ftpuser
# Optional: limit to specific directory
sudo mkdir -p /var/www/ftpuser
sudo chown ftpuser:ftpuser /var/www/ftpuser
sudo usermod -d /var/www/ftpuser ftpuser
# Add user to vsftpd whitelist (if enabled)
echo "ftpuser" | sudo tee -a /etc/vsftpd.userlistОткрытый брандмауэр и SELinux
Откройте порт 21 и пассивный диапазон, который вы настроили. Также разрешите доступ. FTPS, если вы включите TLS позже.
# UFW (Ubuntu)
sudo ufw allow 21/tcp
sudo ufw allow 40000:50000/tcp
sudo ufw reload
# firewalld (RHEL/CentOS/Alma/Rocky)
sudo firewall-cmd --permanent --add-port=21/tcp
sudo firewall-cmd --permanent --add-port=40000-50000/tcp
sudo firewall-cmd --reload
# SELinux (allow FTP to read/write home directories and passive ports)
sudo setsebool -P ftpd_full_access on
# Or more granular:
# sudo setsebool -P allow_ftpd_anon_write=off
# sudo setsebool -P allow_ftpd_full_access=onПроверить соединение
# From a client machine
ftp your.server.ip
# or use lftp for better features
lftp -u ftpuser your.server.ip
# Basic commands once connected
pwd
ls
cd dir
get file
put localfile
byeБезопасный FTP правильный путь
Включите FTPS (TLS) в vsftpd
Если этого требует политика FTP для обеспечения совместимости включите TLS. Используйте явное указание. FTPS (аутентификация TLS на порту 21). Сгенерируйте или установите сертификат:
# Self-signed (replace CN)
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048
-keyout /etc/ssl/private/vsftpd.key
-out /etc/ssl/certs/vsftpd.crt
-subj "/C=US/ST=State/L=City/O=Org/OU=IT/CN=ftp.example.com"
# vsftpd TLS config additions
sudo bash -c 'cat >> /etc/vsftpd.conf' << "EOF"
ssl_enable=YES
rsa_cert_file=/etc/ssl/certs/vsftpd.crt
rsa_private_key_file=/etc/ssl/private/vsftpd.key
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_tlsv1_1=YES
ssl_tlsv1_2=YES
require_ssl_reuse=NO
ssl_ciphers=HIGH
EOF
sudo systemctl restart vsftpdПримечание: Многие современные клиенты предпочитают TLSv1.2+. Если более старые клиенты не работают, скорректируйте настройки TLS соответствующим образом.
Используйте SFTP (рекомендуется в большинстве случаев)
SFTP пробегает SSH (порт 22). Дополнительный демон не требуется; ОткрытоSSH Обычно устанавливается по умолчанию. Его проще защитить, и это легче сделать через брандмауэры.
# Ensure SSH is installed and running
sudo systemctl enable --now sshd
# Configure SFTP-only group with chroot
sudo groupadd sftpusers
sudo useradd -m -G sftpusers -s /usr/sbin/nologin sftpuser
sudo passwd sftpuser
# In /etc/ssh/sshd_config (add at the end)
Subsystem sftp internal-sftp
Match Group sftpusers
ChrootDirectory %h
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
# Permissions: chroot dir must be owned by root and not writable by user
sudo chown root:root /home/sftpuser
sudo mkdir -p /home/sftpuser/upload
sudo chown sftpuser:sftpusers /home/sftpuser/upload
sudo systemctl restart sshd
# Connect
sftp [email protected]Дополнительные советы по закалке
- Внедрить использование ключей SSH аутентификация для SFTPПо возможности отключайте аутентификацию по паролю.
- Используйте надежные пароли и регулярно меняйте учетные данные; интегрируйте Fail2ban для блокировки попыток подбора паролей методом перебора.
- Отключить анонимный доступ. Ограничить доступ пользователей с помощью списков пользователей или блокировки по совпадению.
- Установите соответствующую маску прав доступа (например, 022) и права доступа, чтобы предотвратить запись файлов группами/всеми пользователями.
- Регулярно регистрируйте передачу данных и просматривайте записи. Включите xferlog в vsftpd и syslog для SSH.
Общие FTP и SFTP Команды
# FTP client basics
ftp server
User: ftpuser
Password: ****
ls
cd /path
lcd /local/path
get remote.file
put local.file
mget *.zip
mput *.html
bye
# SFTP client basics
sftp user@server
ls
cd /remote/dir
lcd /local/dir
get file
put file
chmod 640 file
mkdir newdir
exit
# lftp (robust, supports FTPS)
lftp -u user,pass -e "set ssl:verify-certificate no; mirror -R ./site /var/www/html; bye" ftps://serverДиагностика неисправностей FTP в Linux
Соединение отклонено или истекло время ожидания
- Служба запущена? `systemctl status vsftpd or sshd`
- Брандмауэр открыт? Порты 21 и пассивный диапазон для FTP/FTPС; 22 для SFTP
- Разрешают ли группы безопасности облачных сервисов/списки контроля доступа сети входящий трафик?
530 Неверный логин
- Проверьте существование пользователя, пароль и оболочку (для этого подойдет nologin). FTP/SFTP-только).
- При использовании vsftpd userlist убедитесь, что пользователь находится в белом списке и userlist_deny=NO.
- Права доступа к домашнему каталогу должны разрешать доступ (не должны быть доступны для записи группой/всеми пользователями при использовании chroot).
425 Не удается открыть соединение для передачи данных / не удается получить список каталогов
- Откройте пассивные порты в брандмауэре и сопоставьте параметры vsftpd pasv_min_port и pasv_max_port.
- Клиент находится за NAT? Принудительно включите пассивный режим в настройках клиента.
- On FTPS, некоторые устройства нарушают глубокий анализ пакетов. Отключите DPI или разрешите. FTPS правильно.
553 Не удалось создать файл / отказано в доступе
- Проверьте права собственности на каталог и права на запись для пользователя.
- On SFTP Использование chroot гарантирует, что операции записи будут выполняться в подкаталоге, принадлежащем пользователю.
- В SELinux используйте setsebool или соответствующие контексты (se).manage fcontext, restorecon).
Передовые методы обеспечения производительности и надежности
- Используйте пассивный режим с ограниченным диапазоном портов, чтобы упростить настройку брандмауэра и уменьшить количество случайных зависаний.
- Поддерживайте соединения активными с помощью механизма keepalive на стороне клиента; настройте тайм-ауты (idle_session_timeout, data_connection_timeout).
- Для каталогов с большим объемом загружаемых файлов используйте выделенную файловую систему или диск, чтобы избежать конфликтов ввода-вывода.
- При необходимости ограничьте параллельное выполнение (например, один процесс на клиента) или масштабируйте систему горизонтально с помощью нескольких узлов.
- Для мониторинга журналов и метрик используйте xferlog, systemd journal и сетевые графики для выявления узких мест.
Когда следует выбирать управляемый хостинг?
If FTP/SFTP В случае с производственной инфраструктурой, простои или неправильная настройка обходятся дорого. manageVPS или выделенный сервер от YouStable можно предварительно настроить безопасность SFTP, FTPS с автоматическим продлением TLS, политиками брандмауэра и круглосуточным мониторингом. Это позволит вам сосредоточиться на своем приложении, в то время как наша команда обеспечит быструю и безопасную передачу данных.
FAQ«s
1. Is FTP Безопасно ли это на сервере Linux?
одноцветный FTP Это небезопасно, поскольку учетные данные и данные не зашифрованы. Для обеспечения безопасности используйте FTPS (TLS) с vsftpd или SFTP за SSHОба метода шифруют трафик; SFTP Как правило, его проще развернуть через брандмауэры и системы поддержки. SSH ключи.
2. Какие порты мне нужно открыть? FTP, FTPПесок SFTP?
FTP: TCP 21 плюс пассивный диапазон (например, 40000–50000). FTPS (явное): TCP 21 с тем же пассивным диапазоном после AUTH TLS; неявное FTPS использует TCP 990. SFTP Использует только TCP 22, пассивный диапазон не требуется.
3. Я должен выбрать FTPС или SFTP?
Отбор SFTP По возможности: это проще, безопасно по умолчанию и совместимо с брандмауэром. Выбирайте... FTPТолько если вам требуется строгий FTP совместимость с устаревшими системами или конкретными рабочими процессами обеспечения соответствия требованиям, включающими FTP клиенты и серверы.
4. Как изменить каталог для загрузки файлов по умолчанию для пользователя?
Для vsftpd установите домашний каталог пользователя (usermod -d /path user) и убедитесь, что права доступа соответствуют модели chroot. SFTP При использовании chroot домашний каталог должен принадлежать пользователю root и быть недоступен для записи; создайте подпапку с правами записи, принадлежащую пользователю (например, /home/user/upload).
5. Почему списки в каталогах работают локально, но не работают через интернет?
Обычно проблема связана с пассивным режимом. Убедитесь, что ваш сервер объявляет правильный публичный IP-адрес, определите диапазон пассивных портов в vsftpd и откройте этот диапазон в брандмауэре и группах безопасности облака. Во многих аудитах это само по себе устраняет ошибки 425/тайм-аут.
