Учебно-методические материалы для студентов кафедры АСОИУ

Установка и настройка ftp-сервера

VSFTD - сервис, реализующий функции файлового сервера по протоколу ftp. Все настройки vsftpd хранятся в файле конфигурации /etc/vsftpd.conf.

Цель работы: Изучение принципов сетевого взаимодействия с файловым сервером по протоколу ftp.

Задания к работе

  1. Выполнить установку ftp-сервера vsftpd на локальный хост.
  2. Cконфигурировать установленный ftp-сервер следующим образом:
    • разрешить анонимный доступ
    • разрешить анонимным пользователям создание каталогов
    • разрешить анонимным пользователям запись файлов
  3. Запустить vsftpd.
  4. Командой ftp подключиться к серверу ftp://localhost.
  5. Определить настройки сервера (команда status)
  6. Выяснить, какой каталог является текущим
  7. Закрыть соединение
  8. Локально создать от имени суперпользователя в каталоге /srv/ftp подкаталоги pub, temp и upload с правами доступа 755, 777, 733 соответственно (см. управление правами доступа).
  9. Написать пакетный файл, выполняющий следующие действия:
    • Переход в каталог temp
    • Загрузка произвольного локального файла в каталог temp
    • Скачивание этого файла в домашний каталог
    • Переход в каталог pub
    • Загрузка произвольного локального файла в каталог pub
    • Скачивание этого файла в домашний каталог
    • Переход в каталог upload
    • Загрузка произвольного локального файла в каталог upload
    • Скачивание этого файла в домашний каталог
    • Отображение списка файлов в каталогах temp, pub и upload
    • Завершение работы с ftp-сервером
  10. Анонимно подключиться к ftp-серверу localhost и выполнить пакетные команды из файла, созданного в предыдущем задании. В отчете объяснить причины отличий в результатах выполнения этих пакетных команд.
  11. Изменить конфигурацию vsftpd таким образом, чтобы разрешить вход для локальных пользователей.
  12. Подключиться к ftp-серверу localhost с учетной записью student и определить, какие каталоги будут доступны для этого пользователя (для этого можно выполнить, например, команды cd / и pwd)
  13. Установить параметр chroot_local_user=yes в vsftpd.conf и повторить предыдущее задание. Как отличаются результаты выполнения этого и предыдущего заданий?
  14. Завершить все ftp-сеансы.
  15. Остановить сервер vsftpd
  16. Удалить пакет vsftpd из системы

Указания к лабораторной работе

Сервер vsftpd

vsftpd (Very Secure File Transfer Protocol Daemon, очень безопасный ftp-сервер) — один из наиболее распространенных ftp-серверов для UNIX-систем. Сервер может быть запущен как служба через суперсерверы inetd или xinetd, также vsftpd можно использовать самостоятельно (standalone mode). vsftpd поддерживает все возможности, представляемые протоколом ftp, а также включает множество полезных функций, таких как:

Установка vsftpd осуществляется обычным образом и зависит только от формата пакета. Например, для установки в систему на базе rpm можно использовать одноименную программу или программы типа yum, zypper и подобные. Подразумевается, что репозитарии ПО настроены и доступны.

Примеры установки

  1. Установка из rpm
  2. edu.asoiu:~/soft # ls -l --color=no
    -r--r--r-- 1 root root 122840 Июн 6 2008 vsftpd-2.0.6-25.1.i586.rpm
    edu.asoiu:~/soft # rpm -ivh vsftpd*
    Подготовка... ########################################### [100%]
    1:vsftpd ########################################### [100%]
    edu.asoiu:~/soft #
    
  3. Установка из репозитария
  4. edu.asoiu:~/ # zypper install vsftpd
    Загружаются метаданные репозитария 'asoiu' [готово]
    Собирается кэш репозитария 'asoiu' [готово]
    Чтение установленных пакетов...
    Будет установлен следующий НОВЫЙ пакет:
    vsftpd
    Полный размер загрузки: 120,0 K. После этой операции будет использовано дополнительно 274,0 K.
    Продолжить? [да/нет]: yes
    Загружается пакет vsftpd-2.0.6-25.1.i586 (1/1), 120,0 K (274,0 K нераспакованный)
    Загружается: vsftpd-2.0.6-25.1.i586.rpm [готово]
    Устанавливается: vsftpd-2.0.6-25.1 [готово]
    edu.asoiu:~/ #
    
  5. Проверка установки
  6. edu.asoiu:~/ # rpm -q vsftpd
    vsftpd-2.0.6-25.1
    

Настройка vsftpd сводится к изменению записей в конфигурационнм файле /etc/vsftpd.conf. Структура этого файла проста: все опции задаются парами вида <параметр=значение>, где <параметр> — название опции, <значение> — непосредственное значение. Параметры могут быть следующих типов:

  1. логический (yes/no)
  2. строковый (строка символов)
  3. числовой (целое число)

Строки комментариев начинаются с символа #("решетка") и игнорируются.

Опции настроек могут быть независимыми, зависимыми и взаимоисключающими. В первом случае изменение опции не влияет на прочие настройки, во втором — значение опции зависит от— или влияет на другие настройки, в третьем — значение опции противоречит или отменяет другие параметры (подробнее — man vsftpd.conf).

Перечислим некоторые, наиболее часто используемые, настройки vsftpd:

# Это — комментарий
# Разрешать ли анонимный доступ? (yes/no)
anonymous_enable=yes
# Разрешать ли загрузку файлов анонимному пользователю? (yes/no)
anon_upload_enable=yes
# Разрешать ли анонимному пользователю создавать свои директории? (yes/no)
anon_mkdir_write_enable=yes
# Разрешать ли пользователю производить операции с записью, такие как
# переименование или удаление? (yes/no)
anon_other_write_enable=yes
# Разрешить вход локальных пользователей? (yes/no)
local_enable=yes
# Должны ли пользователи находится только в своих директориях? (yes/no)
chroot_local_user=yes
# Максимальная скорость передачи данных для зарегистрированных пользователей.
# По умолчанию = 0 (неограниченная).
local_max_rate=7200
# Разрешать ли запись в каталог? (yes/no)
write_enable=yes
# Включать сообщения при смене директории? (yes/no)
dirmessage_enable=yes
# Показ баннера при регистрации пользователя.
ftpd_banner="edu.asoiu: What?.. What do you want?.."
# Включить регистрацию событий (журналирование)? (yes/no)
xferlog_enable=yes
# Записывать в лог все активные FTP-соединения? (yes/no)
# Осторожно! Возможно на экране будет избыточная информация.
log_ftp_protocol=no
# Разрешать соединения только на порт 20 (ftp data)? (yes/no)
connect_from_port_20=yes
# Тайм-аут сессии (при бездействии), секунд
idle_session_timeout=600
# Тайм-аут передачи данных (при неудачном подключении), секунд
data_connection_timeout=120

Домашний каталог ftp

vsftpd, как и другие UNIX-серверы, выполняется от имени непривилегированного пользователя (обычно, ftp или nobody). Для этого пользователя создается домашний каталог, который и является основным для анонимных ftp-пользователей. Путь к этому каталогу указывается в файле /etc/passwd и узнать его можно, например, так:

root@edu.asoiu:~> cat /etc/passwd | grep ftp
ftp:x:40:49:FTP account:/srv/ftp:/bin/bash

Запуск vsftpd может выполняться в автоматическом или ручном режимах. Первый способ предусматривает использование inetd или xinetd, второй — непосредственно из командной строки. Здесь будет рассмотрен автоматический запуск через inetd с использованием скрипта service:

edu.asoiu:~ # service vsftpd start # запуск ftp-сервера
Starting vsftpd	done
edu.asoiu:~ # service --status-all | grep vsftpd # проверка состояния
...
Checking for service vsftpd ..running
edu.asoiu:~ #

Для автоматической загрузки vsftpd при перезагрузке системы добавим его в автозапуск на 3 и 5 уровнях:

chkconfig -a vsftpd 35
vsftpd	0:off 1:off 2:off 3:on 4:off 5:on 6:off

После внесения изменений в конфигурацию, vsftpd должен быть перезагружен. Это можно сделать так:

edu.asoiu:~ # service vsftpd restart
Shutting down vsftpd done
Starting vsftpd done
edu.asoiu:~ #

После успешной установки и настройки сервер vsftpd готов обслуживать подключения ftp-клиентов.

ftp-клиенты

Работа с файловым серверами по протоколу ftp осуществляется с помощью специализированных программ: ftp-клиентов. Как правило, в составе сетевых операционных систем имеются такие приложения (например, программа-клиент ftp, так и называется, причем как в Windows-, так и в UNIX-системах). Клиенты ftp могут иметь как консольный (ftp,mc, far), так и графический интерфейс пользователя (gftp, Total Commander). Эти программы представляют все средства работы с ftp-сервером, от просмотра списка файлов до управления файловой системой (зависит от настроек сервера). Ограниченные возможности могут представляют и другие сетевые приложения, например, веб-браузеры, которые позволяют только скачивать файлы с ftp-сервера.

В качестве примера рассмотрим ftp-сеанс с использованием программы ftp.

Подключение к серверу

  1. с явными указанием имени хоста в командной строке:
  2. aag@stilo:~> ftp edu.asoiu
    Connected to edu.asoiu.
    220 "edu.asoiu: What?.. What do you want?.."
    ...
    
  3. в интерактивном режиме ftp через команду open:
  4. aag@stilo:~> ftp //запуск ftp-клиента в интерактивном режиме
    ftp> open edu.asoiu // открытие соединения с сервером
    Connected to edu.asoiu.
    220 "edu.asoiu: What?.. What do you want?.."
    ...
    

Авторизация на сервере

Протокол ftp предусматривает два способа доступа пользователей к серверу:

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

Имя пользователя можно указать явно, на этапе подключения к серверу:

aag@stilo:~> ftp student@edu.asoiu
Connected to edu.asoiu.
220 "edu.asoiu: What?.. What do you want?.."
331 Please specify the password.
Password:...

В интерактивном режиме авторизация выполняется по команде user, пароль задается командой pass (или в виде приглашения от сервера):

aag@stilo:~> ftp edu.asoiu
Connected to edu.asoiu.
220 "edu.asoiu: What?.. What do you want?.."
Name (edu.asoiu:aag): user // сервер запрашивает имя пользователя...
331 Please specify the password.
Password: // ... и его пароль
530 Login incorrect. // некорректный логин
ftp: Login failed.
ftp> user stud // явный вызов команды ввода логина
331 Please specify the password.
Password: // запрос пароля со стороны сервера (пароль не отображается)
230 Login successful. // вход выполнен
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> // установление сеанса и начало работы
...

Выполнение команд ftp

Протокол ftp определяет два типа команд: команды управления файлами и команды протокола. Первый тип команд предназначен для работы с файловой системой (табл. 1), эти команды доступны после установления соединения. Второй тип предназначен для управления ftp-сеансом как таковым и набор поддерживаемых команд может отличаться у различных ftp-серверов. Полный список команд обоих типов можно получить по командам help и rhelp соответственно.

Таблица 1. Некоторые команды ftp

Команды Назначение
pwd получение информации о текущем каталоге
dir [каталог], ls [каталог] вывод списка файлов текущего [заданного] каталога
cd путь | .. | . переход в серверный каталог, указанный параметром путь или в родительский каталог (..), или в корневой каталог (.)
lcd путь переход в локальный каталог, указанный параметром путь
mkdir имя_каталога создание каталога с указанным именем на сервере
rmdir имя_каталога удаление указанного каталога на сервере
put имя_локального_файла [имя_файла_на_сервере] передача указанного файла из текущего каталога на сервер [с новым именем]
get имя_файла_на_сервере [имя_локального_файла] получение (скачивание) указанного файла с сервера в текущий локальный каталог
append имя_локального_файла имя_удаленного_файла добавление информации из локального файла в конец удаленного файла
help [имя_команды] список команд управления файлами. Если задано имя_команды, то отображается справка о ней.
rhelp список команд управления сеансом, поддерживаемых сервером.

В интерактивном режиме ввод команд выполняется в строке приглашения. Некоторые команды требуют указания одного или более параметров, которые разделяются пробелами. Далее приведено несколько примеров (обратите внимание на числа в начале строк — это коды отклика, возвращаемые сервером по результатам выполнения команд):

  1. Просмотр списка файлов
  2. 230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> dir
    229 Entering Extended Passive Mode (|||40049|)
    150 Here comes the directory listing.
    drwxr-xr-x 2 1001 65533 4096 Oct 21 03:59 Desktop
    drwx------ 2 1001 100 4096 Sep 29 08:16 Documents
    drwxr-xr-x 2 1001 100 4096 Sep 27 06:49 bin
    -rw-r--r-- 1 1001 65533 26 Feb 19 22:20 description.txt
    -rw-r--r-- 1 1001 65533 242 Feb 20 04:54 index.html
    -rw-r--r-- 1 1001 65533 21 Feb 19 22:05 info.txt
    drwxr-xr-x 2 1001 100 4096 Feb 20 04:25 public_html
    -rw-r--r-- 1 1001 65533 1088 Feb 19 22:18 readme.txt
    226 Directory send OK.
    ftp>
    ...
    
  3. Перемещение в другой каталог
  4. ftp> cd public_html
    250 Directory successfully changed.
    ftp>
    ...
    
  5. Смена прав доступа к удаленному файлу
  6. ftp> chmod 755 index.html
    550 SITE CHMOD command failed. // ОШИБКА! Настройки сервера не позволяют смену прав доступа
    ftp>
    ...
    
  7. Скачивание удаленного файла с переименованием на клиентской стороне
  8. ftp> get index.html ind.html // файл index.html будет сохранен как ind.html
    local: ind.html remote: index.html
    ftp: local: ind.html: Permission denied // ОШИБКА! Запись в текущий локальный каталог запрещена
    ftp> lcd ~ // смена локального каталога (переход в домашний каталог пользователя)
    Local directory now /home/aag
    ftp> get index.html ind.html // вторая попытка скачать файл
    local: ind.html remote: index.html
    229 Entering Extended Passive Mode (|||40273|)
    150 Opening BINARY mode data connection for index.html (550 bytes).
    100% |****************************************| 550 8.64 KB/s 00:00 ETA
    226 File send OK. // успешно
    550 bytes received in 00:00 (8.55 KB/s) // скорость и время операции
    ftp>
    ...
    
  9. Дописывание информации из локального в удаленный файл
    ftp> append
    (local-file) myfile.txt // локальный файл
    (remote-file) index.html // удаленный файл
    local: myfile.txt remote: index.html
    229 Entering Extended Passive Mode (|||40437|)
    150 Ok to send data.
    100% |******************************************| 20 164.12 KB/s 00:00 ETA
    226 File receive OK.
    20 bytes sent in 00:00 (19.29 KB/s)
    ftp>
    
  10. Отображение состояния ftp-сервера (текущие настройки сервера и соединения)
  11. ...
    ftp> status
    Connected and logged into edu.asoiu.
    No proxy connection. //прямое соединение
    Gate ftp: off, server (none), port ftpgate. //шлюз не используется
    Passive mode: on; fallback to active mode: on.//пассивный режим включен
    Mode: stream; Type: binary; Form: non-print; Structure: file. //потоковая передача бинарных файлов
    Verbose: on; Bell: off; Prompting: on; Globbing: on. //опции пользов. интерфейса
    ...
    
  12. Получение списка команд, поддерживаемых сервером
  13. ftp> help
    Commands may be abbreviated. Commands are:
    ! features mls proxy size
    $ fget mlsd put sndbuf
    account form mlst pwd status
    append ftp mode quit struct
    ascii gate modtime quote sunique
    bell get more rate system
    binary glob mput rcvbuf tenex
    bye hash msend recv throttle
    case help newer reget trace
    cd idle nlist remopts type
    cdup image nmap rename umask
    chmod lcd ntrans reset unset
    close less open restart usage
    cr lpage page rhelp user
    debug lpwd passive rmdir verbose
    delete ls pdir rstatus xferbuf
    dir macdef pls runique ?
    disconnect mdelete pmlsd send
    edit mdir preserve sendport
    epsv4 mget progress set
    exit mkdir prompt site
    ftp>_
    

Завершение сеанса ftp

stilo:~> ftp student@edu.asoiu
... // выполнение различных команд ftp
ftp> disconnect // Отключение от сервера. Можно выполнить новое подключение (open)
221 Goodbye.
ftp> quit // Завершение работы с ftp-клиентом
stilo:~>

Пакетный режим

Некоторые ftp-клиенты поддерживают пакетный режим работы. В этом режиме вся последовательность ftp-команд предварительно записывается в текстовый файл. Этот файл задается в виде параметра или по цепочке на вход ftp-клиента, который последовательно считывает эти команды и выполняет их.

Рассмотрим пример работы в пакетном режиме. Пусть требуется подключиться к серверу edu.asou, получить имя текущего каталога для указанного ftp-пользователя и список файлов в этом каталоге, а затем отключиться от сервера. Для этого создадим файл ftp.batch (имя может быть любое) следующего содержания:

pwd
dir
quit

Теперь, чтобы получить имя домашнего каталога на ftp-сервере и список файлов в нем для пользователя student, можно выполнить такую команду (обратите внимание на передачу логина и пароля):

stilo:~> ftp ftp://student:student@edu.asoiu < ftp.batch
Connected to edu.asoiu.
220 edu.asoiu: What?.. What do you want?..
331 Please specify the password.
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
200 Switching to Binary mode. // выполнение pwd
257 "/home/student"
229 Entering Extended Passive Mode (|||40185|)
150 Here comes the directory listing.// выполнение dir
drwxr-xr-x 2 1000 100 4096 Sep 02 08:04 Documents
-rw-r--r-- 1 1000 100 0 Nov 03 06:10 ssh
226 Directory send OK.
221 Goodbye.// выполнение quit
stilo:~>

Контрольные вопросы

  1. В каком из режимов (активном или пассивном) работает учебный ftp-сервер?
  2. Какой режим передачи по умолчанию использует учебный ftp-сервер?
  3. Какой код ответа будет выведен при удачном подключении к серверу?
  4. Как определить, что на ftp-сервере имеются каталоги, доступные для записи?
  5. Какие коды ответа будут выведены при удачной и неудачной смене каталога?

CC-BY-CA Анатольев А.Г., 31.01.2012