Настраиваем штатный ftpd для FreeBSD 9.0 RELEASE.
Добавляем группу и пользователя ftp. Открываем файл /etc/group — добавляем группу ftp.
ftp:*:21:
Файл /etc/master.passwd — добавляем пользователя ftp.
ftp:*:21:21::0:0:FTPD pseudo-user:/wwwroot/pub:/usr/sbin/nologin
Обновляем базу пользователей вручную.
pwd_mkdb -p /etc/master.passwd
Создаем домашний каталог пользователя для анонимного ftp доступа если необходимо.
mkdir /wwwroot mkdir /wwwroot/ftp
Меняем владельца и права.
chown ftp:ftp /wwwroot/ftp chmod 555 /wwwroot/ftp
Добавляем в /etc/rc.conf следующие строчки для запуска в режиме демона.
ftpd_enable="YES" ftpd_flags="-l"
Запускаем.
/etc/rc.d/ftpd start
проверяем что получилось.
# ps -x | grep ftpd 22255 ?? Is 0:00.00 /usr/libexec/ftpd -D -l 22371 0 S+ 0:00.00 grep ftpd
Второй способ — через inetd — по факту не используется. В /etc/rc.conf добавляем
inetd_enable="YES"
и раскоментируем строчку в файле /etc/inetd.conf
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
и даем команду
/etc/rc.d/inetd start
Результат — мы настроили анонимный FTP сервер, анонимный пользователь может только читать, логи подключений пишутся в файл по умолчанию /var/log/xferlog.
Дополнительные настройки.
/etc/ftpwelcome – приветственное сообщение выводимое сервером до ввода логина и пароля.
/etc/ftpmotd – приветственное сообщение, выводимое при удачном входе на сервер.
/etc/ftphosts – настройка виртуальных хостов.
/etc/ftpchroot — настройка chroot для пользователей. Например для пользователя test делать chroot в каталог /wwwroot/test/html, для всех пользователей группы ftptest — chroot в каталог /wwwroot/test, для пользователей группы www — chroot в свои домашние каталоги.
test /wwwroot/test/html @ftptest /wwwroot/test @www
Незабываем про настройку файервола если используется, дополнительно можно воспользоватся настройками в файле /etc/hosts.allow для разрешения/запрещения коннектов с тех или иных адресов.
ftpd : localhost : allow ftpd : 192.168.4.23 : deny ftpd : .nice.guy.example.com : allow ftpd : .evil.cracker.example.com : deny ftpd : ALL : allow
Но помним — проблемы с настройкой пассивного режима работы — актуально если необходимо обслуживать соединения из-за NAT.
Дополнительные ключи ftpd.
-4 Когда указана опция -D, принимать соединения через сокет AF_INET.
-6 Когда указана опция -D, принимать соединения через сокет AF_INET6.
-8 Разрешить прозрачный режим UTF-8. Клиенты, совместимые со стандартом RFC 2640 оповещаются об использовании сервером символов в кодировке UTF-8. Эта опция не включает любые перекодировки имен файлов сервера; это работает для имен файлов сервера, закодированных в UTF-8. При выкачке (upload) файлов на FTP включается для клиентов, совместимых с RFC 2640, перекодировка из локальной кодировки клиента в UTF-8. FTP команды и собственные сообщения ftpd в любом случае кодируются в ASCII, который является подмножеством UTF-8. Следовательно, здесь не нужна перекодировка на сервере.
-A Разрешается только анонимный доступ к ftp.
-a Когда указана опция -D, соединения принимаются только от указанного адреса.
-D Когда указана эта опция, ftpd отсоединяется от консоли и становится демоном, принимающим соединения через порт FTP и порождающим (forking) дочерние процессы для поддержки запросов. Это обеспечивает меньшие траты ресурсов в сравнении с запуском ftpd через inetd(8) и полезно для применения на нагруженных серверах для уменьшения нагрузки.
-d Отладочная информация будет записываться в лог с изпользованием LOG_FTP.
-E Запретить команду EPSV. Это хорошо применять для серверов за файерволом.
-h Запрет вывода в сообщениях сервера информации, специфичной для хоста, такой как версия ПО сервера или имя хоста.
-l Каждая успешная и ошибочная ftp(1) сессия записывается через syslog LOG_FTP. Если эта опция указана дважды, то записыватся команды retrieve (get), store (put), append, delete, make directory, remove directory и операции rename вместе с именами файлов и аргументами. По умолчанию, syslogd(8) записывает эти сообщения в /var/log/xferlog.
-M Предотвращает создание анонимными (anonymous) пользователями директорий.
-m Разрешает анонимным пользователям перезаписывать или модифицировать существующие файлы, если это разрешено правами файловой системы. По умолчанию anonymous не может модифицировать существующие файлы; в частности, файлы для выгрузки на сервер (upload) должны создаваться с уникальными именами.
-O Переводит сервер а режим write-only только для anonymous. Команда RETR запрещена для anonymous, что предотвращает анонимные загрузки (downloads) с сервера. Не дает эффекта, если также указана опция -o.
-o Переводит сервер а режим write-only. Команда RETR запрещена для всех, что предотвращает загрузку информации с сервера.
-P Когда указана опция -D, принимает соединения на указанном порту, указанном как числовая величина или имя сервиса, вместо порта «ftp» по умолчанию.
-p Когда указана опция -D, записывает файл process ID в указанный файл вместо pid-файла по умолчанию /var/run/ftpd.pid.
-R Когда указана эта опция, ftpd возвращается к историческому поведению по отношения к проверкам безопасности операций пользователей и ограничениям по запросам PORT. В настоящий момент ftpd поддерживает только команды PORT, направленные на непривилегированные порты для удаленных пользователей хоста (которые нарушают спецификацию протокола FTP, однако закрывают некоторые дыры в безопасности).
-r Переводит сервер с режим read-only (только для чтения). Все команды, которые могут модифицировать файловую систему, запрещены.
-S Когда указана эта опция, ftpd пишет в лог /var/log/ftpd все загрузки файлов anonymous, если этот файл лога существует.
-T Клиент может также запрашивать отличеющийся период таймаута; максимально разрешенный период таймаута, который может быть установлен, задается опцией -T в секундах. Лимит по умолчанию 2 часа.
-t Таймаут неактивности в секундах (по умолчанию 15 минут).
-U Эта опция инструктирует ftpd использовать порты данных в диапазоне IP_PORTRANGE_DEFAULT вместо IP_PORTRANGE_HIGH. Это изменение полезно для некоторых специфичных конфигураций файерволла; см. ip(4) для дополнительной информации.
Примите к сведению, что эта опция является виртуальной и не работает на FreeBSD 5.0 выше; оба диапазона портов на них по умолчанию идентичны.
-u Маска создания режима файла по умолчанию (file creation mode mask) устанавливается в umask, которая ожидается в восьмеричной числовой величине. См. umask(2) для деталей. Эта опция может быть переустановлена (запрещена) через login.conf(5).
-v Синоним -d.
-W Не записывать в лог /var/log/wtmp сессии FTP.