Многие администраторы, прежде чем установить новый-свежий продукт,
проверяют его. В случае proftpd, либо должен быть остановлен предыдущий
демон ftpd, либо следует использовать директивы ниже, чтобы демон слушал, например порт 8041:
Port 0
Bind 159.93.17.121
SocketBindTight on
Port 8041
Port 0 - отказ от прослушивания 21'ого порта в сумме с нижними директивами
Bind 159.93.17.121 - привязка на конкретный ip
SocketBindTight on - позволяет отказаться от открытия by-default порта 21
Port 8041 - командный порт, который будет слушать proftpd
В ProFTPD реализована технология chroot не в полном смысле этого понятия, а лишь частично, те позволяет нам в качестве корневой директории сделать директорию реального пользователя или ftp/anonymous.
Данная технология позволяет запускать демон proftpd под указанным в настройках,
директивы User и Group, пользователем с его uid/gid.
А также изменять "корневую директорию" с помощью директив:
DefaultRoot - в конфигурации server config, ,
<Anonymous root-directory> - в конфигурации server config,,
Так к примеру, мы можем за"chroot"ить всех локальных пользователей указав в
конфигурации серверной части:
Если у вас возникли проблемы с авторизацией anonymous или локальных
пользователей, с учетом директив User и Group, проверьте
чтобы эти пользователи не присутствовали в ftpusers или проверьте
правильность вашей конфигурации PAM в соответствии с рекомендациями
из дистрибутива ProFTPD или документацией PAM.
Если ProFTPD собран с поддержкой pam, для проверки, отключите его в
конфигурации:
AuthPAM off
AuthPAMAuthoritative off
достаточно одной директивы AuthPAM off. Можно переопределить ресурс в
pam конфигурации с помощью директивы AuthPAMConfig.
Примечание: Читайте внимательно документацию, или посмотрите
чем инициализируется pamconfig в proftpd-sources/modules/mod_pam.c:
static char * pamconfig = "ftp";
Значит авторизационная конфигурация PAM для ProFTPD в /etc/pam.conf или /etc/pam.d - будет именоваться ftp by default, а изменить ее название можно с помощью AuthPAMConfig.
Проверку ftpusers можно отключить директивой UseFtpUsers off.
Дополнительно для безпарольного входа под anonymous или ftp,
воспользуйтесь директивами:
AnonRequirePassword off (значение по-умолчанию)
RequireValidShell off
UserAlias anonymous ftp
Иногда может вылезти несоответствие указанных внутри <Anonymous ~ftp>
значений User и Group и реальных uid/gid директории ~ftp и
ее содержимого.
Кроме того не забудьте проверить не установлены ли в конфигурациях server и global:
<Limit LOGIN>
DenyAll
<Limit>
Если установлены, то в директиве <Anonymous> добавьте:
<Limit LOGIN>
Order Allow,Deny
Allow from ip-address1,...
Deny from all
<Limit>
Чтобы предотвратить попытку положить или взломать демон proftpd командой
"ls */../*/../*/...", включите директиву фильтра DenyFilter \*.*/.
Можно использовать эту директиву для дополнительной фильтрации, кроме того
имеется директива PathDenyFilter "(^|/)[-.]"
Например:
Если пользователи жалуются на длительную авторизацию - вход по ftp,
воспользуйтесь директивой UseReverseDNS off, дополнительно к ней
можно использовать директиву IdentLookups off.
Например:
Лучший вариант, собрать proftpd из портов системы:
cd /usr/ports/ftp/proftpd
make
make install
rm -rf work
Если мы хотим собрать proftpd с нужными нам модулями, необходимо посмотреть
Makefile и при необходимости, поправить под свои нужды.
Пример сборки без поддержки PAM:
cd /usr/ports/ftp/proftpd
make WITHOUT_PAM=yes
make install
rm -rf work
Далее отредактировать файл конфигурации
/usr/local/etc/proftpd.conf под
свои нужды.
Допустим у нас имеется пользователь ftp с uid=ftp и gid=operator, а
запустить демон proftpd мы хотим с USER nobody и Group nogroup,
тогда, возможно придется сделать в секции Anonymous USER ftp и Group operator (по-умолчанию во FreeBSD пользователь ftp имеет uid=ftp, gid=operator).
Соответственно удалить из файла /etc/ftpusers пользователей с именами nobody, ftp. Или, как вариант изменить uid/gid пользователя ftp на uid=ftp и gid=ftp, не забыв создать группу ftp и поменять владельца группы в директории ~ftp.
Пример рабочей конфигурации ProFTPD 1.2.4 в FreeBSD:
Примечание: демон стартует как nobody на порту 8041, в секции Anonymous ~ftp, uid=ftp, gid=operator, домашняя директория пользователей является корнем DefaultRoot ~.
Проверка правильности синтаксиса конфигурации и работы ProFTPD.
Для проверки правильности файла конфигурации, необходимо запустить демон со следующими ключами:
./proftpd -t
Для определения с поддержкой каких модулей собран наш вариант proftpd, необходимо запустить демон с ключами:
./proftpd -l
Для запуска демона в тестовом режиме, с выдачей диагностики на экран:
./proftpd -n -d 9 -c /path/proftpd.conf
где -n - указывает что мы запускаем демон в режиме foreground
-d 9 - указывает что в отладочном режиме с максимальным уровнем отладки 9.
-c /path/proftpd.conf - указывает заданный файл конфигурации.
Примечание: Не наступите на те же грабли что и я, проверка
MaxClients, MaxClientsPerHost невозможна при запуске в отладочном режиме.
У меня Sun'овский кластер построен на NIS+. После установки ProFTPD,
все прекрасно работает с chroot для anonymous, но не проходит авторизация
пользователей через NIS+.
У меня старый-боевой Solaris 2.5.1 без PAM, в настройках общей части
сервера он выполнял chroot:
...
User nobody
Group nogroup
...
Видимо все упиралось в доступ к NIS+ базам и вылечилось добавлением и изменением базовой конфигурации сервера:
...
#PAM disable
PersistentPasswd off
...
User root
Group other
...