Установка FTPD FreeBSD

Открываем /etc/inetd.conf и раскомментируем следующую строчку:

ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l

К ней еще добавляем несколько ключей:

– h – сервер не выдает информации об установленном software;

– S – запись логов анонимных подключений в /var/log/ftpd, если такой файл существует;

– m – разрешение анонимным пользователям удалять файлы;

– d – в debug.log пишется все по ftp-подключениям;

– l – запись в лог удачной или неудачной сесии. Можно указывать дважды, тогда в логах будут отображаиться команды get, put, append, delete, make directory, remove directory, rename.

Все эти опции по желанию. Итого имеем строчку в inetd.conf:

ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l -l -h -S -m

Для анонимного доступа используется пользователь ftp, т.е. прописывая логин anonymous в ftp-клиенте, на ftp-сервер вход происходит по логину ftp. Теперь нужно определить каталог для анонимного доступа. Это можно делать через Sysinstall или же отредактировать /etc/master.passwd. Для начала поставим любимый текстовый редактор по умолчанию:

#ee /root/.cshrc

в находим строку “setenv EDITOR” и прописываем “setenv EDITOR ee”

Теперь воспользуемся командой vipw. Она запускает тестовый редактор, который мы определили – ee, после выхода запускает pwd_mkdb, которая в свою очередь из master.passwd создает /etc/spwd.db. Запустили и смотрим на юзера ftp и прописываем ему домашний каталог /home/ftp:

ftp:*:14:5::0:0:Anonymous FTP Admin:/home/ftp:/nonexistent

Сам каталог /home/ftp должен существовать, в нем необходимо создать каталоги pub для чтения и incoming для записи и задать права 755 и 777 соответственно:

# mkdir pub
 # mkdir incoming
 # chmod 755 pub
 # chmod 777 incoming

По умолчанию логи складываются в /var/log/xferlog. Я хочу, чтобы все писалось в /var/log/ftpd.log, для этого в /etc/syslog.conf добавляем:

!ftpd
 *.* /var/log/ftpd.log

и комментируем:

#ftp.info /var/log/xferlog

Теперь нужно демонам inetd и syslogd дать команду SIGSUP и ftpd заработает:

# ps ax|grep inetd
 663 ?? Is 0:00,08 /usr/sbin/inetd -wW -C 60
 4259 p0 RL+ 0:00,00 grep inetd
 # ps ax | grep syslogd
 483 ?? Ss 0:00,29 /usr/sbin/syslogd -s
 4261 p0 S+ 0:00,00 grep syslogd
 # kill -HUP 663
 # kill -HUP 483

Получаем работающий ftp-сервер, смотрим в /var/log/ftpd.log:

Mar 10 18:16:47 server ftpd[4262]: connection from 192.168.0.8 (192.168.0.8)
Mar 10 18:16:49 server ftpd[4262]: ANONYMOUS FTP LOGIN FROM 192.168.210.8,
Mar 10 18:16:49 server ftpd[4262]: session root changed to /home/ftp
Mar 10 18:17:08 server ftpd[4262]: put test.txt = 0 bytes (wd: /incoming; chrooted)
Mar 10 18:17:16 server ftpd[4262]: delete test.txt (wd: /incoming; chrooted)

FTP-сервер может работать в активном и пассивном режиме. При передаче данных используются 2 порта: порт “данных” и порт “команд”(управления).
При активном режиме клиент соединяется с порта N > 1024 на 21 порт ftp-сервера. Далее клиент слушает порт N+1 и на сервер посылает команду PORT N+1, в ответ сервер со своего 20 порта соединяется с портом N+1 клиента.
При пассивном соединении клиент локально открывает 2 порта N>1024 и N+1. Первый порт соединяется с 21 портом сервера, далее клиент выдает серверу команду PASV (в отличии от активного PORT). В результате сервер у себя открывает порт P>1024 и посылает клиенту команду PORT P. Затем, получив от сервера порт P, клиент соединяется со своего N+1 порта с портом P сервера. Преимущества пассивного режима в том, что клиент сам инициируют 2 порта для подключения, даже если он находится NAT-ом, с оединения с ftp-сервером установится. При этом типе соединения ftpd будет использовать порты из диапазона 49152-65535 ( если есть фаервол – их нужно открыть). Этот диапазон описан переменными IPPORT_HIFIRSTAUTO и IPPORT_HILASTAUTO в /usr/include/netinet/in.h.

Источник информации:
1. http://www.bsdportal.ru/viewtopic.php?t=13345
2. http://asmodeus.com.ua/library/os/linux/admin_bsd.htm#vipw
3. http://www.opennet.ru/man.shtml?topic=ftpd-BSD&category=8&russian=0
4. man ftpd, man syslog, man syslog.conf

© mick, 2007.