-
Мар1
Быстрая настройка ProFTPD
Filed under: Без рубрики;В статье описывается быстрая настройка FTP сервера ProFTPD в нескольких различных конфигурациях.
FTP сервер ProFTPD вполне оправдывает его название. Этот демон довольно стабильный, может работать как «самостоятельно», так и в составе супер-сервера inted, поддерживает вируальные хосты, учетные записи и многое другое.
Плюс ко всему имеет конфиги в стиле Apache, что делает его настройку весьма удобной и понятной.
В данной статье мы вкратце рассмотрим установку proftpd, т.к. он имеется в портах и, следовательно, в установке нет ничего интересного.
Подробно остановимся на настройке.
Итак, первый шаг — Установка.
Как было написано выше, ставится сервер очень просто – из коллекции портов.
Пишем:
Листинг : Установка ProFTPd из портов
# cd /usr/ports/ftp/proftpd
# make
# make install
# make clean
На этом установка закончена.
Конфиг будет лежать как /usr/local/etc/proftpd.conf,
а скрипт как /usr/local/etc/rc.d/proftpd
Теперь переходим к настройке.
Сначала рассмотрим «скелет» конфига. Он будет содержать базовые настройки.
В дальнейшем этот конфиг можно дополнять в соотвествии с задачей.
Листинг : Заготовка конфига
# Тип сервера. standalone означает отедльный демон, а inetd – в составе супер-сервера
ServerType standalone
# Сообщение при подключении клиента.
ServerIdent on «FTP Server Ready.»
# Имя сервера
ServerName «My FTP Server»
# Контактная информация админа
ServerAdmin admin@myhost.ru
# Порт, на котором будет слушать сервер (21 — стандартный)
Port 21
# Маска прав доступа для новых (згружаемых) файлов.
# При этом реальные права доступа будут как (777 — mask), т.е. маска 022 будет
# устанавливать права 755.
# Можно указывать свою маску для каждого каталога.
Umask 022
# Настройки производительности
# Чем больше числа, тем больше клиентов одновременно сможет обслужить сервер, однако установка
# большого числа на слабом железе повышает вероятность DDoS атаки.
MaxInstances 30
MaxLoginAttempts 3
MaxClients 128
# «таймауты», по истечению которых сервер будет закрывать соединение
TimeoutLogin 120
TimeoutIdle 600
TimeoutNoTransfer 900
TimeoutStalled 300
# Показывать сообщения приветвия только после прохождения авторизации.
# Актуально для «закрытых» FTP-серверов в целях безопасности.
DeferWelcome on
# Секция, действия которой распространяются на все сервера, описанные в конфиге
<Global>
# Файл, сеодержащий сообщения привествия при подключении
DisplayLogin .welcome
# Разрешает перезапись файлов
AllowOverwrite on
</Global>
# Настройка ограничения по умолчанию
# Запрещаем всё и для всех =)
<Limit ALL>
DenyAll
</Limit>
Основа конфига готова.
В дальнейшем будем дописывать к нему необходимые нам настройки.
Простой публичный FTP сервер
Задача очень проста:
Необходимо настроить общедоступный «анонимный» FPT сервер, с которого пользователи смогут скачивать файлы без ввода логина и пароля.
Также необходимо позволить пользователям загружать файлы в папку с именем «incoming»
Предположим, что физически корневая папка расположена по адресу /usr/ftp.
Называется «конрневая папка», т.к. для пользователей она будет просто /
Всё, что находится в этой папке, будет доступно по FTP.
Папка для загрузки файлов раcположена непосредственно в корневой папке.
Листинг : Простой публичный FTP
# Опеределяет анонимный FTP сервер c корнем в /usr/ftp
<Anonymous /usr/ftp>
# Пользователь и группа от которых будет работать сервер
User ftp
Group ftp
# Алиас имени пользователя.
# По стандарту принято имя anonymous. Именно на него и ставим алиас.
UserAlias anonymous ftp
# Разрешить авторизацию только по алиасу
# это значит что
AuthAliasOnly on
# Отключаем требования валидного шелла пользователя
# позволяет «пускать» в систему юзером без доступа по SSH (nologin)
RequireValidShell off
# Скрывать файлы и папки пользователя root
HideUser root
# Права по умолчанию для сервера
# Разрешаем авторизацию, чтение файлов и перемещение по папкам
<Limit LOGIN READ DIRS>
AllowAll
</Limit>
# Права на папку incoming и все её вложенные папки
# Разрешаем запись
<Directory incoming/*>
<Limit WRITE>
AllowAll
</Limit>
<Directory>
</Anonymous>
Проверяем владельца корневой папки, он должен быть «ftp:ftp».
Теперь можно запускать сервер.
Доступ по логину / паролю
Задача состоит в следующем:
Дать полный доступ пользователю к его домашней папке с авторизацией по логину/паролю данного пользователя.
Конфиг в будет следующим:
Листинг : Авторизация по логину и паролю
# Объявляем анонимный сервер с корнем в домашем каталоге пользователя myuser
<Anonymous ~myuser>
# От кого будет работать демон
User myuser
Group myuser
# Установка владельца на новые файлы
UserOwner myuser
GroupOwner myuser
# Включаем запрос пароля
AnonRequirePassword on
# Скрываем файлы пользователя root
HideUser root
# Разрешаем все для нашего пользователя
<Limit ALL>
Order Allow, Deny
AllowUser myuser
</Limit>
</Anonymous>
Корректное создание анонимного пользователя FTP
Изначально во FreeBSD 7.2-RELEASE пользователя с именем ftp не существует. Мне он понадобился для организации также и анонимного доступа к ftp-серверу под управлением proftpd-1.3.2c.
Сперва создаем каталог для этого пользователя:
# mkdir /home/ftp
И заводим пользователя командой:
# pw useradd -n ftp -g nogroup -s /usr/sbin/nologin -с «access to ftp» -d /home/ftp
Где флаги обозначают:
-n ftp – указываем имя создаваемого пользователя
-g nogroup – указываем группу для создаваемого пользователя
-s /usr/sbin/nologin – указываем шелл (оболочку) для создаваемого пользователя
-с “access to ftp” – указываем комментарий к создаваемому пользователю
-d /home/ftp – указываем домашний каталог для создаваемого пользователя
С помощью команды vipw проверяем, правильно ли создался наш новый пользователь:
# vipw
ftp:*:1007:65333::0:0:access to ftp:/home/ftp:/usr/sbin/nologin
Если вы найдете примерно такую же строку, то новый пользователь ftp пользователь успешно создался. (Для выхода из редактора vi нужно набрать :q).
Осталось поменять права на домашнюю папку только что созданного пользователя:
# chown ftp:nogroup /home/ftp
Теперь все готово для работы анонимного пользователя с вашим ftp-сервером.
Для поддержки Windows-клиентов нужно приписать строку с кодировками:
LangEngine on
ClientCharset UTF-8
UseEncoding UTF8 CP1251