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

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

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

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

Sudo apt install vsftpd

Для запуска сервиса требуется добавить его в автозагрузку. Начиная с версии Ubuntu 15.04 используется Systemd , поэтому для добавления vsftpd в автозапуск надо ввести следующие команды:

Sudo systemctl start vsftpd sudo systemctl enable vsftpd

В Ubuntu Server может использоваться файервол ufw . Тогда вам потребуется разрешить порты 20 и 21

Sudo ufw allow 20/tcp sudo ufw allow 21/tcp

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

Man 5 vsftpd.conf

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

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

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

Настройка анонимного доступа по 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:

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

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

Anon_upload_enable=YES

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

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

Прежде чем вносить какие-либо изменения в конфигурационный файл, рекомендуется скопировать образец для возможности отката изменений без переустановки пакета sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

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

Local_enable=YES

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

Write_enable=YES

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

Sudo service vsftpd restart

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

Защита FTP

Ограничение пользователей

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

Chroot_local_user=YES

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

Chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list

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

Sudo service vsftpd restart

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

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

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

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

то это значит, что локальный пользователь имеет доступ на запись в домашний каталог, чего быть не должно. Способов решения этой ошибки несколько:

    Запретить запись в домашний каталог локальному пользователю (подходит не всем и не всегда)

sudo chmod a-w /home/user/ allow_writeable_chroot=YES

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

local_root=/home

Шифрование

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 service 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.

О быстром и безопасном FTP-сервере , сегодня мы рассмотрим базовые моменты конфигурирования этого демона. Здесь я рассмотрел наиболее часто, на мой взгляд, применяемые параметры конфигурирования vsftpd. Не забывайте, что vsftpd очень гибок в настройке и вы всегда можете настроить его каким-то особым для себя образом. Все возможные параметры конфигурации подробно описаны а man-странице демона, которую очень рекомендую хотя бы к беглому просмотру всем интересующимся и использующим этот сервер. В будущих статьях, посвящённых vsftpd, мы рассмотрим такие моменты, как организацию виртуальных FTP-хостов, аутентификацию виртуальных пользователей и SSL-шифрование.

Как говорилось в предыдущей статье, файл конфигурации vsftpd в различных системах по умолчанию располагается в различных местах:

  • в FreeBSD — /usr/local/etc/vsftpd.conf
  • в Fedora — /etc/vsftpd/vsftpd.conf
  • в Debian — /etc/vsftpd.conf

После внесения изменений в конфигурационный файл вашего vsftpd не забывайте перезапускать его. В FreeBSD:

# /usr/local/etc/rc.d/vsftpd restart

В Debian/Fedora:

# service vsftpd restart

Управление доступом

Обратите внимание на то, что в процессе установки 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, есть два способа сделать это: при помощи возможностей суперсервера или, если ваш демон работает в автономном режиме, при помощи параметра (естественно 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

Сетевые параметры

Если ваш vsftpd запускается в автономном режиме, а не через xinetd , тогда необходимо явно указать это:

Listen=YES

то же, для IPv6 (помните, что демон может работать одновременно только либо с IPv4, либо с IPv6):

Listen_ipv6=YES

Определить IPv4 адрес, на который должен «вешаться» демон, можно параметром:

Listen_address=192.168.0.1

Listen_address6=fe80:0:0:0:202:b3ff:fe1e:8329

При необходимости вы можете отключить возможность использования клиентами PASV-режима:

Pasv_enable=NO

Разное

Начиная с версии 2.0.7 vsftpd умеет удалять неудавшиеся закачки, если определить следующий параметр:

Delete_failed_uploads=YES

По умолчанию vsftpd отображает таймштампы файлов в GMT. Если вам нужно, чтобы они отображались согласно локальному времени сервера, воспользуйтесь следующим параметром.

Если у Вас уже установлен сервис vsftpd, то переходим сразу к пункту 2, иначе по порядку:
1. В дистрибутиве Debian, выполняем команду: apt-get install vsftpd
Все операции по его скачиванию и установке занимают около 1-3 минут, на вопрос установщика необходимо ответить «y».
2. Находим конфигурационный файл данного сервиса, он лежит в /etc/vsftpd.conf , редактируем его либо nano, либо встроенным в midnight commander редактором.
nano /etc/vsftpd.conf
Далее проверяем некоторые настройки описанные в нем:
— устанавливаем запрет на подключение анонимных пользователей, находим опцию «anonymous_enable » и прописываем ей значений «NO «.
— снимаем комментарий с опции «local_enable » и «write_enable «. (первая опция разрешает использовать для входа на сервер логин и пароль пользователям, которые зарегистрированы в системе/вторая разрешает пользователям выполнять любые FTP-команды записи)
— находим «chroot_local_user «, если этой надстройке установлено значение «Yes » (скорее всего стоит по умолчанию), все системные пользователи будут находиться в пределах chroot директории и не смогут получить доступ к другим директориям сервера.
Сохраняем все изменения, которые сделали. Для nano: жмем ctr+o -> Enter(сохраняем) -> ctrl+x(закрываем). Для midnight commander-а — жмем F2(сохраняем) затем F10(выход).
3. Когда все подготовили, создаем пользователя который будет пользоваться FTP: (заранее оговорюсь, что имя пользователя может быть любым, не обязательно писать user , как в данном примере! это пример! )
— выполняем в терминале команду adduser user
— далее утилита по созданию нового пользователя задаст Вам несколько вопросов, на которые вы введете ответы с клавиатуры (просьба заполнить побочные поля в роде номера телефона и пр. можно игнорировать и просто нажимать Enter), и в конце при сохранении пишем «yes»
— теперь добавим вновь созданного пользователя в группу ftpusers (название группы может быть любым другим, придуманным Вами самими, в данном случае — это пример! )
groupadd ftpusers
usermod -G ftpusers user
в директории /home уже создалась одноименная папка пользователя.
— сделаем в этой папке еще две папки для файлов и для логов.
mkdir /home/user/www
mkdir /home/user/logs
— далее сменим владельца данных папок т.к. текущие операции мы производили из под пользователя с root правами, соотв. и атрибуты назначились как для root
chown user:ftpusers /home/user/www
chown user:ftpusers /home/user/logs
chmod 555 /home/user
4. Перезапускаем наш сервис командой
service vsftpd restart
5. Пробуем подключаться с помощью FTP клиента (FileZilla,Winscp,Explorer) по ip-адресу или доменному имени хоста на котором производили данные действия, введя логин созданного пользователя и его пароль. После входа будут доступны созданные ранее папки.