Freebsd как подключится к ftp. Протоколирование обращений Kftpd(8)
Writing /var/www/wiki.dieg/wikionline/darkfiredatawiki/cache/b/bed11d76eac5a315c581278cd87da6cf.xhtml failed
ftpd сервер
Существует множество очень функциональных ftp-серверов, однако для использования в «личных» целях, как правило, вполне достаточно возможностей входящей в состав FreeBSD программы ftpd сервер . Программа ftpd представляет собой достаточно простой ftp-сервер. В отличие от таких инструментов, как ProFTPD , Pure-FTPd и других, ftpd не имеет развитых средств конфигурирования, работы с правами доступа и т. д. Однако если вы не собираетесь строить публичный ftp-сервер, то его возможностей вам вполне хватит для организации «бытовых» функций, таких как обмен файлами между сервером и вашей рабочей машиной, например, для размещения HTML -страниц на веб-сервере или настройки простейшего резервирования.
Сервер ftpd, по умолчанию может обслуживать как активные, так и пассивные соединения (в том числе и расширенные), режим работы для конкретного сеанса определяется клиентом.
Как работает ftpd
Если пользователь имеет пустой пароль, либо его оболочка по умолчанию отсутствует в /etc/shells, либо его имя (или наименование группы, членом которой он является) указано в файле /etc/ftpusers, то соединение разрывается – такому пользователю запрещен доступ по ftp.
Когда имя пользователя или его группа указаны в файле /etc/ftpchroot, то разрешается ограниченный доступ – пользователь может работать только в пределах своего домашнего каталога.
В случае, когда в качестве имени указано ftp или anonymous, соединение рассматривается как анонимное.
Если же ни одно из приведенных выше условий не выполнено, то в случае указания правильного пароля пользователь получает ftp-доступ ко всей файловой системе согласно имеющимся у него правам.
Настройка ftpd
Настройка ftpd для FreeBSD (для Linux больших отличий быть не может):
Для включение ftpd нужно раскоментировать одну строку в inetd.conf и перезапустить inetd > ee /etc/inetd.conf ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l > /etc/rc.d/inetd restart
Некоторые настройки сервера, в том числе и касающиеся ограничения доступа, можно выполнить с помощью ключей командной строки. Если вы запускаете ftpd из inetd, добавьте нужные параметры в соответствующей строке файла inetd.conf (по умолчанию там записан только ключ l).
Для протоколирования даемон ftpd использует сообщения Использование syslog . > ee /etc/syslog.conf ftp.info /var/log/xferlog
В файле /etc/ftpusers находится список пользователей, которым запрещен доступ по FTP . По умолчанию он включает системные учетные записи, но в него можно добавить и определенных пользователей, которым будет запрещен доступ по FTP .
Анонимный доступ : Для анонимного FTP доступа на сервер, в системе FreeBSD необходимо создать пользователя ftp. Этот пользователь сможет входить на FTP сервер с именем пользователя ftp или anonymous, с любым паролем (существует соглашение об использовании почтового адреса пользователя в качестве пароля). FTP сервер выполнит chroot при входе пользователя anonymous для ограничения доступа только домашним каталогом пользователя ftp. У этого пользователя должна быть «легальная» оболочка (одна из указанных в /etc/shells). Также у него не может быть пустого пароля.
Существуют два текстовых файла, определяющих сообщение, отправляемое FTP клиентам. Содержимое файла /etc/ftpwelcome будет выведено пользователям перед приглашением на вход. После успешного входа будет выведено содержимое файла /etc/ftpmotd. Обратите внимание, что путь к этому файлу задается относительно домашнего каталога пользователя, так что анонимным пользователям будет отправляться ~ftp/etc/ftpmotd.
Ограниченный доступ : Вам может понадобиться ограничить доступ определенных пользователей без полного запрета использования FTP . Это можно сделать через файл /etc/ftpchroot. В нем находится список пользователей и групп, к которым применяется ограничение доступа. В том случае, если имя пользователя присутствует в файле /etc/ftpchroot, то соответствующий процесс запускается в chroot-окружении, ограничивая пользователю доступ только его домашним каталогом (или тем, который указан во втором поле файла ftpchroot). При необходимости организовать такую работу для большого числа пользователей (например, дать всем абонентам доступ для обновления своих домашних веб-страничек), в ftpchroot можно указать общую для них группу, предварив ее имя символом @. Во втором поле дополнительно может быть указан каталог, который следует использовать в качестве корневого для соответствующего пользователя или группы. Вот пример такого файла: vasya petya /var/db/petya @dialup
Теперь Вася и все пользователи группы dialup смогут работать только в пределах своих домашних каталогов, а для Пети в качестве рабочей будет определена указанная папка /var/db/petya. С помощью разделителя /./ можно указать каталог, отличающийся от корневого, который станет текущим:
Serg /home/serg/./public_html
В данном случае для пользователя serg доступ будет ограничен каталогом /home/serg, но в качестве текущего при входе на сервер установится /home/serg/public_html.
Главная > Программы
Настройка ftpd
Этот пост пишу потому, что в интернете не нашел нормальной статьи по настройке встроенного во FreeBSD ftp-сервера: кругом сплошные сслыки на “man ftpd”. Интак, мне необходимо поднять ftp с ограниченным доступом по логину/паролю к отдельным папкам для каждого пользователя. Для этих целей ftpd будет выше крыши.
1. В файл /etc/rc.conf добавляем строчки:
ftpd_enable=”YES”
ftpd_flags=”" # здесь прописываем нужные флаги. Их описание я привёл ниже.
Доступные флаги:
-D: запускать ftpd в режиме демона.
-a <адрес>: в режиме демона принимать соединения только на указанный IP-адрес.
-d: включить режим отладки (подробная информация о работе будет выдаваться серверу syslog как LOG_FTP).
-h: не выводить информацию о системе в сообщениях сервера.
-l: протоколировать все сессии (обычно используется/var/log/xferlog).
-A: разрешить только анонимный доступ.
-M: запретить анонимным пользователям создавать папки.
-m: разрешить анонимным пользователям модифицировать существующие файлы (если для этого достаточно системных прав).
-o, -O: разрешить только запись на сервер всем пользователям (-o) или только анонимному пользователю (-O). В частности, таким образом можно организовать сбор с удаленных серверов файлов резервных копий, чтение которых пользователями не предусмотрено.
-r: перевести сервер в режим "только для чтения". Любая модификация размещенных данных будет запрещена.
2. Создаем учётные записи пользователей (например, с помощью adduser), которым будут разрешен доступ к серверу, после чего убеждаемся в том, что их имена не упоминаются в файле /etc/ftpuser (пользователям, упомянутым в этом файле, доступ к ftp будет запрещён).
Для анонимного доступа к серверу необходимо создать учётную запись с именем “ftp”. Корневым каталогом и будет его домашняя папка.
3. Создаем файл /etc/ftpchroot и заполняем его по такому шаблону:
<имя пользователя> <путь к папке>
<@ имя группы> # это для того, чтобы все пользователи данной группы были ограничены одной папкой (можно не указывать).
test /home/test
@ wheel
4. Устанавливаем нужные права на папку /home/test (то, что мы хотим разрешить/запретить пользователю test).
5. При необходимости редактируем:
/etc/ftphosts – настройка виртуальных хостов
/etc/ftpwelcome – приветственное сообщение
/etc/ftpmotd – приветственное сообщение, выводимое при входе на сервер
6. Определяемся, как мы будем запускать сервер – через inetd, или же как standalone.
В первом случае в файле /etc/inetd.conf раскоментируем строчку
ftp stream tcp nowait root usr/liexec/ftpd ftpd -l
Во втором случае для запуска используем скрипт /etc/rc.d/ftpd:
Если его в системе нет (старые версии FreeBSD), создаём вручную:
#!/bin/sh
#
# $FreeBSD: src/etc/rc.d/ftpd,v 1.1 2006/01/21 18:08:15 yar Exp $
## PROVIDE: ftpd
# REQUIRE: LOGIN cleanvarname=”ftpd”
rcvar=`set_rcvar`
command=”/usr/libexec/${name}”
pidfile=”/var/run/${name}.pid”
start_precmd=ftpd_prestartftpd_prestart()
{
rc_flags=”-D ${rc_flags}”
return 0
}load_rc_config $name
run_rc_command “$1″
Вот и всё :) Заходим на свой сервер и радуемся жизни;)
Материал взят с сайта:
В помощь веб-серверу нужен FTP сервер, я долго смотрел на различные сервера.
Выбор мой остановился на Pure-FTPd, так как понятные и удобный конфигурационный файл, возможность задавать права доступа и директории в MySQL базе, безопасность.
Хотя каждый выбирает что нравится. И так мне нужна возможность изменять по ftp папку /usr/local/www/ и возможность загрузки файлов анонимно в публичную папку.
Обновляем дерево портов и переходим
cd /usr/ports/ftp/pure-ftpd
Далее установим с нужными нам параметрами make install clean
Выбираем необходимые параметры, описание параметров такие:
ANONDELETE - Разрешает анонимным пользователям удалять файлы
ANONRENAME - Разрешает анонимным пользователям переименовывать файлы
ANONRESUME - Разрешает анонимным пользователям возобновлять загрузку
DOCS - Документация
EXAMPLES - Примеры
LARGEFILE – Возможность загрузки файлов больше двух гигабайт
LDAP Support for users in LDAP directories
MYSQL - Пользователи в MySQL базе данных
PAM - PAM аутентификация
PERUSERLIMITS Per-user concurrency limits
PGSQL Пользователи в PostgreSQL базе данных
PRIVSEP - Разрешает разделять привилегии
SENDFILE - Системный вызов sendfile
THROTTLING – Разрешает устанавливать ограничение скорости
TLS - Поддержка TLS
UPLOADSCRIPT поддержка uploadscript демон
UTF8 – Поддержка кодировки UTF-8
VIRTUALCHROOT - Позволяет ограничить пользователя своим каталогом
Я не стал выбирать MySQL, так как это удобно когда надо часто менять привилегии, добавлять новых пользователей через удаленный интерфейс работы с MySQL, а мне это не нужно. Будем использовать встроенную в Pure-FTPd базу пользователей и привилегий.
Дожидаемся окончания установки. Файл конфигурации находится по адресу /usr/local/etc/pure-ftpd.conf (создаем свой или на основе pure-ftpd.conf.sample) Редактируем содержимое файла pure-ftpd.conf:
# Please don"t forget to have a look at documentation at http://www.pureftpd.org/documentation.shtml for a complete list of options.
# Chroot в домашних деректориях пользователей.
ChrootEveryone yes
# Если выбрано no в ChrootEveryone, то следующие группы не Chroot, остальные будут.
# TrustedGID 100
# Совместимость с кривыми клиентами
BrokenClientsCompatibility no
# Максимальное количество одновременно подключенных пользователей.
MaxClientsNumber 50
# Запускать в фоне.
Daemonize yes
# Максимальное количество пользователей с одно IP адреса.
MaxClientsPerIP 15
# Логировать команды клиентов. Для логирования ответов сервера продублировать строчку.
VerboseLog no
# Не показывать файлы начинающиеся с точки
DisplayDotFiles yes
# Только анонимный FTP. Ставим no, так как нужна авторизация.
AnonymousOnly no
# Запретить анонимный доступ. Мне нужен анонимный доступ, ставлю no.
NoAnonymous no
# Syslog параметры (auth, authpriv, daemon, ftp, security, user, local*). Для отключения лога ставим "none". Мне логи не нужны, так как SSD. По умолчанию ftp.
SyslogFacility none
# Показывать состояние куков. Display fortune cookies.
# FortunesFile /usr/share/fortune/zippy
# Не переводить IP адреса в имена хостов.
DontResolve yes
# Время простоя после которого разрывается соеденение.
MaxIdleTime 15
# Если используется несколько методов аутентификации, то они выполняются в последовательности как указаны в файле конфигурации. Если не верный пароль, то процесс останавливается.
# LDAP файл конфигурации.
# LDAPConfigFile /etc/pureftpd-ldap.conf
# MySQL файл конфигурации.
# MySQLConfigFile /usr/local/etc/pureftpd-mysql.conf
# Postgres файл конфигурации.
# PGSQLConfigFile /etc/pureftpd-pgsql.conf
# PureDB база данных пользователей. Её и буду использовать. Указываем адрес к файлу
PureDB /usr/local/etc/pureftpd.pdb
# Путь к сокету pure-authd.
# ExtAuth /var/run/ftpd.sock
# Использовать PAM аутентификация.
# PAMAuthentication yes
# Использовать Unix аутентификация
# UnixAuthentication yes
# "Предел рекурсии команды ls. Перовое количество файлов, второе количество подкаталогов.
LimitRecursion 10000 8
# Можно ли создавать директории анонимным пользователям.
AnonymousCanCreateDirs no
# Если система загружена больше чем указано, анонимные пользователи не могут скачивать.
MaxLoad 4
# Диапазон портов для пассивного соединения.
# PassivePortRange 30000 30100
# Принудительный IP адрес в PASV/EPSV/SPSV ответах для NAT.
# ForcePassiveIP 192.168.0.1
# Соотношение загруженного к скаченного для анонимных пользователей.
# AnonymousRatio 1 10
# Соотношение загруженного к скаченного для всех пользователей.
# UserRatio 1 10
# Запрещает скачивать файлы с именем пользователя ftp. Файлы должны одобрены администратором. Мне это не нужно.
AntiWarez no
# IP Адрес и порт сервера. По умолчанию все IP адреса и 21 порт.
# Bind 127.0.0.1,21
# Максимальная скорость для анонимных пользователей (KB/s).
# AnonymousBandwidth 8
# Максимальная скорость для всех пользователей включая анонимных (KB/s).
# UserBandwidth 8
# Маска для создания файлов.
Теперь создадим пользователя для доступа к папке веб-сервера.
Создадим пользователя ftp во FreeBSD, его домашняя директория будет директорией анонимного ftp. У меня уже была группа ftp во FreeBSD, поэтому создадим только пользователя и его директорию.
pw useradd ftp -g ftp -d /usr/local/ftp
mkdir /usr/local/ftp
Все пользователь ftp равняется пользователю anonymous в Pure-FTPd.
Создадим пользователя web во Pure-FTPd который будет ходить с правами пользователя www с указанным паролем. После добавления всех пользователей выполнить команду pure-pw mkdb что бы создать файл pureftpd.pdb
pure-pw useradd web -u www -d /usr/local/www
# Password:
# Enter it again:
pure-pw mkdb
Добавим Pure-FTPd в загрузку (/etc/rc.conf)
pureftpd_enable="YES"
Запустим Pure-FTPd
/usr/local/etc/rc.d/pure-ftpd start
Проверим наш FTP сервер на предмет правильности выставления привилегий, возможность работы анонимным пользователями, смотрим лог файл на предмет ошибок.
Если что-то не работает разбираемся возможно где-то не так выставлены права доступа к папками, я с этим немного столкнулся.
Протокол передачи файлов (FTP) - это TCP протокол для передачи файлов между компьютерами. В прошлом он использовался также для загрузки [файлов в интернете], но, поскольку этот метод не использует шифрование, пользовательские данные как и содержимое файлов передаются в открытую и легко перехватываются. Поэтому, если вы здесь ищете способ безопасно передавать и загружать файлы, лучше обратитесь к статье по OpenSSH в разделе Удаленное администрирование .
FTP работает на основе модели клиент/сервер. Серверный компонент называется сервисом FTP . Он постоянно слушает FTP запросы от удаленных клиентов. При получении запроса он управляет входом и установкой соединения. На протяжении сессии он выполняет любые команды, переданные FTP клиентом.
vsftpd - установка FTP сервера
vsftpd - это сервис FTP , доступный в Ubuntu. Его легко устанавливать, настраивать и поддерживать. Для установки vsftpd вы можете выполнить следующую команду:
Sudo apt install vsftpd
Для запуска сервиса требуется добавить его в автозагрузку. Начиная с версии Ubuntu 15.04 используется Systemd , поэтому для добавления vsftpd в автозапуск надо ввести следующие команды:
Sudo systemctl start vsftpd sudo systemctl enable vsftpd
В Ubuntu Server может использоваться файервол ufw . Тогда вам потребуется разрешить порты 20 и 21
Sudo ufw allow 20/tcp sudo ufw allow 21/tcp
Конфигурационный файл содержит много параметров настройки. Информация по каждому параметру доступна в этом же файле. В качестве альтернативы вы можете посмотреть системное руководство по команде
Man 5 vsftpd.conf
для уточнения деталей по каждому параметру.
Доступ к FTP серверу может быть организован двумя способами:
В анонимном режиме удаленный клиент может получить доступ к FTP серверу, используя учетную запись пользователя по умолчанию с именем «anonymous» или «ftp» и передав адрес email в качестве пароля. В авторизованном режиме пользователь должен иметь учетное имя и пароль. Этот последний вариант крайне небезопасный и не должен использоваться за исключением специальных обстоятельств. Если вы хотите передавать файлы безопасно, смотрите SFTP в разделе по OpenSSH серверу. Пользовательский доступ к каталогам и файлам FTP сервера зависит от прав доступа пользователя, указанного при входе. Как правило, сервис FTP скрывает корневой каталог FTP сервера, подменяя его на домашний каталог FTP . Это скрывает корень файловой системы от удаленных сессий.
Настройка анонимного доступа по FTP
Настройка vsftpd по умолчанию не разрешает анонимную загрузку. Если вы хотите разрешить анонимную загрузку, измените в /etc/vsftpd.conf следующее:
Anonymous_enable=YES
В процессе установки создается пользователь ftp с домашним каталогом /srv/ftp. Это каталог по умолчанию для FTP .
Если вы желаете поменять его расположение, например, на /srv/files/ftp, просто создайте новый каталог и измените домашний каталог пользователя ftp:
Sudo mkdir /srv/files/ftp sudo usermod -d /srv/files/ftp ftp
После изменений перезапустите vsftpd:
Под конец скопируйте все файлы и каталоги, которые вы хотите сделать доступными для анонимного FTP в /srv/files/ftp (или /srv/ftp, если вы хотите оставить настройки по умолчанию).
По умолчанию анонимный пользователь не имеет возможности загружать файлы на FTP сервер. Для изменения этой настройки уберите комментарий на следующей строке и перезапустите vsftpd:
Anon_upload_enable=YES
Разрешение анонимному пользователю загружать файлы может оказаться серьезной угрозой безопасности. Лучше не разрешать анонимную загрузку файлов на сервера с прямым доступом из интернета.
Настройка авторизованного доступа по FTP
Прежде чем вносить какие-либо изменения в конфигурационный файл, рекомендуется скопировать образец для возможности отката изменений без переустановки пакета sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
Для аутентификации локальных пользователей надо раскоментировать строчку
Local_enable=YES
По умолчанию vsftpd настроен на аутентификацию системных пользователей с возможностью получать файлы. Если вы хотите пользователям разрешить загружать файлы, измените в /etc/vsftpd.conf:
Write_enable=YES
после чего перезагрузите vsftpd:
Sudo service vsftpd restart
Теперь при входе системных пользователей по FTP они будут попадать в свои домашние каталоги, где они смогут скачивать, загружать [файлы], создавать каталоги и т.д.
Защита FTP
Ограничение пользователей
В /etc/vsftpd.conf существуют опции, помогающие сделать vsftpd более безопасным. Например, данная опция позволяет поместить локального пользователя в chroot() «заточение», выше которого (по дереву каталогов) он не сможет подняться.
Chroot_local_user=YES
Вы также можете определить список пользователей, имеющих доступ только в домашний каталог:
Chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list
После снятия комментариев с этих опций, создайте /etc/vsftpd.chroot_list, содержащий список пользователей по одному на строку. Затем перезапустите vsftpd:
Sudo service vsftpd restart
Если вы сняли комментарии со всех трёх строчек, то пользователи из списка не будут ограничены своими домашними каталогами, в отличии от пользователей не вошедших в список
Аналогично файл /etc/ftpusers содержит список пользователей, которым запрещен доступ по FTP . По умолчанию он включает root, daemon, nobody и т.п. Для запрета доступа по FTP для дополнительных пользователей, просто добавьте их в этот список.
Если при попытке подключения вы видите ошибку :
Ответ: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
то это значит, что локальный пользователь имеет доступ на запись в домашний каталог, чего быть не должно. Способов решения этой ошибки несколько:
Запретить запись в домашний каталог локальному пользователю (подходит не всем и не всегда)
Прописать /home каталогом, куда будут попадать локальные пользователи после входа на FTP сервер. Тогда каждый из них будет иметь возможность писать только в свой домашний каталог
Шифрование
FTP может быть зашифрованным при использовании FTPS . В отличие от SFTP , FTPS - это FTP поверх SSL . SFTP - это сессия, подобная FTP , по зашифрованному SSH соединению. Основное отличие заключается в том, что пользователи SFTP должны иметь учетную запись с собственным окружением (shell account) вместо оболочки nologin. Предоставление всем пользователям доступа к оболочке может оказаться не лучшим решением для некоторых систем, таких как web сервер общего доступа. Однако есть возможность ограничить такие учетные записи только SFTP и запретить взаимодействие с оболочкой. Смотрите раздел по OpenSSH для дополнительной информации.
Для настройки FTPS, добавьте в конец файла /etc/vsftpd.conf следующее:
Ssl_enable=Yes
Также обратите внимание на опции сертификата и ключа:
Rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
По умолчанию эти опции установлены в значения, предоставленные пакетом ssl-cert . Для рабочей среды они должны быть заменены на сертификат и ключ, созданные для определенного компьютера. Для дополнительной информации смотрите раздел Сертификаты .
Теперь перегрузите vsftpd и неанонимные пользователи будут использовать FTPS:
Sudo service restart vsftpd
Чтобы позволить пользователям с оболочкой /usr/sbin/nologin получить доступ к FTP , но не предоставлять shell доступ, отредактируйте /etc/shells, добавив к оболочке nologin:
# /etc/shells: valid login shells /bin/csh /bin/sh /usr/bin/es /usr/bin/ksh /bin/ksh /usr/bin/rc /usr/bin/tcsh /bin/tcsh /usr/bin/esh /bin/dash /bin/bash /bin/rbash /usr/bin/screen /usr/sbin/nologin
Это необходимо, поскольку по умолчанию vsftpd использует авторизацию PAM, а файл настроек /etc/pam.d/vsftpd содержит:
Auth required pam_shells.so
Модуль PAM shells ограничивает доступ к оболочкам, перечисленным в файле /etc/shells.
Наиболее популярные клиенты FTP могут быть настроены на использование FTPS. FTP клиент командной строки lftp также имеет возможность использовать FTPS.