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

Введение

Общие сведения о FTP

File Transfer Protocol (FTP) — один из первых протоколов передачи данных в Интернете. Он используется для передачи файлов между сервером и клиентом. Протокол FTP предоставляет пользователям доступ к файлам на удалённой системе с помощью набора стандартных команд без необходимости входить в систему. В дополнение к этому FTP-сервер предоставляет следующие функции.

  • Классификация абонентов

    По умолчанию FTP-сервер классифицирует пользователей на реальных, гостевых и анонимных на основе их статуса входа в систему. Эти три типа имеют разные права доступа. Реальные пользователи имеют полные права доступа, тогда как анонимные — только разрешение на загрузку ресурсов.

  • Записи команд и файла журнала

    Протокол FTP может использовать syslogd для записи данных, включая прошлые команды и сведения о пользовательских передачах (например, время передачи и размер файла). Данные журнала доступны пользователям в директории /var/log/.

  • Ограничение области доступа пользователей

    FTP может ограничивать рабочую область пользователя его домашней директорией. Когда пользователь входит в систему через FTP, его домашний каталог — это корневой каталог, отображаемый системой. Эта среда определяется операцией change root (сокращённо chroot). Таким образом, пользователи получают доступ только к основной директории, но не к важным каталогам, таким как /etc, /home и /usr/local. Это защищает систему и обеспечивает её безопасность.

Используемый порт FTP-сервера

Для сервиса FTP необходимо несколько сетевых портов. Сервер использует следующие порты:

  • Командный канал. Номер порта по умолчанию — 21.

  • Канал данных. Номер порта по умолчанию — 20.

Порт 21 используется для получения запросов на подключение от FTP-клиента, а порт 20 используется FTP-сервером для инициативного подключения к FTP-клиенту.

Общие сведения об vsftpd

Протокол FTP имеет долгую историю и использует незашифрованный режим передачи, поэтому считается небезопасным. В этом разделе описывается сервис vsftpd (Very Secure FTP Daemon — «Очень безопасный FTP-демон») для более безопасного использования FTP.

Демон vsftpd предназначен для создания FTP-сервера, ориентированного на безопасность. Он разработан для обеспечения следующих возможностей.

  • Начальный пользователь сервиса vsftpd — это обычный пользователь с малыми правами в системе. Кроме того, vsftpd использует chroot для изменения корневой директории, предотвращая риск недопустимого использования системных инструментов.

  • Любая команда vsftpd, требующая высокого уровня прав для выполнения, контролируется специальной программой верхнего уровня. Эта программа верхнего уровня имеет малые права и не влияет на систему.

  • Сервис vsftpd включает в себя большинство дополнительных команд (таких как dir, ls и cd), используемых в FTP. Как правило, система не обязана предоставлять дополнительные команды, и их применение не несёт ей угрозы.

Использование vsftpd

Установка vsftpd

Чтобы использовать этот сервис, необходимо установить программное обеспечение vsftpd. Если источник YUM настроен, выполните от имени пользователя root команду, чтобы установить сервис vsftpd:

dnf install vsftpd

Управление сервисами

Чтобы запустить, остановить или перезапустить сервис vsftpd, выполните соответствующую команду от имени пользователя root.

  • Запуск сервисов vsftpd:

    systemctl start vsftpd

    Вы можете выполнить команду netstat, чтобы проверить, включен ли для связи порт 21:

    netstat -tulnp | grep 21

    Если отображается следующая информация, сервис vsftpd включен.

    tcp6       0      0 :::21                   :::*                    LISTEN      19716/vsftpd

    Если команда netstat не существует:

    1. Чтобы установить программное обеспечение net-tools, запустите команду:

      dnf install net-tools
    2. Повторно запустите netstat.

  • Остановка сервисов vsftpd:

    systemctl stop vsftpd
  • Перезапуск сервиса vsftpd:

    systemctl restart vsftpd

Настройка vsftpd

Файлы конфигурации vsftpd

Файл конфигурации vsftpd можно редактировать для управления пользовательскими разрешениями. Описание файлов конфигурации vsftpd:

  • /etc/pam.d/vsftpd

    Модули PAM (Pluggable Authentication Modules, подключаемые модули аутентификации), применяемые для проверки подлинности и ограничения пользователям некоторых операций.

  • /etc/vsftpd/chroot_list

    Указывает, ограничивать ли пользователям из списка доступ исключительно домашним каталогом. По умолчанию этот файл не существует. Его необходимо создать вручную. Он будет значением параметра chroot_list_file в файле vsftpd.conf.

    Функция данного параметра определяется следующими параметрами в файле vsftpd.conf:

    • chroot_local_user — ограничивать ли доступ домашним каталогом для всех пользователей:

      • YES — все пользователи ограничены домашним каталогом;

      • NO — все пользователи не ограничены домашним каталогом.

    • chroot_list_enable — активировать ли список пользователей с ограниченным доступом:

      • YES — список включен;

      • NO — список отключен.

    Например, если для chroot_local_user задано значение YES, для chroot_list_enable — значение YES, а для chroot_list_file — значение /etc/vsftpd/chroot_list, то все пользователи будут ограничены своими домашними каталогами, а пользователи в chroot_list — не ограничены.

  • /etc/vsftpd/ftpusers

    Список пользователей, которым не разрешено использовать vsftpd. По умолчанию в этот файл также включена учётная запись системы, поэтому она не может по умолчанию использовать vsftpd.

  • /etc/vsftpd/user_list

Список пользователей, которым разрешено или запрещено входить на сервер vsftpd. Действие этого файла зависит от следующих параметров в главном файле конфигурации vsftpd.conf:

  • userlist_enable — включен ли механизм списка пользователей:

    • YES — механизм списка пользователей включен. В этом случае будет действовать конфигурация userlist_deny.

    • NO — механизм списка пользователей отключен.

  • userlist_deny — запрещено ли пользователям из списка выполнять вход:

    • YES — вход для пользователей в списке запрещен;

    • NO — вход для пользователей, указанных в команде, будет разрешен.

Например, если и для userlist_enable, и для userlist_deny задано значение YES, то для всех пользователей в списке вход будет невозможен.

  • /etc/vsftpd/vsftpd.conf

    Главный файл конфигурации процесса vsftpd. Формат конфигурации:

    Параметр=Значение

    Параметр и значение параметра не могут быть пустыми.

    Для просмотра сведений о файле vsftpd.conf выполните команду:

    man 5 vsftpd.conf
  • /usr/sbin/vsftpd

    Уникальный исполняемый файл vsftpd.

  • /var/ftp/

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

Вы можете изменять файлы конфигурации по мере необходимости. Используйте команду man, чтобы просмотреть дополнительные значения параметров.

Описание конфигурации по умолчанию

Содержимое конфигурации приводится только для справки. Вы можете изменить его в соответствии с требованиями узла (например, для усиления защиты).

В системе openEuler сервис vsftpd по умолчанию не открыт для анонимных пользователей. Чтобы просмотреть главный файл конфигурации, запустите команду vim:

vim /etc/vsftpd/vsftpd.conf

Содержимое будет следующим:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES

Описание параметров:

  • anonymous_enable — разрешать ли вход анонимным пользователям:

    • YES — вход для анонимных пользователей разрешен;

    • NO — вход для анонимных пользователей запрещён.

  • connect_from_port_20 — используется ли порт 20 для передачи данных в режиме порта:

    • YES — порт 20 используется;

    • NO — порт 20 не используется.

  • dirmessage_enable — отображать ли содержимое, на которое пользователю нужно обратить внимание, когда он открывает каталог:

    • YES — отображать;

    • NO — не отображать.

  • listen — запускается ли сервис vsftpd в автономном режиме. Возможные значения: YES и NO.

  • listen_ipv6 — прослушивать ли FTP-запросы IPv6.

    Возможные значения:

    • YES;

    • NO.

    Одновременное включение listen и listen_ipv6 невозможно.
  • local_enable — разрешать ли вход локальным пользователям:

    • YES — разрешен;

    • NO — запрещён.

  • local_umask — значение umask, когда локальный пользователь добавляет профиль.

  • pam_service_name — Поддержка управления PAM. Значением является название сервиса, например vsftpd.

  • tcp_wrappers — поддерживать ли механизм брандмауэра TCP Wrappers.

    Возможные значения:

    • YES;

    • NO.

  • userlist_enable — поддерживать ли контроль входа учётных записей в файле /etc/vsftpd/user_list.

    Возможные значения:

    • YES;

    • NO.

  • write_enable — предоставлять ли входящему пользователю разрешение на запись:

    • YES — функции отправки и записи включены;

    • NO — функции отключены.

  • xferlog_enable — записывать ли операции загрузки и отправки:

    • YES — операции записываются;

    • NO — операции не записываются.

  • xferlog_std_format — записывается ли файл журнала передачи в стандартном формате xferlog.

    Возможные значения:

    • YES;

    • NO.

Установка местного времени

Обзор

В системе openEuler сервис vsftpd по умолчанию использует среднее время по Гринвичу (GMT), которое может отличаться от местного времени. Например, время GMT на 8 часов отстает от пекинского. Необходимо изменить время GMT на местное, иначе время на сервере и на клиенте не будет совпадать, из-за чего возможны ошибки при отправке и загрузке файлов.

Метод настройки

Чтобы установить для vsftpd местное время, выполните от имени пользователя root следующие действия.

  1. Откройте файл vsftpd.conf и измените значение use_localtime на YES. Выполните следующую команду:

  2. Перезапустите сервис vsftpd:

    systemctl restart vsftpd
  3. Настройте сервис vsftpd на автоматический запуск при включении питания:

    systemctl enable vsftpd

Настройка приветственной информации

При использовании сервиса vsftpd обычно должен существовать файл приветственной информации. Чтобы настроить для сервиса файл welcome.txt, выполните от имени пользователя root следующие действия.

  1. Добавьте в конфигурационный файл vsftpd.conf строку:

    banner_file=/etc/vsftpd/welcome.txt
  2. Создайте файл /etc/vsftpd/welcome.txt и добавьте в него приветственную информацию, например:

    Welcome to this FTP server!

Настройка разрешения на вход для системной учётной записи

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

Для ограничения входа системных учётных записей используются два файла. По умолчанию файлы следующие:

  • /etc/vsftpd/ftpusers — этот файл контролируется модулем PAM и определяется настройками в файле /etc/pam.d/vsftpd;

  • /etc/vsftpd/user_list — этот файл задается userlist_file в конфигурации vsftpd.conf и предоставляется из vsftpd.

Оба файла должны существовать и иметь одинаковое содержимое. Вы можете записать учетные записи, чьи UID меньше 500, в два файла, обратившись к файлу /etc/passwd. Каждая строка указывает учётную запись.

Чтобы ограничить вход для системных учётных записей, добавьте эти записи в /etc/vsftpd/ftpusers и /etc/vsftpd/user_list от имени пользователя root.

Чтобы просмотреть содержимое файла /etc/vsftpd/user_list выполните команду:

vim /etc/vsftpd/user_list

Проверка настройки FTP-сервиса

Для проверки можно использовать FTP-клиент, предоставляемый openEuler. Команда:

ftp localhost

Введите имя пользователя (существующего пользователя в системе) и пароль, когда появится запрос. Если отобразится сообщение Login successful (Вход выполнен), это означает, что FTP-сервер настроен.

Если команда ftp не существует, чтобы установить программное обеспечение ftp выполните команду от имени пользователя root:

dnf install ftp

Настройка брандмауэра

Чтобы открыть доступ к FTP-сервису из Интернета, необходимо настроить брандмауэр и SElinux от имени пользователя root.

firewall-cmd --add-service=ftp --permanent
firewall-cmd --reload
setsebool -P ftpd_full_access on

Передача файлов

Обзор

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

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

Формат команды:

ftp [hostname | ip-address]

Здесь hostname указывает имя узла, а ip-address задает IP-адрес сервера.

Требования:

Запустите следующую команду в интерфейсе командной строки (CLI) операционной системы openEuler:

ftp ip-address

Введите имя пользователя и пароль, когда появится запрос. Если после успешной проверки подлинности отображается следующая информация, то FTP-соединение установлено. В этом случае вы получили доступ к каталогу подключенного сервера.

ftp>

В этом приглашении вы можете вводить различные команды для выполнения соответствующих операций.

  • Отобразите текущий путь сервера:

    ftp>pwd
  • Отобразите локальный путь. Вы можете отправлять по этому пути файлы в соответствующее расположение на FTP-сервере:

    ftp>lcd
  • Выйдите из текущего окна и вернитесь в локальный терминал Linux:

    ftp>!

Загрузка файла

Как правило, для загрузки файлов используется команда get или mget.

Использование команды get

Описание функции: передает файлы с удалённого узла на локальный.

Формат команды:

get [remote-file] [local-file]

Здесь remote-file указывает удалённый файл, а local-file — локальный.

Например, следующая команда позволяет получить файл /home/openEuler/openEuler.htm с удалённого сервера в локальный каталог /home/myopenEuler/ и изменить имя файла на myopenEuler.htm:

ftp> get /home/openEuler/openEuler.htm /home/myopenEuler/myopenEuler.htm

Использование команды mget

Описание функции: получает пакет файлов с удалённого узла на локальный.

Формат команды:

mget [remote-file]

Здесь remote-file указывает удалённый файл.

Например, чтобы получить все файлы из каталога /home/openEuler/ на сервере, выполните команду:

ftp> cd /home/openEuler/
ftp> mget *.*

В этом случае отображается сообщение при каждой загрузке файла. Чтобы заблокировать вывод сведений в командной строке, перед запуском mget выполните команду prompt off.

Файлы загружаются в текущий каталог на узле Linux. Например, если вы запустите команду ftp в /home/myopenEuler/, то все файлы будут загружаться в /home/myopenEuler/.

Отправка файла

Как правило, для отправки файлов используется команда put или mput.

Использование команды put

Функция: передает локальный файл на удалённый узел.

Формат команды:

put [local-file] [remote-file]

Здесь remote-file указывает удалённый файл, а local-file — локальный.

Например, следующая команда позволяет передать локальный файл myopenEuler.htm на удалённый узел /home/openEuler/ и изменить имя файла на openEuler.htm:

ftp> put myopenEuler.htm /home/openEuler/openEuler.htm

Использование команды mput

Функция: передает пакет файлов с локального узла на удалённый.

Формат команды:

mput [local-file]

Здесь local-file указывает локальный файл.

Например, чтобы передать все HTM-файлы из локального каталога в каталог /home/openEuler/ на сервере, выполните команду:

ftp> cd /home/openEuler/
ftp> mput *.htm

Удаление файла

Как правило, для удаления файла используется команда delete или mdelete.

Использование команды delete

Описание функции: удаляет один или несколько файлов с удалённого сервера.

Формат команды:

delete [remote-file]

Здесь remote-file указывает удалённый файл.

Например, чтобы удалить файл /home/openEuler/openEuler.htm с удалённого сервера, выполните команду:

ftp> cd /home/openEuler/
ftp> delete openEuler.htm

Использование команды mdelete

Описание функции: удаляет файлы с удалённого сервера. Эта функция используется для пакетного удаления файлов.

Формат команды:

mdelete [remote-file]

Здесь remote-file указывает удалённый файл.

Например, чтобы удалить все файлы, имена которых начинаются на букву a, из каталога `/home/openEuler/ на удалённом сервере, выполните команду:

ftp> cd /home/openEuler/
ftp> mdelete a*

Отключение от сервера

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

ftp> bye