Установка простейших служб FTP.

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.

Проведена. По хорошему ещё осталось поднять FTP-сервис доступа к файлам, чем мы сегодня и займёмся.

Встроенный FTP сервер идет в составе суперсервера inetd, к которому мы обязательно ещё вернёмся. Итак, элементарная инструкция по установке и настройке FTPD-службы.

Создаём пользователя для FTPD

FTPD использует учетные записи, созданные в ОС. Поэтому просто создадим для сервиса FTPD отдельную учётную запись. Как это делается?

# pw useradd –n -m –h 0

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

# pw useradd -n ftpuser -m -h 0

password: ftppass

Когда я заморочился с FTP сервером, то у меня стояла задача доступа к логам одного сервиса по протоколу ftp (для анализа логов сторонней программой на другой ОС). Так что можно сразу указать домашнюю директорию для пользователя. К примеру, нам надо получить доступ только на /var/log/squid/. Команда:

# pw useradd –n ftpuser -d /var/log/squid –h 0

Ограничиваем пользователя

В файле /etc/ftpchroot (если его нет, создаём) добавить строку с именем пользователя и путь к директории вида:

ftpuser /var/log/squid

файл /etc/ftpchroot нужен для того, чтобы пользователь, который зашел на сервер не смог видеть другие директории. Мы меняем корневую директорию. Необходимо добавить права доступа на директорию, куда будет осуществляться доступ (если их конечно не хватает). Команда:

# chmod 755 –R /var/log/squid

Подготавливаем сервис FTPD к старту

В файле /etc/inetd.conf найти строку

#ftp stream tcp nowait root /usr/libexec/ftpd ftpd –l

Раскомментировать ее (убрать #).

В файл /etc/rc.conf добавить строку

inetd_enable=”YES”

В файл /etc/ftpusers добавить существующие учетные записи, которые не должны иметь доступ на FTP сервер.

Запускаем FTPD на FreeBSD

Теперь надо стартануть сервер. Если он стартанут, то надо его перечитать.

# /etc/rc.d/inetd start

Проверка встроенного FTPD сервера

подключимся к себе посредством утилиты ftp, попробуем авторизоваться!


В помощь веб-серверу нужен 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 # Маска для создания файлов. :. Что бы получить umask, нужно из 777 вычесть права доступа которые хотим установить. Umask 237:027 соответствует правам: 540 для файлов и 750 для директории. Umask 237:027 # Минимальный UID с которого пользователь будет пущен MinUID 100 # Разрешает FXP для пользователей. Передача файла с ftp на ftp на прямую. AllowUserFXP no # Разрешает FXP для анонимных пользователей. AllowAnonymousFXP no # Пользователи не могут удалять и изменять файлы начинающиеся с точки. ProhibitDotFilesWrite no # Запретить чтение файлов начинающихся с точки. ProhibitDotFilesRead no # Некогда не перезаписывать загружаемые файлы с таким же именем, создавать файл с именем: file.1, file.2, file.3 и так далее. AutoRename no # Запретить загрузку файлов анонимными пользователями. Мне нужна такая возможность, поэтому no. AnonymousCantUpload no # Только подключенные к этому IP адресу могут быть не анонимны. Мне доступ для администрирование все локальной сети не нужен. Поэтому прописываю IP адрес сетевой карты которая смотрит в локальную сеть. TrustedIP 192.168.0.1 # Добавлять PID в каждую строчку лога. #LogPID yes # Создание дополнительных логов в различных форматах, в зависимости какой нужен: apache, лог статистика, в формате W3C. # AltLog clf:/var/log/pureftpd.log # AltLog stats:/var/log/pureftpd.log # AltLog w3c:/var/log/pureftpd.log # Отключить команду chmod для пользователей #NoChmod yes # Позволять пользователя загружать, но не удалять файлы. #KeepAllFiles yes # Автоматически создавать домашнюю директорию пользователя. #CreateHomeDir yes # Квота для каждого пользователя. Первое количество файлов, второе размер в мегабайтах. #Quota 1000:10 # Путь к PID файлу, по умолчанию /var/run/pure-ftpd.pid #PIDFile /var/run/pure-ftpd.pid # Если pure-ftpd скомпилирован с поддержкой pure-uploadscript, то эта опция будет записывать информацию о загруженных файлах в /var/run/pure-ftpd.upload.pipe файл. #CallUploadScript yes # Если диск заполнен больше чем указанное знамение, анонимные пользователи не могут загружать файлы. MaxDiskUsage 75 # Запретить возможность переименовывания файлов пользователям. #NoRename yes # Если у нас хостинг используем эту опцию. Необходимо при совместной работе, оставлю все же загрузка для анонимных пользователей есть. CustomerProof yes # Работает если pure-ftpd скомпилирован с --with-peruserlimits. Первое максимальное количество сессий на пользователя, второе количество сессий на всех пользователей. # PerUserLimits 3:20 # Если файлы с одинаковыми имена, то файл будет загружаться во временную папку и как только загрузится заменит старый файл. Актуально для веб-сервера когда загружаются больше php скрипты или очень маленькая скорость загрузки. Я особо полезности не вижу. # NoTruncate yes # Доступны следующие значения: # 0: SSL/TLS отключено (по умолчанию). # 1: Использовать шифрованные и обычные подключения. # 2: Использовать только SSL/TLS, включая анонимных пользователей # Используйте только если: pure-ftpd скомпилирован с поддержкой SSL/TLS (--with-tls), существует валидный сертификат, зашли совместимые клиенты. # TLS 1 # Список шифрования которое будет принимать SSL/TLS подключения # TLSCipherSuite HIGH:MEDIUM:+TLSv1:!SSLv2:+SSLv3 # По умолчанию используется обе версии протокола. Использовать только IP четвертой версии или шестой версии. IPV4Only yes # IPV6Only yes # Работает если pure-ftpd скомпилирован с опцией --with-rfc2640. Определяет кодировку для клиентов которые не используют UTF-8 # FileSystemCharset big5 # ClientCharset big5
Теперь создадим пользователя для доступа к папке веб-сервера.
Создадим пользователя 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 сервер на предмет правильности выставления привилегий, возможность работы анонимным пользователями, смотрим лог файл на предмет ошибок.
Если что-то не работает разбираемся возможно где-то не так выставлены права доступа к папками, я с этим немного столкнулся.