Рейтинг 4.5 из 5. Голосов: 4

vsftpd

В этой статье я расскажу, как настроить vsftpd в Debian 7.

Протокол FTP не безопасен, поэтому лучше его лучше не использовать или как минимум сменить порты. Самое лучшее решение данной проблемы - SFTP, который нативно поддерживается openssh-сервером в Debian.

В качестве клиента для Windows рекомендую Sftp клиент от notepad++ или плагин для Total commander.

Если же нужен Ftp, инструкция ниже поможет.

Установка

apt-get install vsftpd

После обновления VSFTPD в Debian7 vs получаем следующее сообщение при попытке залогиниться.

500 OOPS: vsftpd: refusing to run with writable root inside chroot ()

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

Если вы не собираетесь использовать домашние директории пользователей (home) для доступа по FTP, то можно на этом остановиться и настроить например доступ Ftp к папке www сервера Apache для всех пользователей.

Если же сайты каждого пользвателя планируется размещать в его домашней директории home - то vsftpd из репозитория debian 7 работать не будет.

Можно долго мудрить с правами на папки, а можно просто поставить Vsftpd с репозитория Cyconet.

deb     http://ftp.cyconet.org/debian     wheezy-updates  main contrib non-free
deb-src http://ftp.cyconet.org/debian     wheezy-updates  main contrib non-free

Сначала удалим

apt-get purge vsftpd

Импортируем ключи. Есть два варианта. Например установив пакет:

aptitude install debian-cyconet-archive-keyring

Можно импортировать вручную:

wget -O - http://ftp.cyconet.org/debian/repo.key 2>/dev/null | apt-key add -

Устанавливать ключи также можно с помощью GPG

В скобках - пример:

(gpg --keyserver keyring.debian.org --recv-keys 5B668835B88D99)

Далее установим VSFTPD

aptitude install -t wheezy-updates debian-cyconet-archive-keyring vsftpd
Обрабатываются триггеры для man-db …
Настраивается пакет vsftpd (2.3.5-10~update.1) …
Starting FTP server: vsftpd.

В итоге мы получаем vsftpd 2.3.5-10 без ограничений CHROOT.

Основной файл настроек лежит прямо в каталоге /etc.

vim /etc/vsftpd

Файл конфига с переводом ниже:

# --------------------------------------
# Конфиг с пояснениями. Сайт: vacadem.ru
# --------------------------------------
# Режим "standalone mode". В этом случае он сам заботится о прослушивании и определении входящих соединений.
listen=YES
# Тоже самое что listen, за исключением того что vsftpd слушает IPv6 протокол включительно. 
# Этот параметр и listen взаимно исключаемые. 
listen_ipv6=NO
# Фоновый режим. Т.е. контроль передается той оболочке в которой был запущен vsftpd.
# background=NO
# Максимальное количество клиентов, которые могут быть подключены. 
# Попытки подключения сверх указанного количества, получат сообщение об ошибке.
max_clients=5
# Максимально возможное количество клиентов с одинаковыми ip адресами. 
# Клиентские подключения пытающиеся превысить этот лимит, получат сообщение об ошибке.
max_per_ip=3
# Разрешает или запрещает вход анонимных пользователей.
anonymous_enable=NO
# Разрешает или запрещает вход для локальных пользователей.
# Должно быть включено для разрешения любых не анонимных входов, включая вход виртуальных пользователей.
local_enable=YES
# Разрешает FTP команды изменяющие файловую систему. Такие команды как:
# STOR,  DELE,  RNFR, RNTO, MKD, RMD, APPE, SITE.
write_enable=YES
# Значение номера порта для PASV стиля передачи данных.
# Может быть использовано для указания подробного размещения портов помогая файрволлингу.
pasv_min_port=70000
pasv_max_port=80000
# Маска файлов назначаемая при загрузке файлов на сервер. 
# При желании возможно изменить на 0777 если есть необходимость файлы сделать исполняемыми.
file_open_mode=0644
# Значение маски назначения прав доступа к файлам созданным локальными пользователями.
local_umask=022
# Показ скрытых файлов.
force_dot_files=YES
# Позволяет анонимным пользователям загружать файлы на сервер, в соответствии с условиями. 
# Для того чтобы это работало опция write_enable должна быть активирована, 
# и анонимный ftp пользователь должен иметь права на запись в каталоге для загрузки. 
#anon_upload_enable=YES
# Позволяет анонимным пользователям создавать новые каталоги в соответствии с определенными для этого условиями.
#anon_mkdir_write_enable=YES
# При входе в каталог пользователям показывается сообщение из файла .message. 
# По умолчанию, директория сканируется на наличие сообщения в файле .message.
# Его можно изменить задав имя другого файла параметром message_file.
dirmessage_enable=YES
# При включении, vsftpd производит листинг каталогов с отображением времени лично 
# вашей временной зоны. По умолчанию в листинге отображается GMT временная зона. 
# Времена обновляемые MDTM командами также затрагиваются этой опцией.
use_localtime=YES
#
# Если включено, журнал будет включать детальные отчеты о закачках на сервер, 
# и закачках с сервера (uploads, downloads). По умолчанию, этот файл будет располагаться в /var/log/vsftpd.log,
# но расположение может быть изменено используя опцию vsftpd_log_file.
xferlog_enable=YES
# Включение этой опции указывает исходящим с сервера соединениям использовать 20 порт.
# Некоторые клиенты могут настаивать на этом значении. 
# Отключение этой опции позволяет vsftpd стартовать с немного меньшими привилегиями.
connect_from_port_20=YES
# Если включить, у всех анонимно закачанных файлов на сервер будут 
# изменены владельцы на  пользователя в указанного в chown_username. 
# Это может быть полезно при администрировании, и возможно из соображений безопасности. 
#chown_uploads=YES
#chown_username=whoever
# В параметре этой опции можно указать альтернативный путь к файлу журнала в wu-ftpd стиле.
#xferlog_file=/var/log/vsftpd.log
#
# Если включено, запись в журнал производится в стандартном wu-ftpd стиле, xferlog формата. 
# Полезно при желании использования уже существующих привычных способов генерации статистики. 
# Однако с другой стороны, формат используемый по умолчанию лучше читается.
#xferlog_std_format=YES
# Временной промежуток в секундах указывающий для удаленного клиента
# максимальное время которое он может бездействовать не выполняя FTP команды. 
# Если время исчерпано, соединение отбрасывается.
#idle_session_timeout=600
# Максимальный временной промежуток в секундах, разрешенного замирания процесса передачи данных.
# Если перерыв превышен, соединение с удаленным клиентом отбрасывается.
#data_connection_timeout=120
# Указывает имя пользователя под которым работает сервер, когда ему не нужны привилегии. 
#nopriv_user=ftpsecure
# При включении, специальные FTP команды известные как "async ABOR" #будут разрешены.
# Только плохо продуманные FTP клиенты используют эту функцию. 
# Эта функция неудобна в управлении, поэтому отключена по умолчанию. 
# Некоторые FTP клиенты могут зависать в момент отмены передачи, если эта функция выключена. 
#async_abor_enable=YES
# Если включить, ASCII режим передачи данных будет разрешен при Upload.
ascii_upload_enable=YES
# Если включить, ASCII режим передачи данных будет разрешен при download.
ascii_download_enable=YES
# В этой опции можно указать банер-строку выводимую на экран клиента при подключении к серверу:
ftpd_banner=Welcome to blah FTP service.
# Позволяет использовать список анонимных паролей типа e-mail, 
# при использовании которых попытки подключения будут отвергнуты. 
#По умолчанию, файл содержащий этот список располагается в /etc/vsftpd.banned_emails
#deny_email_enable=YES
#Эта опция указывает имя файла в котором содержится список анонимных e-mail паролей не принимаемых сервером.
#banned_email_file=/etc/vsftpd.banned_emails
#Если выбрано локальные пользователи будут (по умолчанию) перенесены в chroot () "заточение" 
#в их домашнем каталоге после входа. Эта опция имеет смысл быть включенной из соображений безопасности.
chroot_local_user=YES
allow_writeable_chroot=YES
#Если включить, вы можете использовать список локальных пользователей помещаемых в chroot() после входа.
#chroot_list_enable=YES
# Указывает альтернативный путь к файлу содержащему список локальных пользователей.
#chroot_list_file=/etc/vsftpd.chroot_list
#
# При включении, разрешает рекурсивный листинг "ls -R". Включение немного 
# рискованно исходя из соображений безопасности, так как выполнение "ls -R" в 
# верхнем уровне большого сайта может поглощать много ресурсов.
#ls_recurse_enable=YES
# Кастомизация
#-------------
# Эта опция указывает на имя пустого каталога. Каталог не должен быть записываемый для ftp пользователя. 
# Этот каталог используется как безопасный chroot(), когда vsftpd не нужен доступ к файловой системе.
secure_chroot_dir=/var/run/vsftpd/empty
# В этой строке можно указать имя PAM сервиса который будет использоваться для vsftpd. 
pam_service_name=vsftpd
# Если включено, и vsftpd был скомпилирован с поддержкой OpenSSL, 
# vsftpd будет поддерживать безопасность соединения с помощью SSL. 
# Это позволяет контролировать соединения (включая входы в систему) и также передачу данных. 
# Для этого также необходим клиент с поддержкой SSL.
ssl_enable=NO
# Эта опция задает расположения RSA сертификата для использования в SSL зашифрованных соединениях.
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
# Эта опция задает расположения личного RSA ключа для использования в SSL зашифрованных соединениях.
# Если эта опция не выбрана, сертификат предусматривается как личный ключ. 
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

Перезапускаем vsftpd

service vsftpd restart

Не забудьте создать нового пользователя, так как root доступ к серверу ftp запрещен.

Если хотим пользователю ww дать доступ также по ssh

useradd www -b /home -m -U -s /bin/bash

Если хотим пользователю запретить заходить по ssh то:

useradd www -b /home -m -U -s /bin/false

Задать пароль пользователю можно командой

passwd www

Рассмотрим это выражение более подробно.

Где:
username имя пользователя(логин)
home директория где будет находиться его домашний каталог
ключ -m указывает на то, что его домашней директории будет присвоено название которое было указано в username.
ключ -U указывает на то что необходимо создать одноименную группу.
-s /bin/false -что пользователю будет отключен шелл (это важный момент)

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

Доступ к FTP могут получить пользователи которые имеют работоспособный шелл т.е. /bin/bash, для того чтобы пользователи с /bin/false могли авторизироваться на нашем ftp, нам необходимо отредактировать файл /etc/pam.d/vsftpd

nano /etc/pam.d/vsftpd

Найти и закоментировать строку (она самая последняя) чтобы она выглядела:

#auth   required        pam_shells.so

И перезапускаем vsftpd

/etc/init.d/vsftpd restart

Пользователь с отключенным шеллом, не сможет подключиться по SSH.

Как отключить шелл уже существующему в системе пользователю:

nano /etc/passwd

там находим нужного пользователя и /bin/bash меняем на /bin/false, после перезагрузки, изменения переменятся.

Права доступа на файлы и директории

Параметр local_umask отвечает за то, какие права будут присвоены файлам, которые были закачаны через FTP, по умолчанию там установлено local_umask=022, маска расчитывается очень просто, по формуле 777-A=X

Где:

777-права полного доступа
А-права которые необходимо получить
Х-маска, которую необходимо выставить
Предположим, нам необходимо получить права 754 что соотвествует drwxr-xr--, тогда 777-754=23 получается local_umask=023.
В любом случае, тот кто закачал файлы является их владельцем и может расширить права доступа к ним.
В общем, находим строку:

local_umask=022

И меняем 022 на 023 или на ту которая необходима в вашей ситуации:

local_umask=023

Так же открываем доступ к портам в IPTABLES

-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 70000 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80000 -j ACCEPT

Если в дальнейшем планируется размещать сайты каждого пользователя в его домашней директории то нужно позаботиться о правах на запись.

Apache работает по умолчанию от пользователя www-data, поэтому чтобы разрешить вебсерверу писать файлы в нашу домашнюю директорию нам придется устанавливать Apache c модулем mpm-itk или ruid2.

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

apt-get install fail2ban

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

force_dot_files=YES

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

ftp localhost

Ftp запросит имя пользователя и пароль:

Connected to localhost.
220 Welcome to blah FTP service.
Name (localhost:root): www
331 Please specify the password.
Password:

В результате мы окажемся в домашней директории пользователя... Так же можно использовать любой привычный клиент хоть под линукс хоть под windows.

Если программа ftp не установлена, ее можно установить командой

apt-get install ftp
Просмотров: 7199 Печать Назад
 

Комментарии 

#3 Валерий
02.11.2018 14:29
Через Filezilla действительно соединяется в защищенном режиме. Через Total Commander или плагин от Notepad++ работает по FTP.
Цитировать
#2 Тимур
18.09.2018 11:58
По вашей инструкцией у меня получилось зайти на серв только через Sftp и SCP, и ещё, почему у меня не все права выдались?
Цитировать
#1 vb
08.11.2015 18:40
по вашей инструкции ничего не получается так как не создается по умолчанию в home ничего не работает
ftp localhost
Цитировать
 
Рекомендуем по теме...