Это старая версия документа.


Сервер FTP

Протокол передачи файлов (FTP) - это TCP протокол для передачи файлов между компьютерами. В прошлом он использовался также для загрузки [файлов в интернете], но, поскольку этот метод не использует шифрование, пользовательские данные как и содержимое файлов передаются в открытую и легко перехватываются. Поэтому, если вы здесь ищете способ безопасно передавать и загружать файлы, лучше обратитесь к статье по OpenSSH в разделе Удаленное администрирование.

FTP работает на основе модели клиент/сервер. Серверный компонент называется сервисом FTP. Он постоянно слушает FTP запросы от удаленных клиентов. При получении запроса он управляет входом и установкой соединения. На протяжении сессии он выполняет любые команды, переданные FTP клиентом.

Доступ к FTP серверу может быть организован двумя способами:

  1. Анонимным (Anonymous)

  2. Авторизованным (Authenticated)

В анонимном режиме удаленный клиент может получить доступ к FTP серверу, используя учетную запись пользователя по умолчанию с именем «anonymous» или «ftp» и передав адрес email в качестве пароля. В авторизованном режиме пользователь должен иметь учетное имя и пароль. Этот последний вариант крайне небезопасный и не должен использоваться за исключением специальных обстоятельств. Если вы хотите передавать файлы безопасно, смотрите SFTP в разделе по OpenSSH серверу. Пользовательский доступ к каталогам и файлам FTP сервера зависит от прав доступа пользователя, указанного при входе. Как правило, сервис FTP скрывает корневой каталог FTP сервера, подменяя его на домашний каталог FTP. Это скрывает корень файловой системы от удаленных сессий.

vsftpd - установка FTP сервера

vsftpd - это сервис FTP, доступный в Ubuntu. Его легко устанавливать, настраивать и поддерживать. Для установки vsftpd вы можете выполнить следующую команду:

sudo apt-get install vsftpd

Настройка анонимного доступа по FTP

Настройка vsftpd по умолчанию не разрешает анонимную загрузку. Если вы хотите разрешить анонимную загрузку, измените в /etc/vsftpd.conf следующее:

anonymous_enable=Yes

В процессе установки создается пользователь ftp с домашним каталогом /srv/ftp. Это каталог по умолчанию для FTP.

Если вы желаете поменять его расположение, например, на /srv/files/ftp, просто создайте новый каталог и измените домашний каталог пользователя ftp:

sudo mkdir /srv/files/ftp
sudo usermod -d /srv/files/ftp ftp 

После изменений перезапустите vsftpd:

sudo service vsftpd restart

Под конец скопируйте все файлы и каталоги, которые вы хотите сделать доступными для анонимного FTP в /srv/files/ftp (или /srv/ftp, если вы хотите оставить настройки по умолчанию).

Настройка авторизованного доступа по FTP

Для аутентификации локальных пользователей надо раскоментировать строчку

local_enable=YES

По умолчанию vsftpd настроен на аутентификацию системных пользователей с возможностью получать файлы. Если вы хотите пользователям разрешить загружать файлы, измените в /etc/vsftpd.conf:

write_enable=YES

после чего перезагрузите vsftpd:

sudo restart vsftpd

Теперь при входе системных пользователей по FTP они будут попадать в свои домашние каталоги, где они смогут скачивать, загружать [файлы], создавать каталоги и т.д.

Аналогично, по умолчанию анонимный пользователь не имеет возможности загружать файлы на FTP сервер. Для изменения этой настройки уберите комментарий на следующей строке и перезапустите vsftpd:

anon_upload_enable=YES
Разрешение анонимному пользователю загружать файлы может оказаться серьезной угрозой безопасности. Лучше не разрешать анонимную загрузку файлов на сервера с прямым доступом из интернета.

Конфигурационный файл содержит много параметров настройки. Информация по каждому параметру доступна в этом же файле. В качестве альтернативы вы можете посмотреть системное руководство по команде

man 5 vsftpd.conf

для уточнения деталей по каждому параметру.

Защита FTP

В /etc/vsftpd.conf существуют опции, помогающие сделать vsftpd более безопасным. Например, пользователи могут быть ограничены своими домашними каталогами, если раскомментировать:

chroot_local_user=YES

Вы также можете определить список пользователей, имеющих доступ только в домашний каталог:

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

После снятия комментариев с этих опций, создайте /etc/vsftpd.chroot_list, содержащий список пользователей по одному на строку. Затем перезапустите vsftpd:

sudo restart vsftpd
Если вы сняли комментарии со всех трёх строчек, то пользователи из списка не будут ограничены своими домашними каталогами, в отличии от пользователей не вошедших в список

Если при попытке подключения вы видите ошибку:

Ответ:	500 OOPS: vsftpd: refusing to run with writable root inside chroot()

то вам надо изменить права на домашний каталог локального пользователя

sudo chmod a-w /home/user/

Аналогично файл /etc/ftpusers содержит список пользователей, которым запрещен доступ по FTP. По умолчанию он включает root, daemon, nobody и т.п. Для запрета доступа по FTP для дополнительных пользователей, просто добавьте их в этот список.

FTP может быть зашифрованным при использовании FTPS. В отличие от SFTP, FTPS - это FTP поверх SSL. SFTP - это сессия, подобная FTP, по зашифрованному SSH соединению. Основное отличие заключается в том, что пользователи SFTP должны иметь учетную запись с собственным окружением (shell account) вместо оболочки nologin. Предоставление всем пользователям доступа к оболочке может оказаться не лучшим решением для некоторых систем, таких как web сервер общего доступа. Однако есть возможность ограничить такие учетные записи только SFTP и запретить взаимодействие с оболочкой. Смотрите раздел по OpenSSH для дополнительной информации.

Для настройки FTPS, добавьте в конец файла /etc/vsftpd.conf следующее:

ssl_enable=Yes

Также обратите внимание на опции сертификата и ключа:

rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

По умолчанию эти опции установлены в значения, предоставленные пакетом ssl-cert. Для рабочей среды они должны быть заменены на сертификат и ключ, созданные для определенного компьютера. Для дополнительной информации смотрите раздел Сертификаты.

Теперь перегрузите vsftpd и неанонимные пользователи будут использовать FTPS:

sudo restart vsftpd

Чтобы позволить пользователям с оболочкой /usr/sbin/nologin получить доступ к FTP, но не предоставлять shell доступ, отредактируйте /etc/shells, добавив к оболочке nologin:

# /etc/shells: valid login shells
/bin/csh
/bin/sh
/usr/bin/es
/usr/bin/ksh
/bin/ksh
/usr/bin/rc
/usr/bin/tcsh
/bin/tcsh
/usr/bin/esh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/screen
/usr/sbin/nologin

Это необходимо, поскольку по умолчанию vsftpd использует авторизацию PAM, а файл настроек /etc/pam.d/vsftpd содержит:

auth    required        pam_shells.so

Модуль PAM shells ограничивает доступ к оболочкам, перечисленным в файле /etc/shells.

Наиболее популярные клиенты FTP могут быть настроены на использование FTPS. FTP клиент командной строки lftp также имеет возможность использовать FTPS.

Ссылки

  1. Обратитесь к сайту vsftpd для дополнительной информации.

  2. Подробности по опциям /etc/vsftpd.conf доступны в man руководстве vsftpd.conf.