FTP (File Transfer Protocol) — протокол передачи файлов. Протокол FTP позволяет передавать и скачивать файлы с сервера. На сегодняшний день данный протокол не является особо популярным, так как он не поддерживает шифрование данных. Вместо FTP используют протокол SFTP (передача данных по SSH), а также протокол SCP. В этой статье рассмотрена настройка обычного FTP-сервера на базе Ubuntu.
Протокол FTP работает в режиме клиент-сервер. Сервер постоянно слушает запросы от удаленных клиентов на 21 порту. При получении запроса он управляет входом и устанавливает соединение. На протяжении сессии сервер выполняет любые команды, переданные клиентом FTP. В качестве протокола транспортного уровня используется TCP. Для передачи данных FTP использует два типа соединения:
- Управляющее соединение (порт 21)
- Соединение данных (в активном режиме порт 20, в пассивном любой порт больше 1024)
Разделение на управляющее соединение и соединение для передачи данных является эффективным. Это позволяет передавать команды и файлы независимо друг от друга.
FTP поддерживает два типа аутентификации:
- Анонимный (логин ftp или anonymous, пароль — электронная почта)
- Авторизованный (логин и пароль у каждого пользователя свой)
При работе по протоколу FTP между клиентом и сервером может быть установлено два режима: активный и пассивный. Управляющее соединение одинаково для Активного и Пассивного режима. Клиент инициирует TCP-соединение с динамического порта (1024 — 65535) к порту номер 21 на FTP-сервере, после чего происходит аутентификация. Дальнейшие действия зависят от того какой режим выбран.
В активном режиме, после аутентификации, клиент сообщает серверу также номер своего порта (из динамического диапазона 1024 — 65535) для того, чтобы сервер мог подключиться к клиенту для установки соединения передачи данных. FTP-сервер подключается к заданному номеру порта клиента используя со своей стороны номер TCP-порта 20 для передачи данных.
В пассивном режиме, после аутентификации, сервер сообщает клиенту номер TCP-порта (из динамического диапазона 1024 — 65535), к которому можно подключиться для установки соединения передачи данных.
Таким образом, в активном режиме инициатором соединения является сервер, так как он подключается к клиенту. В пассивном режиме инициатор соединения — клиент.
Активный режим «вреден» для клиента в том плане, что когда к нему по случайному порту подключается сервер, такое соединение будет скорее всего блокировано брандмауэром на стороне клиента. Таким образом, необходимо открывать порты на стороне клиента, что приводит к «дырам» в безопасности. С другой стороны, для сервера такой режим будет полезен, так как для передачи данных используется общеизвестный порт 20.
Пассивный режим «вреден» в свою очередь для сервера, но «выгоден» для клиента. Клиент будет делать оба соединения к серверу, но одно из них будет к случайному высокому порту, такое соединение будет блокировать брандмауэром на стороне сервера.
Пассивный режим используется, как правило, когда между клиентом и сервером находится межсетевой экран.
Наиболее популярные команды FTP:
Команда | Описание |
USER | Указать имя пользователя |
PASS | Указать пароль |
LIST | Просмотр содержимого каталога |
CWD | Смена текущего каталога |
RETR | Передать файл с сервера на клиент |
STOP | Передать файл с клиента на сервер |
TYPE | Установить режим передачи |
DELE | Удалить файл |
MDK | Создать каталог |
RMD | Удалить каталог |
PASV | Использовать пассивный режим |
QUIT | Выход и разрыв соединения |
FTP имеет три режима передачи:
- Поточный — непрерывная передача данных в виде потока (без обработки, обработка выполняется TCP)
- Блочный — FTP делит данные на блоки (заголовок, поле данных, размер файла в байтах) и передает их TCP
- Режим сжатия единым алгоритмом
FTP-сервер — «библиотека» файлов на хостинге, используется для хранения файлов разных форматов. Самые популярные ftp-сервера это vsftpd и proftpd. FTP-сервера нужны для того, чтобы размещать на них для публичного и приватного скачивания больших объемов данных. Часто сервера используются для анонимного (гостевого) доступа к размещенным в открытом виде дистрибутивов ПО, музыки и фото. Доступ для анонимов позволяет, как правило, только просматривать каталоги и скачивать необходимую информацию, но на некоторых серверах наоборот — есть спецкаталоги, куда любой пользователь может загрузить файл для совместного пользования.
При неанонимном доступе возможностей больше, но они ограничены тем каталогом, куда предоставлен доступ.
Перейдем к настройке сервера. Работать будем с такой схемой.
Доступ к FTP-серверу будут иметь как администратор, так и пользователь. Администратор и пользователь имеют авторизованный доступ. При этом необходимо настроить права доступа таким образом, чтобы администратор имел неограниченный доступ, а пользователь имел доступ только к своей домашней директории. Также необходимо настроить анонимный доступ.
В Ubuntu для DHCP сервера доступен демон vsftpd. Устанавливаем DHCP-сервер, это выполняется командой:
testServer$ sudo apt-get install vsftpd
По умолчанию, анонимная загрузка запрещена. Необходимо изменить конфигурацию в файле /etc/vsftpd.conf.
testServer$ sudo nano /etc/vsftpd.conf
Находим там строку «anonymous_enable» и присваиваем ей значение «Yes». Данная строка отвечает за доступ к FTP-серверу для анонимных пользователей.
Также необходимо раскоментировать две строки: «write_enable» и «chroot_local_user». Первая строка отвечает за возможность записи на сервер, вторая строка блокирует возможность локальных пользователей подниматься на каталог выше, чем их домашняя папка.
В конце файла конфигурации добавляем две настройки:
Данные настройки устанавливают домашние папки для анонимных и локальных пользователей.
Сохраняем конфигурацию файла сочетанием клавиш 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.
Создаем папки для пользователей:
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
Таким образом, у нас получается следующая картина:
- К папке superuser имеет доступ только пользователь superuser, он же является владельцем этой папки
- К папке user имеет доступ как user, так и superuser. Это из-за того, что мы выставили права 770. Вторая семерка устанавливает полные права для группы пользователей groupl, в которую мы добавили superuser.
- К папке upload полный доступ имеют как user, так и superuser. Для всех остальных установлены только права на чтение и выполнение 575 . 5 = 101 (в двоичной системе). 101 ~ r-x. То есть остальные пользователи (а к ним относится анонимный) не могут ничего записывать в папке upload.
Проверяем права доступа и владельцев командой:
testServer$ ls -l /srv/ftp
Для того, чтобы проверить доступ к FTP-серверу, необходимо в любом браузере в адресной строке набрать:
ftp://172.16.1.2
В данном случае мы попадаем как анонимный пользователь, так как не вводим имя и пароль.
Видим три папки superuser/, upload/, user/. Так как мы зашли под анонимным пользователем доступ есть только к папке upload/.
Для того, чтобы войти под именем суперпользователя вводим:
ftp://superuser@172.16.1.2
Вводим имя пользователя: superuser, пароль: 12345. Под superuser’ом мы получаем доступ ко всем папкам.
Проверим напоследок обычного пользователя. Чтобы не вводить имя и пароль каждый раз при входе, можно в адресной строке написать следующее:
ftp://user:12345@172.16.1.2
Под user’ом мы можем попадать только в папки upload/ и user/. К папке superuser/ доступ закрыт.