НАСТРОЙКА FTP-СЕРВЕРА

По идее, следующие ниже инструкции должны быть актуальны для любого Linux-дистрибутива, но я тестировал только на Ubuntu 16.04.1 LTS (GNU/Linux 4.1.19-v7+ armv7l). Там у меня файлопомойка и небольшая уютненькая парковочка для сайтов. Как обычно пишут, мол вяских серверов дофига, бла бла бла, но самый лучший из них - это VSFTPD. Вот его и рассмотрим. 

Итак... Приведу здесь парочку статей под небольшой редакцией. Одна для быстрой настройки в debian-based системах, другая с более подробным описанием конфига.

 

Быстрая настройка:

 

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

apt-get install vsftpd

Все настройки vsftpd хранятся в файле /etc/vsftpd.conf. Откроем его в редакторе nano и внесем несколько корректив:

nano /etc/vsftpd.conf

Первое, что необходимо сделать в файле настроек – установить запрет на подключение анонимных пользователей. Находим опцию “anonymous_enable” и прописываем ей значений“NO”. Затем сними комментарий с опции “local_enable” и “write_enable”. Первая опция разрешает использовать для входа на сервер пользователям, которые зарегистрированы в системе. Вторая разрешает пользователям выполнять любые FTP-команды записи.1

Последним действие в конфигурационном файле будет снятие комментария с опции chroot_local_user. Если ей установлено значение «Yes» (по умолчанию оно и установлено), все системные пользователи будут находиться в пределах chroot и не смогут получить доступ к другим директориям сервера.

Сохраняем изменения (ctrl+o) и закрываем файл (ctrl+x). Теперь попробуем протестировать работу FTP сервера. Для этого создадим нового пользователя и сделаем в его домашней директории папку, к которой он будет иметь возможность получить доступ по FTP.

Добавление нового пользователя выполняется командой adduser. Попробуем создать нового пользователя user:

adduser user

Утилита создания пользователя задаст несколько вопросов (пароль, различные вспомогательная информация). Вопросы с запросом вспомогательной информации (phone, room number и т.д.) можешь игнорировать, нажимая клавишу “Enter”. Предположим, что пользователь создан, теперь добавим новую группу webusers и включим в нее пользователя user:

groupadd webusers
usermod -G webusers user

Я пробовал сделать фтп-юзверем свою обычную учетку, добавив ее в группу "webusers" уже существующего... И обломался. Так получилось, что madmenat исчез из "/etc/sudoers" со всеми вытекающими последствиями. Пришлось вынуть флешку и редактировать этот файл с ноутбука. Ну, это такое лирическое отступление. Едем дальше.

Если прямо сейчас перейти в директорию /home, то мы увидим, что в ней появилась папка для недавно созданного нового пользователя. Создадим в домашней директории пользователя две новые папки:

mkdir /home/user/www
mkdir /home/user/logs

В первой будут храниться файлы доступные снаружи (это будет директория хоста), а вторую будем использоваться для хранения логов. Теперь нам надо сменить владельца для созданных папок. Мы их создавали из под root, поэтому сейчас владельцем является супер пользователь. Смена владельца выполняется командой chown:

chown user:webusers /home/user/www
chown user:webusers /home/user/logs
chmod 555 /home/user

На этом все подготовительные действия завершены. Остается только перезапустить FTP сервер и попробовать подцепиться к нему каким-нибудь клиентом. Перезапуск службы vsftpd выполняем традиционным способом:

service vsftpd restart

Теперь протестируем настроенный vsftpd сервер.

В качестве теста можно использовать любой ftp-клиент, я лично предпочитаю Double Commander, но можно использовать что угодно, хоть бы даже командную строку Windows или консоль другого Linux-а (кстати, синтаксис в обоих случаях будет совершенно идентичным):

ftp <IP адрес севера>

После установки соединения, программа у тебя запросит ввести логин/пароль. Вводи сюда данные созданного пользователя. Пройдя процесс аутентификации, ты можешь начать отправлять ftp команды. Например, команда dir запрашивает список директорий с ftp сервера. Выполнив ее, ты увидишь, что на сервере доступно две папки – www и logs.

На этом, установку и настройку 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=NO
allow_writeable_chroot=YES

Во многих инструкциях написано, мол для того, чтобы запереть пользователя в своей директории и запретить ему лазать по остальным папкам, параметр chroot_local_user должен иметь значение "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-серверу из глобальной сети, не забудьте настроить роутер соответствующим образом. Но тут уж сами разбирайтесь.

Единственное, в чем я пока что так и не смог разобраться - это в том, как задать какие-то конкретные порты для связи, помимо стандартных 20 и 21. Вроде бы такая функция как "port_listen=...", но как я не пытался ее использовать, возникают обломы с установкой соединения. Если кто знает, в чем дело, буду рад помощи.

Комментарии   

0 #1 Marc 18.11.2018 16:12
I see you don't monetize your page, don't waste your traffic, you can earn extra bucks every month.
You can use the best adsense alternative for any type of website (they approve all
websites), for more details simply search in gooogle: boorfe's tips
monetize your website

my web site BestDorothea
Цитировать

Добавить комментарий


Защитный код
Обновить