В этой статье я расскажу, как настроить 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
Рубрики
-
3D и графика ( 7 )
-
Веб разработка ( 13 )
-
Железо и периферия ( 8 )
-
Портфолио и резюме ( 3 )
-
Сервер на Debian Linux ( 20 )
-
Сисадмину на заметку ( 14 )
-
Тестовая лаборатория ( 10 )
Новые записи
25.03.23 Ошибка 0x00000709 при попытке установить сетевой USB принтер
05.10.19 Добавление сертификата в exim4
18.08.18 Утилиты диагностики системы Linux
02.10.16 Отключение systemd на Debian
Комментарии
- Всё отлично! Спасибо за гайд!
03.03.24 08:01 комментирует: Luidgi Vampa - Добрый день! Спасибо вам за ваши статьи! Подскажите пожалуйста. Как проверить ус...
17.01.24 01:47 комментирует: Олег - Спасибо, проделал на ноутбуке dv5-1040er, скорость реально выросла. Делал на w10...
10.10.23 15:58 комментирует: Евгений - у мене схожа проблема як була у вас... чому ви вирішили ввести 92500000??? дякую...
11.04.23 01:51 комментирует: Володимир
Комментарии
02.11.2018 14:29
18.09.2018 11:58
08.11.2015 18:40
ftp localhost