Протокол передачи файлов (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()
то это значит, что локальный пользователь имеет доступ на запись в домашний каталог, чего быть не должно. Способов решения этой ошибки несколько:
Запретить запись в домашний каталог локальному пользователю (подходит не всем и не всегда)
Прописать /home каталогом, куда будут попадать локальные пользователи после входа на 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 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 сервер на VPS с ОС Ubuntu. Будем использовать сервер vsftpd , который считается самым быстрым и безопасным FTP сервером для UNIX-систем.
FTP или F ile T ransfer P rotocol – протокол приема и передачи файлов в сети. Используя модель клиент/сервер и безопасность SSL/TLS, FTP позволяет пользователям обмениваться файлами с удаленными компьютерами безопасно, эффективно и надежно, передавая данных по протоколу TCP/IP.
FTP работает подобно HTTP или SMTP, с единственным отличием, что он ответственен за безопасную передачу данных от отправителя к получателю, а не веб-страницы с сервера к пользователю или электронного письма через интернет. В этом руководстве рассмотрено создание FTP сервера на ОС Ubuntu версии 16.04.
Примечание: Текущее руководство основывается на версии ОС Ubuntu 16.04. Но вы можете применить те же шаги по созданию FTP сервера на Ubuntu 14.04.
Прежде всего, давайте сделаем обновление всех пакетов перед началом установки демона vsftpd. Для этого выполним команду:
Sudo apt-get update
Дождитесь завершения всех процессов и вы увидите подтверждающее сообщение:
Затем установим демон vsftpd следующей командой:
Sudo apt-get install vsftpd
Вы получите уведомление требующее подтверждения, нажмите Y и Enter для продолжения установки.
По завершению установки, сделаем бэкап оригинального файла конфигурации, чтобы начать с чистого файла настроек:
Sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.original
Теперь мы можем переходить к следующему шагу и настраивать фаервол.
Шаг 2 – Разрешение FTP трафика на фаерволе
Чтобы позволить серверу FTP, развёрнутому на ОС Ubuntu взаимодействовать с внешним миром, нужно настроить путь через фаервол. Для начала посмотрим включён ли фаервол. Запустите следующую команду для определения статуса:
Sudo ufw status
Если вы увидите такое сообщение:
Ufw: command not found
Это значит, что фаервол не установлен и можно перходить к следующему шагу.
Если же на выходе будут показаны правила или сообщение о том, что фаервол активен, нужно определить, как он будет обрабатывать FTP-трафик. Давайте сделаем следующее, откроем порты 20 и 21 для трафика FTP; порты 40000-50000 будут зарезервированы, как диапазон пассивных портов, который в конечном итоге будет установлен в файле конфигурации; порт 990 будет использоваться, когда TLS будет включен. Выполним следующие команды:
Sudo ufw allow 20/tcp sudo ufw allow 21/tcp sudo ufw allow 990/tcp sudo ufw allow 40000:50000/tcp
Теперь посмотрим на статус:
Результат будет выглядеть где-то так:
Output Status : active To Action From -- -- -- -- -- -- 990 / tcp ALLOW Anywhere 20 / tcp ALLOW Anywhere 21 / tcp ALLOW Anywhere 40000 : 50000 / tcp ALLOW Anywhere 20 / tcp (v6 ) ALLOW Anywhere (v6 ) 21 / tcp (v6 ) ALLOW Anywhere (v6 ) 990 / tcp (v6 ) ALLOW Anywhere (v6 ) 40000 : 50000 / tcp (v6 ) ALLOW Anywhere (v6 )Теперь, все необходимые порты открыты и доступны для нас и мы можем переходит к следующему шагу.
Шаг 3 – Создание каталога пользователя
На третьем шаге создания Ubuntu FTP сервера, нужно выбрать пользователя, который будет подключатся по FTP. Для этого создадим нового пользователя, выполнив такую команду:
sudo adduser alexЗаполните пароль и другие детали, когда запросит. В идеале, с точки зрения безопасности, FTP должен быть ограничен одним специальным каталогом. Vsftpd использует chroot для создания этой защиты. Со включённым chroot, локальный пользователь ограничивается его домашним каталогом (по умолчанию). Однако, может оказаться, что из-за защиты vsftpd, пользователь не сможет ничего создавать в каталоге. Мы не убираем права на запись в домашнем каталоге, вместо этого мы сделаем каталог ftp, который будет вести себя как chroot вместе с сохранением способности к записи, что будет позволять хранить файлы. Используйте такую команду для создания каталога FTP:
sudo mkdir / home / alex / ftpУстановите права владения:
sudo chown nobody : nogroup / home / alex / ftpНаконец, удалите права на запись:
sudo chmod a - w / home / alex / ftpТеперь, используя следующую команду проверьте права доступа:
sudo ls - la / home / alex / ftpНа выходе мы увидим приблизительно это:
total 8 dr - xr - xr - x 2 nobody nogroup 4096 Jun 29 11 : 32 . drwxr - xr - x 3 alex alex 4096 Jun 29 11 : 32 . .На следующем этапе мы создадим файл, содержащий каталоги и права доступа к ним:
sudo mkdir / home / alex / ftp / files sudo chown alex : alex / home / alex / ftp / filesИ наконец, добавим в каталог тестовый файл, который мы будет использовать во время тестирования чего-либо:
echo "vsftpd sample file" | sudo tee / home / alex / ftp / files / sample . txtШаг 4 – Настройка vsftpd
Чтобы продолжить устанавливать FTP сервер на Ubuntu VPS, нам нужно настроить vsftpd и наш FTP-доступ. В этом руководстве мы разрешим одному пользователю подключаться по FTP, используя локальную консоль. Необходимая для этого двух этапная настройка уже установлена в конфигурационном файле (vsftpd.conf ). Вначале проверьте, чтобы настройки в файле совпадали с указанными ниже, :
sudo nano / etc / vsftpd . conf . . . # Allow anonymous FTP? (Disabled by default). anonymous_enable = NO # # Uncomment this to allow local users to log in. local_enable = YES . . .В этом же файле, продолжим удаляя # включаем write_enable :
. . . write_enable = YES . . .Chroot также раскоментируем, чтобы убедиться, что пользователь, подключившийся по FTP имеет доступ к файлам внутри разрешённой директории:
. . . chroot_local_user = YES . . .Несколько новых значений будут также нужны для добавления вручную. Вы можете просто вставить их в конец файла. Вначале, user_sub_token добавим к пути каталога local_root. Это позволит конфигурации работать с текущим пользователем и любым другим пользователем, который будет добавлен позже:
user_sub_token = $ USER local_root = / home / $ USER / ftpЧтобы быть уверенным, что доступно достаточное количество соединений, мы ограничим количество портов, используемое в конфигурационном файле:
pasv_min_port = 40000 pasv_max_port = 50000В этом руководстве мы планируем дать доступ индивидуальной основе, поэтому давайте установим настройки так, чтобы дать доступ только тем пользователям, которые непосредственно добавлены в список:
userlist_enable = YES userlist_file = / etc / vsftpd . userlist userlist_deny = NOФлаг userlist_deny отвечает за переключение логики, когда он установлен в “NO”, только те пользователи, которые есть в списке имеет доступ. По завершению нажмите CTRL+X и подтвердите сохранения изменений в файле.
В завершение, продолжим создание и добавление нашего пользователя в файл:
echo "alex" | sudo tee - a / etc / vsftpd . userlistПроверим, что пользователь действительно активен запуском команды:
cat / etc / vsftpd . userlistВывод должен быть “alex ”, как показано на скриншоте:
Перезапустите демона, используя следующую команду, чтобы запустить изменения настроек:
sudo systemctl restart vsftpdШаг 5 – Делаем защищенный FTP
По умолчанию, FTP не делает никакого шифрование данных, поэтому мы будем использовать TLS/SSL, чтобы позаботиться о безопасности. В качестве первого шага нам нужно создать SSL сертификат и использовать его для защиты Ubuntu FTP сервера. Для начала выполним следующую команду:
Sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Флаг –days делает сертификат действующим в течение года и мы включаем 2048-битный приватный ключ RSA в этой же команде. Когда запросит нужные данные введите их в предоставленном поле.
После создания сертификата ещё раз откройте конфигурационный файл:
Sudo nano /etc/vsftpd.conf
В конце файла есть строка с “_rsa ”. Закомментируйте эти две строки:
# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem # rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
Вместо этого мы направим конфиг файл на сертификат, который мы создали. Добавьте такие строки:
Rsa_cert_file=/etc/ssl/private/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.pem
Теперь мы включим SSL и убедимся, что только пользователи со включённым SSL могут с нами связываться. Измените значение ssl_enable на YES :
ssl_enable = YESТеперь добавьте следующие строки для продолжения создания защиты (это запретить какие-либо анонимные соединения с использованием SSL):
Allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES
Настройте TLS используя:
Ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO
Здесь мы добавим ещё 2 опции. Во-первых, повторное использование SSL не будет необходимым, потому что это может привести к разрывам у большого количества клиентов. Во-вторых, мы будем использовать высокозащищенный код шифрования, что будет означать, что длина ключа соответствует (или больше, чем) 128 бит.
Require_ssl_reuse=NO ssl_ciphers=HIGH
Сделаем ещё раз перезапуск, для вступления изменений в силу:
Sudo systemctl restart vsftpd
Прекрасно! Вот вы и настроили FTP сервер на вашем Ubuntu VPS для работы с протоколом SSL/TLS.
Шаг 6 – Проверка подключения, используя FileZilla
Сегодня FTP клиенты поддерживают настройку шифрования TLS, поэтому это прекрасная возможность проверить, работает ли наш Ubuntu FTP сервер как следует. Чтобы проверить соединение, будем использовать . Для начала запустите FileZilla, нажатием на иконку Site Manager .
Нажмите на кнопку New Site в появившемся окне начните заполнять данные о Ubuntu FTP сервере.
Заполните необходимые поля информацией о недавно созданном Ubuntu FTP сервере. Так как мы настроили его с использованием TLS, мы может отметить настройку шифрования в “explicit FTP over TLS” положение. Окончательное окно настроек выглядит так:
Как только настроите, нажимайте Connect и появится окошко с запросом для введения пароля пользователя FTP.
В заключение вам нужно будет подтвердить SSL сертификат на вашем FTP сервере на Ubuntu VPS.
После подтверждения, корневой root-каталог с тестовым файлом появятся на вашем экране.
Это всё! Теперь вы можете производить любую передачу файлов с вашего компьютера на Ubuntu FTP сервер и обратно.
Заключение
В этом руководстве мы прошли шаг за шагом путь создания для локального пользователя безопасного способа передачи файлов через FTP с SSL/TLS на Ubuntu FTP сервере. Также мы протестировали соединения, используя FileZilla, чтобы убедиться, что всё работает.
Время от времени у каждого системного администратора возникает потребность в FTP-сервере, чаще всего это связано с необходимостью обеспечить обмен информацией в автоматическом режиме между приложениями, например, при автообмене распределенной информационной базы 1С, или для доступа к файлам на веб-сервере. Сегодня мы расскажем, как меньше чем за полчаса создать такой сервер на платформе Ubuntu.
Но сначала немного теории. Протокол FTP (File Transfer Protocol) предназначен, как следует из названия, для передачи файлов и появился в 1971 году, но несмотря на свой преклонный возраст продолжает широко использоваться до сих пор. Хотя сегодня его использование носит чаще технический характер, для доступа конечных пользователей к данным обычно используют браузер и протокол HTTP. К достоинствам FTP можно отнести возможность докачки файла при обрыве связи и возможность одинаково легко как считывать файлы, так и записывать их. Но есть и недостатки, самый серьезный - низкая безопасность, поэтому этому вопросу следует уделить самое пристальное внимание.
FTP, как и PPTP, использует разные соединения для передачи команд и передачи данных. При инициации соединения клиент передает управляющие команды на порт 21 сервера, который в свою очередь устанавливает исходящее соединение для передачи данных на 20 порту, порт со стороны клиента определяется в результате согласования. Однако при нахождении клиента за NAT соединение подобным образом установить не удастся, поэтому был разработан дополнительный режим FTP passive mode (пассивный режим), когда соединение для передачи данных устанавливает не сервер, а клиент, однако с параметрами, указанными сервером. Эти моменты следует учитывать при форвардинге FTP и при настройке сетевого фильтра.
Для нашего сервера мы будем использовать vsftpd - простой, быстрый и безопасный FTP сервер. Так как он будет обслуживать как внешнюю, так и внутреннюю сети, то имеет смысл добавить эту роль нашему . Установка сервера предельно проста:
Apt-get install vsftpd
Настройка сервера производится через конфигурационный файл /etc/vsftpd.conf он имеет простую структуру, хорошо откомментирован и позволяет настроить сервер без какой-либо инструкции при наличии минимальных знаний. Рассмотрим его основные параметры.
Сервер может быть запущен постоянно, как служба или стартовать при необходимости, нам больше подходит первый вариант:
Listen=YES
Данная опция имеет взаимоисключающую запись, которую следует привести к виду:
Listen_ipv6=NO
Разрешим вход только локальным пользователям:
Anonymous_enable=NO
local_enable=YES
Разрешим пользователям записывать файлы и укажем серверу автоматически выставлять нужные права (755 на папки и 644 на файлы):
Write_enable=YES
local_umask=022
Если требуется установить иной набор прав: 775 и 664, то umask должен быть равен 002.
По умолчанию сервер использует время GMT, чтобы файлам устанавливалось время вашего часового пояса, используйте опцию:
Use_localtime=YES
Включим лог загружаемых и скачиваемых файлов:
Xferlog_enable=YES
Разрешим серверу устанавливать соединения для передачи данных на порт 20 (активный режим):
Connect_from_port_20=YES
Следующие опции задают место и формат хранения логов:
Xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
Зададим таймауты сессии:
Idle_session_timeout=600
data_connection_timeout=120
Также в целях безопасности изолируем пользователя в его домашнем каталоге и сразу разрешим запись в его корень:
Chroot_local_user=YES
allow_writeable_chroot=YES
Для коррекной работы с текстовыми данными можно включить поддержку ASCII, это позволит при передаче текстового файла с Windows системы в UNIX (Linux) корректно заменить символы переноса строки с CR+LF на LF для корректного отображение содержимого и выполнить обратное преобразование при передаче его назад.
Ascii_upload_enable=YES
ascii_download_enable=YES
Можно включить только одну опцию, для закачки или скачивания. Обратите внимание, что при передаче бинарного файла в режиме ASCII последний может быть поврежден.
Достаточно интересная опция:
Ls_recurse_enable=YES
Она позволяет рекурсивный просмотр каталогов, с одной стороны это удобно, с другой способно вызвать большую нагрузку на сервер, если, например, получить листинг директории, содержащей большое количество файлов и каталогов.
Все остальные опции оставляем по умолчанию, хотя можете отредактировать приветствие сервера, написав там все что вам нравится:
Ftpd_banner=Welcome to Roga i Kopyta LLC FTP
В конце конфигурационного файла зададим настройки для пассивного режима, рекомендуется явно задать порты, чтобы была возможность указать их при форвардинге, если сервер стоит за NAT или в правилах брандмауера:
Pasv_enable=YES
pasv_min_port=62000
pasv_max_port=62999
Перезапускаем сервер (это нужно делать всякий раз после внесения изменений в конфигурацию):
Service vsftpd restart
и пробуем подключиться любым FTP-клиентом используя учетные данные существующего пользователя. Мы должны попасть в его домашнюю директорию и быть изолированы в ней.
В случае появления ошибки, связанной с некорректной работой vsftpd и системы безопасности seccomp:
500 OOPS: prctl PR_SET_SECCOMP failed
добавьте в файл недокументированную опцию:
Seccomp_sandbox=NO
Однако помните, что FTP - небезопасный протокол, поэтому пускать на сервер любого локального пользователя, как это сделано сейчас, не самый лучший вариант. Чтобы избежать такой ситуации vsftpd имеет встроенный механизм контроля пользователей. Добавим в конфигурационный файл опцию:
Userlist_enable=YES
и создадим файл списка пользователей:
Touch /etc/vsftpd.user_list
По умолчанию vsftpd запрещает доступ к серверу пользователям, указанным в данном списке еще до ввода пароля, т.е. реализует принцип разрешено всем, кому не запрещено. Но гораздо лучше будет реализовать иной подход: запрещено всем, кому не разрешено. Т.е. разрешать доступ только указанным пользователям. Для этого добавим опцию:
Userlist_deny=NO
Теперь доступ к FTP-серверу будут иметь только явно указанные пользователи, их следует указывать в vsftpd.user_list по одному в строку, например:
Ivanov
petrov
Если не указано иное, то подключившись по FTP пользователи попадают в свой домашний каталог. Это не всегда удобно, часто нужно перенаправлять их в иную директорию. Если это общая для всех папка, скажем /var/ftp, то можно задать опцию:
Local_root=/var/ftp
Которая перенаправит всех пользователей в указанный каталог и изолирует их там.
Это самая простая ситуация, реальные задачи обычно сложнее, допустим нам надо установить пользователю Иванову в качестве корневой директории /var/www/example1.com , а Петрову /var/www/example2.com , чтобы каждый из них работал со своей папкой. Для этих целей можно использовать еще одну возможность vsftpd - пользовательские настройки, которые перекрывают настройки основного конфигурационного файла.
Для этого добавим опцию:
User_config_dir=/etc/vsftpd_user_conf
Затем создадим саму директорию
Mkdir /etc/vsftpd_user_conf
Чтобы задать пользователю собственные настройки в данной директории следует создать файл с именем пользовтаеля и добавить в него необходимые опции. Изменения применяются без перезапуска FTP-сервера при следующем подключении клиента.
Создадим файл с настройками для Иванова:
Tocuh /etc/vsftpd_user_conf/ivanov
и внесем в него опцию:
Local_root=/var/www/example1.com
При следующем подключении корневая директория пользователя изменится на указанную. Также в этом файле мы можем задавать любые персональные опции, например, другой umask или права на доступ к файлам. Однако мы не можем использовать здесь глобальные настройки: опции подключения, логгирования, аутентификации, они будут просто игнорироваться.
Если вам нужно скрыть реальных владельцев файлов и папок, то можно использовать опцию:
Hide_ids=YES
В этом случае вместо реальных владельцев и групп будет указано ftp:ftp, это может быть полезным в случае публичного сервера или наличия в списке пользователей посторонних лиц, которым вы не хотите раскрывать реальные имена пользователей вашей системы.
Как видим, мы действительно создали рабочий FTP-сервер менее чем за полчаса.
File Transfer Protocol (FTP) is a TCP protocol for downloading files between computers. In the past, it has also been used for uploading but, as that method does not use encryption, user credentials as well as data transferred in the clear and are easily intercepted. So if you are here looking for a way to upload and download files securely, see the section on OpenSSH in Remote Administration instead.
FTP works on a client/server model. The server component is called an FTP daemon . It continuously listens for FTP requests from remote clients. When a request is received, it manages the login and sets up the connection. For the duration of the session it executes any of commands sent by the FTP client.
Access to an FTP server can be managed in two ways:
In the Anonymous mode, remote clients can access the FTP server by using the default user account called "anonymous" or "ftp" and sending an email address as the password. In the Authenticated mode a user must have an account and a password. This latter choice is very insecure and should not be used except in special circumstances. If you are looking to transfer files securely see SFTP in the section on OpenSSH-Server. User access to the FTP server directories and files is dependent on the permissions defined for the account used at login. As a general rule, the FTP daemon will hide the root directory of the FTP server and change it to the FTP Home directory. This hides the rest of the file system from remote sessions.
vsftpd - FTP Server Installation
vsftpd is an FTP daemon available in Ubuntu. It is easy to install, set up, and maintain. To install vsftpd you can run the following command:
sudo apt install vsftpd
Anonymous FTP Configuration
By default vsftpd is not configured to allow anonymous download. If you wish to enable anonymous download edit /etc/vsftpd.conf by changing:
anonymous_enable=Yes
During installation a ftp user is created with a home directory of /srv/ftp . This is the default FTP directory.
If you wish to change this location, to /srv/files/ftp for example, simply create a directory in another location and change the ftp user"s home directory:
sudo mkdir /srv/files/ftp sudo usermod -d /srv/files/ftp ftp
After making the change restart vsftpd :
Finally, copy any files and directories you would like to make available through anonymous FTP to /srv/files/ftp , or /srv/ftp if you wish to use the default.
User Authenticated FTP Configuration
By default vsftpd is configured to authenticate system users and allow them to download files. If you want users to be able to upload files, edit /etc/vsftpd.conf :
write_enable=YES
Now restart vsftpd :
sudo systemctl restart vsftpd.service
Now when system users login to FTP they will start in their home directories where they can download, upload, create directories, etc.
Similarly, by default, anonymous users are not allowed to upload files to FTP server. To change this setting, you should uncomment the following line, and restart vsftpd :
anon_upload_enable=YES
Enabling anonymous FTP upload can be an extreme security risk. It is best to not enable anonymous upload on servers accessed directly from the Internet.
The configuration file consists of many configuration parameters. The information about each parameter is available in the configuration file. Alternatively, you can refer to the man page, man 5 vsftpd.conf for details of each parameter.
Securing FTP
There are options in /etc/vsftpd.conf to help make vsftpd more secure. For example users can be limited to their home directories by uncommenting:
chroot_local_user=YES
You can also limit a specific list of users to just their home directories:
chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list
After uncommenting the above options, create a /etc/vsftpd.chroot_list containing a list of users one per line. Then restart vsftpd :
sudo systemctl restart vsftpd.service
Also, the /etc/ftpusers file is a list of users that are disallowed FTP access. The default list includes root, daemon, nobody, etc. To disable FTP access for additional users simply add them to the list.
FTP can also be encrypted using FTPS . Different from SFTP , FTPS is FTP over Secure Socket Layer (SSL). SFTP is a FTP like session over an encrypted SSH connection. A major difference is that users of SFTP need to have a shell account on the system, instead of a nologin shell. Providing all users with a shell may not be ideal for some environments, such as a shared web host. However, it is possible to restrict such accounts to only SFTP and disable shell interaction. See the section on OpenSSH-Server for more.
To configure FTPS , edit /etc/vsftpd.conf and at the bottom add:
Also, notice the certificate and key related options:
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
By default these options are set to the certificate and key provided by the ssl-cert package. In a production environment these should be replaced with a certificate and key generated for the specific host. For more information on certificates see Certificates .
Now restart vsftpd , and non-anonymous users will be forced to use FTPS :
sudo systemctl restart vsftpd.service
To allow users with a shell of /usr/sbin/nologin access to FTP, but have no shell access, edit /etc/shells adding the nologin shell:
# /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
This is necessary because, by default vsftpd uses PAM for authentication, and the /etc/pam.d/vsftpd configuration file contains:
auth required pam_shells.so
The shells PAM module restricts access to shells listed in the /etc/shells file.
Most popular FTP clients can be configured to connect using FTPS. The lftp command line FTP client has the ability to use FTPS as well.
Существует большое количество программ, позволяющих развернуть на компьютере под управлением Linux FTP сервер, и, естественно, каждая из них отличается своими особенностями и нюансами.
В рамках данной статьи мы постараемся максимально простым языком изложить особенности того, как происходит настройка FTP сервера Linux VSFTP.
Почему в качестве примера был выбран именно он? Все просто: это довольно качественный продукт, поддерживающий работу IPv6, SSL, он позволяет контролировать пропускную возможность канала, создавать виртуальных пользователей и т.д.
Этот FTP сервер к тому же достаточно популярен среди сообщества Open Source, достаточно только посмотреть кто использует его: debian, gnome, freebsd и многие другие.
Настройка FTP сервера Linux
Итак, перейдем непосредственно к настройке FTP сервера Linux.Первым делом потребуется установить программное обеспечение, в Debian это делается командой
aptitude Install vsftpd
После загрузки и инсталляции автоматически будет создан новый пользователь, в домашней директории создастся новый каталог, а в /etc появится файл ftpusers, в который можно вписать тех пользователей, которым нельзя иметь доступ к FTP.
Следует сразу же отметить тот факт, что когда осуществляется настройка FTP сервера Linux, то первым делом лучше перенести директорию, в которой будут храниться файлы с домашнего каталога в /var.
Для этого потребуется сделать следующее: открываем консоль и от имени суперпользователя вводим следующее:
Usermod -d /var/ftp ftp && rmdir /home/ftp
После этого можно приступать к настройке пользователя: создаем специальную группу, под названием ftpuser, делается это, естественно, от имени суперпользователя, командой addgroup ftpuser
.
После этого создаем нового пользователя с именем ftpuser и добавляем его в соответствующую группу:
Useradd -a /var/ftp -g ftpuser ftpuser
Когда пользователь создан, необходимо назначить для него пароль: passwd ftpuser (от имени суперпользователя).
Когда осуществляется настройка FTP сервера, следующий этап заключается в создании директории и установки на нее соответствующих прав. О том, как и где создавать каталог, мы говорили выше, теперь сделаем права доступа (от root):
Chmod 555 /var/ftp && chown root:ftpuser /var/ftp
Финальная часть настройки FTP сервера Linux
Затем создаем публичный каталог:Mkdir /var/ftp/pub && chown ftpuser:ftpuser /var/ftp/pub
На следующем этапе, когда осуществляется настройка FTP сервера Linux
, мы производим его конфигурацию. Для того, чтобы в результате случайной ошибки программа не отказалась работать полностью, лучше всего сделать копию файла настроек:
Cp /etc/vsftpd.conf /etc/vsftpd.conf_old
После этого можно открыть vsftpd.conf и произвести необходимые изменения. Сложностей с этим возникнут не должно, так как файл хорошо закомментирован и с ним должен разобраться даже не очень опытный пользователь.
Следует отметить, что бекап настроек лучше всего делать каждый раз, когда в них вносятся какие-либо изменения, так вы полностью обезопасите себя от возможных проблем, которые возникают при неправильной конфигурации.
Когда все вышеперечисленное было сделано, можно перезапускать FTP сервер:
/etc/Init.d/ restart
и свободно пользоваться собственным ФТП-шником.