Установка vsftpd на CentOS. Установка FTP сервера - VsFTPd - CentOS Wiki
Совсем недавно заглючил некий скрипт на пыхе. Скрипт был покупной, именно поэтому я решил не разбираться с ним, а напрямую обратиться в саппорт продавца для выяснения проблемы. Саппорт ответил коротко: нужен доступ к FTP - будем посмотреть. И вот тут я завис на пол минуты…
Ведь фтп на моём Кенте не установлен, потому как работаю то я под SSH. Да ещё и авторизируюсь не под паролем, а под сертификатом . Не могу же я просто так взять, и дать SSH-ключ, под которым потом можно будет входить на сервер постоянно. Да и даже если включить временно вход по паролю, зачем саппорту конкретного скрипта под конкретную кмс видеть весь мой сервер и то, что на нём расположено?
Ну, думаю, как раз для таких особых случаев нужно фтпишечку то и поднять.
К счастью, на деле оказалось всё довольно быстро и просто, и даже с выбором определился в раз - «vsftpd» (Very Secure FTP Daemon). Быстрый. Секурный. Кросплатформенный. Лёгок как в установке, так и в настройке. Иными словами - один из лучших FTP-серверов.
Устанавливаем & настраиваем vsftpd
$ yum install vsftpdПосле чего правим главный конфигурационный файл, в котором нужно:
- Изолировать пользователей в их домашней директории.
- Запретить анонимный доступ.
1
2 | chroot_local_user=YES
anonymous_enable=NO |
Настраиваем пользователей vsftpd
Здесь важно понять один очень интересный момент: лишних FTP-пользователей добавлять не нужно, они уже есть. А добавлялись пользователи именно тогда, когда мы при установке AMP на CentOS. Иными словами - пользователь уже имеет полный доступ на его домашний каталог , остаётся лишь подредактировать его для возможности авторизации под vsftpd.
Например, нам нужен FTP-доступ к директории /var/www/vhosts/сайт на сервере, владельцем которой является пользователь almostover . Делаем следующее:
- Смотрим список пользователей и меняем стандартную домашнюю директорию на нужную нам.
- Задаём пользователю пароль для FTP-логина.
Назначаем домашнюю директорию
$ nano /etc/passwd 1
2 | -almostover:x:500:500::/home/almostover:/bin/bash
+almostover:x:500:500::/var/www/vhosts/сайт:/sbin/nologin |
Также следует заменить /bin/bash на /sbin/nologin , для запрета на доступ пользователя к системе .
Задаём пользователю пароль
$ passwd almostoverЗапускаем vsftpd
И только после того, как будут произведены все вышеописанные настройки, запускаем сам FTP-сервер.
$ service vsftpd startИ если планируем пользоваться FTP-сервером на постоянной основе, не забываем добавить в автозагрузку.
$ chkconfig vsftpd onЗаключение о FTP-сервере
Пользоваться ли FTP на постоянной основе или нет, решать лично каждому.
С одной стороны, если Вы планируете работать с одним определённым каталогом (сайтом), тогда неплохим плюсом здесь будет то, что Вам не придётся постоянно chown -нить свежезакачанные файлы или директории. Все операции будут производиться от имени текущего пользователя и, соответственно, все права по-умолчанию будут назначаться ему.
С другой стороны, лично моя цель поднятия ФТП была озвучена в самом начале: когда нужно дать кому-то временный доступ к определённой изолированной директории на сервере/определённому сайту:
- Меняю пароль от выдаваемого логина.
- Запускаю vsftpd.
- Даю логин и пароль от FTP.
- Останавливаю vsftpd.
- Меняю пароль ещё раз от этого же логина (на случай, если в следующий раз будет выдан другой логин).
Никаких SSH.
Никаких лишних директорий.
Всё предельно разумно и максимально безопасно.
Старый добрый протокол передачи FTP позволяет передавать файлы по сетям, и скорее всего вам когда-либо приходилось с ним сталкиваться, либо вы о нем слышали. По умолчанию использует 21 порт (так сложилось исторически), и традиционно служит для обмена файлами, между машинами, по схеме клиент-сервер, как впрочем, и многие другие протоколы. FTP является героем своего времени, и сегодня он имеет довольно большую востребованность, для задач публичных ftp серверов. Кроме того, многие хостинговые компании продолжают поддерживать этот протокол, ввиду его удобства для обмена файлами.
В данном посту мы рассмотрим установку сервера ftp на операционную систему CentOS . В силу того, что он был разработан довольно таки давно, первоначальный ftp является не защищённым в плане шифрования трафика и т.д., что сегодня подрывает его актуальность по современным меркам безопасности. Поэтому наиболее оптимальным выбором для большинства пользователей, которым нужен ftp сервер, является софт vsftp (Very Secure FTP daemon). Стоит отметить его надежность, а так же простоту настройки FTP сервера.
Установка vsftpd
Для установки сервера vsftpd вам необходимо авторизоваться под root-ом, затем выполнить команду:
# yum install vsftpd
Данный пакет входит в стандартный репозиторий CentOS, и проблем с установкой данного софта проблем возникнуть не должно. После того как прошел процесс установки, можно добавить запуск сервера при старте системы:
# chkconfig vsftpd on
После того как сервер был установлен, базовая конфигурация позволяет работать серверу с настройками по умолчанию. Для того чтобы внести изменения в настройки конфигурации, вам достаточно править конфигурационный файл:
/etc/vsftpd/vsftpd.conf
Рекомендуется в таком случае, перед тем как что-то дополнительно настраивать сохранить резервную копию конфигурационного файла. Чтение документации позволит настроить сервер «под себя» с наименьшим расходом времени, нервов, да и мало ли. Там описано назначение множества параметров, о которых я не буду расписывать здесь.
После этого можно запускать сервер, но есть ещё кое-что, что может помешать работе сервера, это файрвол, как и в большинстве случаев с конфигурацией серверов, следует разрешить подключение к вашему серверу.
Правила в iptables
Открываем конфигурационный файл iptables
:
/etc/sysconfig/iptables
Добавляем правила для ftp сервера:
Iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT
Не забываем, чтобы правила вступили в силу, iptables следует перезапустить.
# service iptables restart
Запуск vsftpd
# service vsftpd start
В качестве заключения хотелось бы отметить тот факт, что vsftpd не смотря на простоту его установки, он является довольно мощным сервером с достаточным количеством плюшек и полезностей. Среди них я бы отметил наиболее актуальные фичи, такие как виртуальные пользователи, индивидуальные настройки, лимиты, отдельные настройки для отдельных IP адресов, и многое другое.
Пример простой конфигурации сервера
Правим файл конфигурации:
# vi /etc/vsftpd/vsftpd.conf
Запрет выхода пользователя из домашней дирректории
Chroot_local_user=YES
Запрещаем анонимный вход на сервер
Anonymous_enable=NO
Создание пользователей FTP
Добавляем пользователя
# useradd ftpuser
Задаем пароль для созданного пользователя
# passwd ftpuser
Дарее правим файл /etc/passwd
Находим строку пользователя ftpuser:
Ftpuser:x:513:513::/home/ftpuser:/bin/bash
/home/ftp
— домашний каталог пользователя;
/sbin/nologin
— запрет на доступ пользователя к системе;
Для удобства использования можно создать группу к примеру ftpusers, затем задать соотвествующие права на папку /home/ftp
Одни из популярных программ для подключения к FTP-серверу это FileZilla или Total Commander
(см. ). Так же на нашем сайте есть пост о том, можно использовать между двумя серверами Linux.
Настраивается подключение так же как и в других случаях, в настройках подключения указываем адрес сервера, имя пользователя ftpuser, пароль.
Корневую дирректорию, можно не указывать, т.к. по умолчанию ею будет /home/ftp.
FTP сервер vsftpd (Very Secure FTP daemon) является одним из надежнейших и простых в настройке ftp серверов. Это оптимальный выбор для большинства пользователей, которым нужен ftp сервер.
Установка vsftpd
Под root -ом, наберите в консоли:
# yum install vsftpd
Этот пакет входит в стандартный репозитарий CentOS, поэтому проблем с установкой возикнуть не должно.
Добавим запуск сервера при старте системы:
# chkconfig vsftpd on
Для интереса проверим теперь уровни запуска:
# chkconfig --list vsftpd
получаем:
Vsftpd 0:выкл 1:выкл 2:вкл 3:вкл 4:вкл 5:вкл 6:выкл
Service vsftpd start
Внимание . В настройках файрвола вы должны разрешить подключения к своему серверу. Например через текстовую утилиту настройки:
System-config-securitylevel
Для CentOS 6 и 7:
System-config-firewall-tui
Настройка vsftpd
Все настройки сервера находятся в файле /etc/vsftpd/vsftpd.conf . Ваш сервер и при установке по-умолчанию будет работать, но вы можете провести дополнительную настройку "под себя".
Параметры | Параметр по умолчанию | Пояснение |
allow_anon_ssl | NO | Значение YES позволяет анонимным пользователям подключаться через SSL-соединение. |
anon_mkdir_write_enable | NO | Значение YES позволяет анонимным пользователям при определённых условиях создавать каталоги. Чтобы они могли это делать, должен быть включен параметр write_enable и анонимный пользователь должен иметь права на запись для родительского каталога. |
anon_other_write_enable | NO | Значение YES позволяет анонимным пользователям выполнять не только операции закачки файлов и создания каталогов, но и операции удаления и переименования. |
anon_upload_enable | NO | Значение YES позволяет анонимным пользователям осуществлять закачку файлов на сервер при определённых условиях: должен быть включен параметр write_enable и анонимные пользователи должны иметь права на запись в каталог закачки. Этот параметр также должен быть включен для того, чтобы виртуальные пользователи могли закачивать файлы так как по умолчанию виртуальные пользователи считаются анонимными./td> |
anon_world_readable_only | YES | Значение YES говорит, что анонимные пользователи могут скачивать только файлы, доступные на чтение всем. Это такие файлы, владельцем которых является пользователь ftp, что особенно касается закаченных файлов. |
anonymous_enable | YES | Значение YES разрешает подключаться к серверу анонимным пользователям с именами ftp и anonymous. |
ascii_download_enable | NO | Значение YES позволяет выбрать для скачивания файлов режим ASCII |
ascii_upload_enable | NO | Значение YES позволяет выбрать для закачивания файлов режим ASCII |
async_abor_enable | NO | Значение YES включает возможность использования специальной команды FTP, известной как "async ABOR". Не все клиенты поддерживают эту команду, к тому же, её неудобно управлять. Но к сожалению, некоторые FTP-клиенты будут "зависать" при отмене передачи файлов, если данная команда будет недоступна, так что возможно вы захотите включить её. |
background | YES | Значение YES включае выполнение vsftpd в фоновом режиме. |
check_shell | YES | Внимание! Данная опция работает только для vsftpd, собранного без PAM!. Если NO, то vsftpd не проверяет наличие shell локального пользователя в /etc/shells. Обычно же, если shell пользователя не найден в /etc/shells, то в доступе по FTP этому пользователю будет отказано! |
chmod_enable | YES | Значение YES позволяет локальным пользователям использовать команду SITE CHMOD. Анонимным пользователи НИКОГДА не разрешается использовать эту команду! |
chown_uploads | NO | Значение YES приводит к тому, что для всех файлов, которые закачивают анонимные пользователи, владелец будет изменён на пользователя, указанного в параметре chown_user-name. Это полезно для административных целей и возможно из соображений безопасности. |
chroot_list_enable | NO | Значение YES позволяет задать список локальных пользователей, для которых после входа будет выполнен chroot() в их домашний каталог. Есть параметр chroot_local_user установлен в YES, то всё работает с точностью до наоборот: для локальных пользователей в предоставляемом списке НЕ БУДЕТ выполняться chroot(). По умолчанию, список пользователей находится в файле /etc/vsftpd/chroot_list, однако вы можете указать другое имя файла с помощью параметра chroot_list_file |
chroot_local_user | NO | Значение YES приводит к тому, что после входа, для локальных пользователей будет выполнен chroot() в их домашний каталог. Внимание ! Данный параметр может нанести ущерб безопасности, особенно в случае, когда пользователи могут закачивать файлы или имеют shell доступ. Включайте его только если понимаете, что делаете! |
connect_from_port_20 | NO | Значение YES позволяет использовать на сервере порт 20 (ftp-data) для передачи данных. По соображениям безопасности, некоторые клиенты могут требовать такого поведения от сервера. Наоборот, выключение данного параметра, позволяет запускать vsftpd с меньшими превилегиями. |
debug_ssl | NO | Значение YES приводит к протоколированию работы подключений по SSL. (Добавлено в 2.0.6) |
deny_email_enable | NO | Значение YES позволяет предоставить для анонимных пользователей список паролей в стиле E-mail адресов, для которых доступ будет запрещён. По умолчанию, список находится в файле /etc/vsftpd/banned_emails, но можно задать другой файл с помощью параметра banned_email_file. |
dirlist_enable | YES | Значение NO запрещает доступ на выполнение команд просмотра содержимого каталогов. |
dirmessage_enable | NO | Значение YES позволяет показывать сообщения пользователям, которые первый раз заходят в какой-либо каталог. По умолчанию, сообщения находятся в файлах.message, но можно указать другой файл с помощью параметра message_file. |
download_enable | YES | Значение NO запрещает выполнять скачивание файлов. |
dual_log_enable | NO | Значение YES включает параллельную генерацию двух журналов /var/log/xferlog и /var/log/vsftpd.log. Первый формируется в стиле wu-ftpd, второй в собственном формате vsftpd. |
force_dot_files | NO | Значение YES включает показ файлов и каталогов, имя которых начинается с точки. Исключения составляют имена "." и ".." |
force_anon_data_ssl | NO | Работает только если включен параметр ssl_enable. Значение YES принудительно переключает соединения всех анонимных пользователей в режим SSL при скачивании и закачивании файлов. |
force_anon_logins_ssl | NO | Работает только если включен параметр ssl_enable. Значение YES принудительно переключает соединения всех анонимных пользователей при отправке пароля. |
force_local_data_ssl | YES | Работает только если включен параметр ssl_enable. Значение YES принудительно переключает соединения всех НЕ-анонимных пользователей в режим SSL при скачивании и закачивании файлов. |
force_local_logins_ssl | YES | Работает только если включен параметр ssl_enable. Значение YES принудительно переключает соединения всех НЕ-анонимных пользователей в режим SSL при отправке пароля. |
guest_enable | NO | Значение YES говорит о том, что все анонимные соединения должны рассматриваться как "гостевые". Гостевой вход будет переназначен на пользователя, который задан параметром guest_username. |
hide_ids | NO | Значение YES приводит к тому, что при показе для всех файлов и каталогов, группа и владелец всегда будут "ftp". |
listen | YES | Значение YES приводит к запуску vsftpd в режиме "демона". Это означает, что vsftpd не может быть запущен из inetd. Вместо этого, vsftpd запускается напрямую один раз и далее сам будет обслуживать входящие соединения. |
listen_ipv6 | NO | Тоже что и для параметра listen, только vsftpd будет обслуживать IPv6, а не только IPv4. Этот параметр и параметр listen являются взаимоисключающими. |
local_enable | NO | Значение YES позволяет входить по FTP локальным пользователям (из /etc/passwd или авторизуемых через PAM). Данный параметр должен быть включен, если вы хотите организовать работу НЕ-анонимных пользователей, включая и виртуальных. |
lock_upload_files | YES | Значение YES включает блокировку на запись для всех закачиваемых файлов. Все скачиваемые файлы имеют разделяемую блокировку на чтение. Внимание! Перед тем как включить этот параметр помните, что злонамеренное чтение может привести к тому, что пользователи, закачивающие файлы не смогут их дозаписать. |
log_ftp_protocol | NO | Значение YES приводит к протоколированию всех запросов и ответов протокола FTP, а также в выключению параметра xferlog_std_format. |
ls_recurse_enable | NO | Значение YES включает использоваение "ls -R". Это создаёт значительный риск безопасности, потому что выполнение "ls -R" для каталога верхнего уровня, который содежит множество подкаталогов и файлов, может привести к очень большому потреблению ресурсов. |
mdtm_write | YES | Значение YES включает MDTM установку времени изменения файлов (полезно для проверки доступа) |
no_anon_password | NO | При установленом YES, vstpd не спрашивает пароля у анонимных пользователей. |
no_log_lock | NO | Значение YES говорит vsftpd не выполнять блокировку при записи в файлы журналов. Обычно данный параметр выключен. В Solaris в связке с файловой системой Veritas иногда появляется ошибка, выражающаяся в зависании при попытке установить блокировку на файлы журналов. |
one_process_model | NO | Для ядер 2.4 поддерживается другая модель безопасности: один процесс на одно соединение. Такая модель менее безопасна, но более производительна. Не включайте, если не понимаете что делаете и если вашему серверу не нужна поддержка огромного количества отдельных соединений. |
passwd_chroot_enable | NO | Значение YES совместно сchroot_local_user, включает chroot() отдельно для каждого пользователя, исходя из данных о его домашнем каталоге, взятых из /etc/passwd. При этом, значение "/./" в строке, задающей домашний каталог, означает отдельное местоположение в пути. |
pasv_addr_resolve | NO | Установите YES, если вы хотите использовать имя (вместо IP адреса) в pasv_addres |
pasv_enable | YES | Установите NO, если вы хотите запретить метод PASV в полученном соединении для приёма/передачи данных. |
pasv_promiscuous | NO | Установите YES если вы хотите запретить проверку безопасности, назначение которой убедиться, что соединение на приём/передачу данных осуществляется с того же IP-адреса, что и управляющее соединение. Включайте только если понимаете, что вы делаете! Такое необходимо только в некоторых случаях при организации безопасных туннелей или поддержке FXP. |
port_enable | YES | Установите NO, если вы хотите запретить метод PORT в полученном соединении для приёма/передачи данных. |
port_promiscuous | NO | Установите YES, если вы хотите запретить проверку безопастности PORT, назначение которой убедиться, что исходяще соединение подключено именно к клиенту. Включайте только если понимаете, что делаете! |
require_cert | NO | Значение YES требует от всех SSL клиентов наличия клиентского сертификата. Уменьшение подлинности, применимое к этому сертификату, управляется параметром validate_cert (добавлен в 2.0.6). |
run_as_launching_user | NO | Установите YES, если вы хотите запускать vsftpd от пользователя, который собственно и производит запуск. Обычно это нужно в тех случаях, когда доступ от пользователя root недоступен. СЕРЬЁЗНЕЙШЕЕ ЗАМЕЧАНИЕ! НЕ включайте этот параметр пока вы полностью не осознаете то, что вы делаете, так как использование этого параметра может создать серьёзную проблему с безопасностью. Особенно важно, чтобы vsftpd не мог использовать / в качестве корневого каталога, а также используйте chroot для ограничения доступа к файлам, когда включен данный параметр (даже если vsftpd запущен от root). Менее подходящим решением может быть использование deny_file с такими аргментами как {/*,*..*}, но надёжность такого решения не может сравниться с chroot, так что сильно на это не полагайтесь. При использовании этого параметра, вводятся ограничения на другие опции. Например не ждите, что будут работать опции требущие привелегий, такие как неанонимные входы, закачка файлов с изменением владельца, соединение по 20 порту и подключение по портам меньше, чем 1024, а также и другие подобные. |
secure_email_list_enable | NO | Установите YES, если вы хотите, чтобы для анонимных входов, в качестве паролей, использовался только указанный вами список E-mail адресов. Это полезно для некоторого ограничения доступа к содержимому сервера, без создания виртуальных пользователей. Анонимным пользователям будет отказано во входе, если пароль, который они указали не будет в списке, который находится в файл email_password_file. Формат файла: один пароль на строку без дополнительных пробелов. Местоположение файла по умолчанию: /etc/vsftpd/email_passwords |
session_support | NO | При значении YES, vsftpd будет пытаться вести сессии. При этом он будет пытаться обновлять wtmp и utmp. Если для авторизации используется PAM, то vsftpd также будет пытаться открывать pam_session при входе и закрывать его только при выходе пользователя. Если вам не нужно протоколирование сессий, вы можете запретить это, а также вы можете указать vsftpd запускать меньше процессов и/или с меньшими привелегиями. Модификация wtmp и utmp работает только, если vsftpd собран с поддержкой PAM. |
setproctitle_enable | NO | Если YES, то vsftpd будет пытаться показывать информацию о состояние сессий в списке процессов. Другими словами, показываемое имя процесса будет изменено, чтобы отражать состояние сессии vsftpd (idle, downloading и т.д.) Из соображений безопасности, возможно вам лучше оставить этот параметр выключенным. |
ssl_enable | NO | Если YES и vsftpd был собран с библиотекой openSSL, то vsftpd будет обслуживать безопасные соединения через SSL. Это относится как к управляющим соединениям, так и к соединениям передающим данные. Также необходимо, чтобы и клиент поддерживал SSL соединения. Используйте этот параметр с осторожностью, потому что vsftpd целиком полагается на библиотеку openSSL в плане безопаснотсти SSL соединений и не может гарантировать, что эта библиотека свободна от ошибок. |
ssl_request_cert | YES | Если YES, то vsftpd запрашивает (но не делает из этого необходимости) у клиента сертификат. Обычно, это не вызывает проблем, но IBM zOS считает иначе (добавлено в 2.0.7) |
ssl_sslv2 | NO | Применяется только если включен параметр ssl_enable. В случае YES допускаются соединения про протоколу SSL v2. Предпочтительными являются соединения по протоколу TLS V1. |
ssl_sslv3 | NO | Применяется только если включен параметр ssl_enable. В случае YES допускаются соединения про протоколу SSL v3. Предпочтительными являются соединения по протоколу TLS V1. |
ssl_tlsv1 | YES | Применяется только если включен параметр ssl_enable. В случае YES допускаются соединения про протоколу TLS V1. Предпочтительными являются соединения по протоколу TLS V1. |