Рейтинг@Mail.ru

NetCloud

Простыми словами о сетевых технологиях

Настройка FTP-сервера в Ubuntu

FTP (File Transfer Protocol) — протокол передачи файлов. Протокол FTP позволяет передавать и скачивать файлы с сервера. На сегодняшний день данный протокол не является особо популярным, так как он не поддерживает шифрование данных. Вместо FTP используют протокол SFTP (передача данных по SSH), а также протокол SCP. В этой статье рассмотрена настройка обычного FTP-сервера на базе Ubuntu.

Протокол FTP работает в режиме клиент-сервер. Сервер постоянно слушает запросы от удаленных клиентов на 21 порту. При получении запроса он управляет входом и устанавливает соединение. На протяжении сессии сервер выполняет любые команды, переданные клиентом FTP. В качестве протокола транспортного уровня используется TCP.  Для передачи данных FTP использует два типа соединения:

  1. Управляющее соединение (порт 21)
  2. Соединение данных (в активном режиме порт 20, в пассивном любой порт больше 1024)

skrinshot-21-12-2017-142000

Разделение на управляющее соединение и соединение для передачи данных является эффективным. Это позволяет передавать команды и файлы независимо друг от друга.

FTP поддерживает два типа аутентификации:

  1. Анонимный (логин ftp или anonymous, пароль — электронная почта)
  2. Авторизованный (логин и пароль у каждого пользователя свой)

При работе по протоколу FTP между клиентом и сервером может быть установлено два режима: активный и пассивный. Управляющее соединение одинаково для Активного и Пассивного режима. Клиент инициирует TCP-соединение с динамического порта (1024 — 65535) к порту номер 21 на FTP-сервере, после чего происходит аутентификация. Дальнейшие действия зависят от того какой режим выбран.

В активном режиме, после аутентификации, клиент сообщает серверу также номер своего порта (из динамического диапазона 1024 — 65535) для того, чтобы сервер мог подключиться к клиенту для установки соединения передачи данных. FTP-сервер подключается к заданному номеру порта клиента используя со своей стороны номер TCP-порта 20 для передачи данных.

active-ftp

В пассивном режиме, после аутентификации, сервер сообщает клиенту номер TCP-порта (из динамического диапазона 1024 — 65535), к которому можно подключиться для установки соединения передачи данных.

passive-ftp

Таким образом, в активном режиме инициатором соединения является сервер, так как он подключается к клиенту. В пассивном режиме инициатор соединения — клиент.

Активный режим «вреден» для клиента в том плане, что когда к нему по случайному порту подключается сервер, такое соединение будет скорее всего блокировано брандмауэром на стороне клиента. Таким образом, необходимо открывать порты на стороне клиента, что приводит к «дырам» в безопасности. С другой стороны, для сервера такой режим будет полезен, так как для передачи данных используется общеизвестный порт 20.

Пассивный режим «вреден» в свою очередь  для сервера, но «выгоден» для клиента. Клиент будет делать оба соединения к серверу, но одно из них будет к случайному высокому порту, такое соединение будет блокировать брандмауэром на стороне сервера.

Пассивный режим используется, как правило, когда между клиентом и сервером находится межсетевой экран.

Наиболее популярные команды FTP:

Команда Описание
USER Указать имя пользователя
PASS Указать пароль
LIST Просмотр содержимого каталога
CWD Смена текущего каталога
RETR Передать файл с сервера на клиент
STOP Передать файл с клиента на сервер
TYPE Установить режим передачи
DELE Удалить файл
MDK Создать каталог
RMD Удалить каталог
PASV Использовать пассивный режим
QUIT Выход и разрыв соединения

FTP имеет три режима передачи:

  1. Поточный — непрерывная передача данных в виде потока (без обработки, обработка выполняется TCP)
  2. Блочный — FTP делит данные на блоки (заголовок, поле данных, размер файла в байтах) и передает их TCP
  3. Режим сжатия единым алгоритмом

FTP-сервер — «библиотека» файлов на хостинге, используется для хранения файлов разных форматов. Самые популярные ftp-сервера это vsftpd и proftpd. FTP-сервера нужны для того, чтобы размещать на них для публичного и приватного скачивания больших объемов данных. Часто сервера используются для анонимного (гостевого) доступа к размещенным в открытом виде дистрибутивов ПО, музыки и фото. Доступ для анонимов позволяет, как правило, только просматривать каталоги и скачивать необходимую информацию, но на некоторых серверах наоборот — есть спецкаталоги, куда любой пользователь может загрузить файл для совместного пользования.

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

Перейдем к настройке сервера. Работать будем с такой схемой.tsiuachw

Доступ к FTP-серверу будут иметь как администратор, так и пользователь. Администратор и пользователь имеют авторизованный доступ. При этом необходимо настроить права доступа таким образом, чтобы администратор имел неограниченный доступ, а пользователь имел доступ только к своей домашней директории. Также необходимо настроить анонимный доступ.

В Ubuntu для DHCP сервера доступен демон vsftpd. Устанавливаем DHCP-сервер, это выполняется командой:

testServer$ sudo apt-get install vsftpd

По умолчанию, анонимная загрузка запрещена. Необходимо изменить конфигурацию в файле /etc/vsftpd.conf.

testServer$ sudo nano /etc/vsftpd.conf

Находим там строку «anonymous_enable» и присваиваем ей значение «Yes». Данная строка отвечает за доступ к FTP-серверу для анонимных пользователей.

47jxmo1p

Также необходимо раскоментировать две строки: «write_enable» и «chroot_local_user». Первая строка отвечает за возможность записи на сервер, вторая строка блокирует возможность локальных пользователей подниматься на каталог выше, чем их домашняя папка.

dfwfmv5x

3m0bcpkr

В конце файла конфигурации добавляем две настройки:

jket3vtw

Данные настройки устанавливают домашние папки для анонимных и локальных пользователей.

Сохраняем конфигурацию файла сочетанием клавиш Ctrl + X (при предложении заменить текущий файл выбираем Yes). Далее необходимо перезагрузить сервер FTP командой

testServer$ sudo service vsftpd restart

Следующий этап — это создание пользователей.

Создаем суперпользователя командой:

testServer$ sudo adduser superuser

Задаем ему пароль:

testServer$ sudo passwd superuser

Enter new UNIX password: 12345

Даем ему неограниченные права:

testServer$ sudo adduser superuser sudo 

Создаем обычного пользователя:

testServer$ sudo adduser user

Задаем ему пароль:

testServer$ sudo passwd user

Enter new UNIX password: 12345

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

testServer$ sudo addgroup groupl

testServer$ sudo nano /etc/group 

Находим строчку «groupl» с помощью Ctrl + W.

В эту строчку добавляем наших пользователей superuser и user.

bz1lsefu

Создаем папки для пользователей:

testServer$ sudo mkdir /srv/ftp/upload

testServer$ sudo mkdir /srv/ftp/superuser

testServer$ sudo mkdir /srv/ftp/user

Задаем права доступа для папок:

testServer$ sudo chmod 700 /srv/ftp/superuser

testServer$ sudo chmod 770 /srv/ftp/user

testServer$ sudo chmod 575 /srv/ftp/upload

Меняем владельцов папок:

testServer$ sudo chown superuser: /srv/ftp/superuser

testServer$ sudo chown user:groupl /srv/ftp/user

testServer$ sudo chown :groupl /srv/ftp/upload

Таким образом, у нас получается следующая картина:

  1. К папке superuser имеет доступ только пользователь superuser, он же является владельцем этой папки
  2. К папке user имеет доступ как user, так и superuser. Это из-за того, что мы выставили права 770. Вторая семерка устанавливает полные права для группы пользователей groupl, в которую мы добавили superuser.
  3. К папке upload полный доступ имеют как user, так и superuser. Для всех остальных установлены только права на чтение и выполнение 575 .  5 = 101 (в двоичной системе). 101 ~ r-x. То есть остальные пользователи (а к ним относится анонимный) не могут ничего записывать в папке upload.

Проверяем права доступа и владельцев командой:

testServer$ ls -l /srv/ftp

skrinshot-17-01-2018-154722

Для того, чтобы проверить доступ к FTP-серверу, необходимо в любом браузере в адресной строке набрать:

ftp://172.16.1.2 

В данном случае мы попадаем как анонимный пользователь, так как не вводим имя и пароль.

0zachavoВидим три папки superuser/, upload/, user/.  Так как мы зашли под анонимным пользователем доступ есть только к папке upload/. 

jxggak4d

Для того, чтобы войти под именем суперпользователя вводим:

ftp://superuser@172.16.1.2 

skrinshot-06-02-2018-151626

Вводим имя пользователя: superuser, пароль: 12345.  Под superuser’ом мы получаем доступ ко всем папкам.

it8ystwb

2xiusnsd

Проверим напоследок обычного пользователя. Чтобы не вводить имя и пароль каждый раз при входе, можно в адресной строке написать следующее:

ftp://user:12345@172.16.1.2 

Под user’ом мы можем попадать только в папки upload/ и user/. К папке superuser/ доступ закрыт.