|
Bog BOS: FTP серверы (wu-ftpd)
|
Последнее изменение файла: 2009.10.29
Скопировано с www.bog.pp.ru: 2024.11.23
Bog BOS: FTP серверы (wu-ftpd)
Для понимания материала требуется знание протокола FTP.
В настоящее время мы производим миграцию FTP-серверов на
ProFTPD и ,
так что данный материал обновляться не будет.
Washington University at Saint Louis FTP daemon
for Unix (wu-ftpd и BeroFTPD)
Ссылки:
Комплект поставки wu-ftpd для RedHat Linux 6.0 (wu-ftpd-2.5.0-5.6.0.rpm):
-
/etc
-
ftpaccess
-
ftpconversions
-
ftpgroups
-
ftphosts
-
ftpusers
-
/etc/logrotate.d/ftpd
(перенумерация /var/log/xferlog без сжатия)
-
/etc/pam.d/ftp (не
разбирался)
-
/usr/bin
-
/usr/doc/wu-ftpd-2.5.0
-
/usr/man
-
man1 (ftpwho.1, ftpcount.1)
-
man5 (ftpaccess.5, ftpconversions.5, ftphosts.5, xferlog.5)
-
man8 (ftpd.8, ftpshut.8)
-
/usr/sbin
-
in.ftpd (он же wu.ftpd и in.wuftpd)
-
xferstats
Параметры configure при
установке (не все, а только
полезные):
-
--with-etc-dir=PATH (по
умолчанию - /etc, но лучше
поставить /usr/local/etc/ftpd)
-
--disable-upload (не будет
поддержки строки upload в ftpaccess)
-
--disable-overwrite (не будет
поддержки строки overwrite в ftpaccess)
-
--disable-hostxs (не будет
поддержки строк allow и deny в ftpaccess)
-
--disable-private (не будет
поддержки site group/site gpass)
-
--enable-paranoid
(отключить
потенциально опасные функции: DELETE, SITE (umask, chmod, group, exec, newer),
overwrite (put и rename), запрет
доступа
пользователям с
неправильной домашней
директорией)
-
--enable-quota (поддержка quota)--enable-quota
-
--enable-chmod
(расширенная команда chmod: флаги t и x -
надеюсь не
понадобится)
-
--disable-rfc931
(обязательно отключить ident)
-
--disable-daemon (работать только через inetd)
-
--disable-throughput (не
контролировать толщину потока)
-
--disable-count (не вести
счетчики переданных байт и т.п.)
-
--enable-noop
-
--disable-log-rp
(журнализовать
относительные имена файлов, а не
настоящие)
-
--disable-virtual
-
--disable-dns
-
--disable-port (запретить команду PORT)
-
--disable-pasv (запретить команду PASV)
-
--disable-plsm (не выдавать в журнал так
достающие сообщения о lock sleep)
-
--disable-pasvip (не
требовать совпадения
управляющего
соединения и
соединения данных в режиме PASV; менее
безопасно, но firewall будет
счастливее)
-
--disable-anonymous
-
--enable-ls
(внутренний ls, пока есть ошибки)
-
--disable-mail (отключить
возможность посылки письма при
загрузке файла)
-
--enable-badclients
(обязательно, иначе половина
клиентов не сможет работать; увы надо еще
ручками добавлять define SUPPORT_BROKEN_CLIENTS в config.h
после configure)
Процесс установки 2.6.0 для Solaris 2.5 и gcc 2.6.2
-
качаем архив и
разтариваем его (создается
директория wu-ftpd-2.6.0)
-
./configure с
соответствующими
параметрами
-
сервер под себя, чтобы можно было
забирать файлы с
компьютера
-
--with-etc-dir=/usr/local/etc/ftpd
-
--disable-upload
-
--disable-private
-
--enable-paranoid
-
--disable-rfc931
-
--disable-daemon
-
--disable-throughput
-
--enable-noop
-
--disable-virtual
-
--disable-plsm
-
--disable-anonymous
-
--disable-mail
-
--enable-badclients
-
сервер для себя и
администраторов,
временно:
закачки домашних страниц
клиентами и
владельцами
хостируемых доменов с
локальных линий, ящики для обмена
файлами для клиентов с
локальных линий (группы: webadmin, webusers;
пользователи: я,
администраторы (только ftp?), webadmin
(только ftp)
-
--with-etc-dir=/usr/local/etc/ftpd
-
--disable-private
-
--enable-quota (не
компилируется extension.c)
-
--disable-rfc931
-
--disable-daemon
-
--disable-throughput
-
--enable-noop
-
--disable-virtual
-
--disable-plsm
-
--disable-anonymous
-
--disable-mail
-
--enable-badclients
который создает
-
Makefile (меняем /usr на /usr/local)
-
src/Makefile
-
support/Makefile (заменить gar на ar)
-
util/privatepw/Makefile (меняем /usr на /usr/local)
-
src/pathnames.h
-
config.h (define SUPPORT_BROKEN_CLIENTS)
-
src/config.h (define FACILITY LOG_LOCAL3,
вместо DAEMON для
перенаправления syslog)
-
добавляем /usr/ccs/bin в PATH и make
-
что-то сделать со старой версией
(переименовать или удалить)
-
/usr/local/bin или sbin (ftpcount, ftpwho, ftpshut, ftprestart, in.ftpd/ftpd,
ckconfig) - в разных версиях
по-разному
-
директория с файлами
конфигурации
-
возможно придется ручками создать
директории (mkdir /usr/local/etc/ftpd)
-
make install (с правами root)
-
ftpusers
-
сервер под себя - все имена из passwd, кроме себя
-
сервер для себя и
администраторов,
временно:
закачки домашних страниц - все имена из passwd,
кроме себя,
администраторов и клиентов с
домашними страницами
-
ftphosts
-
сервер под себя - allow для себя с
локальной сетки и диалапа
-
сервер для себя и
администраторов,
временно:
закачки домашних страниц
-прописать allow для каждого
-
ftpconversions -
компрессия/декомпрессия,
затаривание,
затаривание с
компрессией, выдача crc (заменить /bin на /usr/local/bin и
убрать md5, которого в Solaris нет)
-
ftpgroups - должен
отсутствовать
-
ftpaccess
-
сервер под себя
-
классы: LAN_real, dialup_real
-
предупреждение при входе, больше
никаких сообщений
-
побольше
журнализации (и на syslog)
-
deny-uid для всех и allow-uid только для себя (на
всякий случай)
-
сервер для себя и
администраторов,
временно:
закачки домашних страниц
-
классы: LAN_real, dialup_real, LAN_guest, dialup_guest, world_guest
(при наличии
неприкрытого squid-a, dialup ничем не
отличается от LAN)
-
guestgroup все (все
пользователи являются гостями; см. про
гостевые группы)
-
realuser
настоящие-пользователи (т.е. я и
администраторы)
-
defumask 027
-
предупреждение при входе о
назначении сервера (greeting и banner)
-
hostname, подходящий для самых частых
посетителей
-
email
ответственного за сервер
-
побольше
журнализации (и на syslog).
Сообщения о
пересылках копировать на xferlog для
локальной обработки.
-
разрешить tar и compress всем (на этом
сервере нет больших архивов)
-
chmod/delete/overwrite/rename/umask -
запретить для анонимных
пользователей
-
chmod/umask - запретить для guest
(пытаюсь навязать политику прав
доступа)
-
ограничить номер порта,
открываемого по команде PASV: passive ports 0.0.0.0/0
начало конец (интервал д.б.
согласован с правилами firewall)
-
path-filter из примера для guest и anon
(проверка имени файла на
корректность)
-
запретить гостям запись кроме как в
домашнюю директорию (для каждого
отдельно)
-
deny-uid - запретить доступ всем, allow-uid -
разрешить конкретным
пользователям и группам
-
restricted-uid - запретить доступ всем (кроме себя и
администраторов)═вовне домашних
директорий (глюк - не дает
ничего делать в
ПОДДИРЕКТОРИЯХ)
-
dns refuse_mismatch и dns refuse_no_reverse
-
если нужен
анонимный доступ
-
гостевая группа
(пользователи с реальными
именами/паролями, но для которых
производится chroot)
-
создать группу в /etc/group
-
создать
пользователя (/etc/passwd и /etc/shadow)
-
в качестве shell указать /bin/true (внести его в /etc/shells)
-
имя домашней
директории имеет вид:
-
путь для chroot
-
строка "/./"
-
домашняя
поддиректория
-
директория, в которую делается chroot, должна
-
иметь права: "dr-xr-x--x"
-
принадлежать root:root
-
содержать (кроме домашних
поддиректорий) тот же набор, что и для
анонимного доступа (bin, dev, etc, usr)
-
bin (root:root:111)
-
dev (root:root:111)
-
tcp (root:sys:666) - char 11, 42
-
zero (root:sys:444) - char 13,12
-
etc (root:root:111)
-
passwd (root:root:444) - можно пустой
-
usr (root:root:111)
-
lib (root:root:111)
-
ld.so.1 (root:root:555)
-
libc.so.1
-
libdl.so.1
-
libintl.so.1
-
libw.so.1
-
local (root:root:111)
-
bin (root:root:111)
-
compress (root:root:111)
-
gzip (root:root:111)
-
tar (root:root:111)
-
share/lib/zoneinfo/Europe (root:root:111)
-
ftpservers - должен
отсутствовать
-
проверяем
конфигурацию /usr/local/sbin/ckconfig
-
в /etc/inetd.conf
ftp stream tcp nowait root /usr/local/sbin/in.ftpd in.ftpd -a -l -I -W
-
послать сигнал HUP процессу inetd (с
правами root), чтобы
перечитал inetd.conf
-
почистить /etc/group, /etc/passwd
Процесс установки 2.6.0/2.6.1/2.6.2 для RedHat Linux 6.0/6.2/7.0
- качаем архив и растариваем его (создается директория wu-ftpd-2.6.0)
- ./configure с соответствующими параметрами
-
полный доступ для себя, доступ к
обихоженной части mirror для своих anonymous, upload в
это место для mirror, ящик для
входящих факсов
(специальный
пользователь fax, группа fax и имя хоста fax-holder);
софт из нашей
библиотеки для доступа к интернет /software/internet с
возможностью изменений
(специальный
пользователь ftpadmin, группа ftpadmin)
-
--with-etc-dir=/usr/local/etc/ftpd
-
--disable-private
-
--disable-rfc931
-
--disable-daemon
-
--disable-throughput
-
--enable-noop
-
--disable-virtual
-
--disable-plsm
-
--enable-badclients
-
ftp/http сервер
(специальный
пользователь ftpadmin, группа ftpadmin;
специальный
пользователь webadmin, группа webadmin;
владельцы сайтов, группа webusers)
-
--with-etc-dir=/usr/local/etc/ftpd
-
--disable-private
-
--disable-rfc931
-
--disable-daemon
-
--disable-throughput
-
--enable-noop
-
--disable-virtual
-
--disable-plsm
-
--enable-badclients
-
--enable-quota
который создает
-
Makefile (меняем /usr на /usr/local)
-
src/Makefile
-
support/Makefile
-
util/privatepw/Makefile (меняем /usr на /usr/local)
-
src/pathnames.h
-
config.h (define SUPPORT_BROKEN_CLIENTS)
-
src/config.h (define FACILITY LOG_LOCAL3,
вместо FTP для
перенаправления syslog, я бы оставил FTP, но Solaris
этого не понимает)
-
make
-
сохранить старую версию (вместе с RHL 6.0
поставляется 2.5.0)
-
качнуть wu-ftpd...rpm на этот
компьютер (так, на всякий случай ;)
-
переименовать в .old
-
/etc: ftpaccess, ftpconversions, ftpgroups, ftphosts, ftpusers
-
/usr/bin: ftpcount, ftpshut, ftpwho
-
/usr/sbin: xferstat, in.ftpd (пусть wu.ftpd и in.wuftpd
ссылаются в никуда)
-
/usr/man/man1: ftpwho.1, ftpcount.1
-
/usr/man/man5: ftpaccess.5, ftpconversions.5, ftphosts.5, xferlog.5
-
/usr/man/man8: ftpd.8, ftpshut.8
-
/etc/logrotate.d/ftpd оставить как есть
-
/usr/doc/wu-ftpd-2.5.0 оставить как есть
-
/etc/pam.d/ftp: заменить /etc/ftpusers на /usr/local/etc/ftpd/ftpusers
-
mkdir /usr/local/etc/ftpd
-
make install (с правами root)
-
/usr/local/sbin: in.ftpd, ftpshut, ftprestart, ckconfig, privatepw
-
/usr/local/bin: ftpcount, ftpwho
-
/usr/local/man/man8: ftpd.8, ftpshut.8, ftprestart.8, privatepw.8
-
/usr/local/man/man1: ftpcount.1, ftpwho.1
-
/usr/local/man/man5: ftphosts.5, ftpaccess.5, ftpconversions.5, xferlog.5
-
/usr/local/etc/ftpd: ftpaccess, ftpconversions
-
ftpusers
-
полный доступ для себя, доступ к
обихоженной части mirror для своих anonymous, upload в
это место для mirror, ящик для
входящих факсов
все имена из /etc/passwd, кроме себя, fax, ftpadmin и ftp
-
ftp/http сервер
все имена из /etc/passwd, кроме себя, webadmin, ftpadmin,
держателей сайтов и ftp
-
ftphosts
-
полный доступ для себя, доступ к
обихоженной части mirror для своих anonymous, upload в
это место для mirror, ящик для
входящих факсов
allow для себя, fax, ftpadmin и ftp с
локальной сетки и диалапа
-
ftp/http сервер
allow для себя, ftpadmin, webadmin и
владельцев сайтов с
локальной сетки и диалапа; ftp -
отовсюду
-
ftpconversions -
компрессия/декомпрессия,
затаривание,
затаривание с
компрессией, выдача crc, md5
-
ftpgroups - должен
отсутствовать
-
ftpaccess
-
полный доступ для себя, доступ к
обихоженной части mirror для своих anonymous, upload в
это место для mirror, ящик для
входящих факсов
-
классы: LAN_real, dialup_real, LAN_guest, dialup_guest, LAN_anon, dialup_anon
(при наличии
неприкрытого squid-a, dialup ничем не
отличается от LAN)
-
guestgroup все-кроме-ftp (все
пользователи - кроме
анонимных - по умолчанию являются
гостями; см. про гостевые группы)
-
realuser
настоящие-пользователи (т.е. я)
-
defumask 027
-
предупреждение при входе о
назначении сервера (greeting и banner)
-
hostname, подходящий для самых частых
посетителей
-
email
ответственного за сервер
-
отдельные message для
отдельных классов
пользователей с описанием что, где и как для
выдачи при входе в систему и при
переходах в некоторые
директории (вместо
стандартного .message выбрать
какое-нибудь
специфичное имя, чтобы не
пересекаться с
отмирроренными сайтами). readme в
основном дублирует те же самые функции, но пусть пока
будет.
-
побольше
журнализации (и на syslog).
Сообщения о
пересылках копировать на xferlog для
локальной обработки.
-
запретить tar и compress для
анонимных
пользователей (зрелище
затаривания
2-гигабайтной
директории неразумным клиентом меня
раздражает)
-
chmod/delete/overwrite/rename/umask -
запретить для анонимных
пользователей
-
chmod/rename/umask -
запретить для guest
-
ограничить номер порта,
открываемого по команде PASV: passive ports 0.0.0.0/0
начало конец (интервал д.б.
согласован с правилами firewall)
-
path-filter из примера для guest и anon
(проверка имени файла на
корректность)
-
запретить анонимным
пользователям запись куда бы то ни было с
помощью upload
-
запретить гостям запись кроме как в
домашнюю директорию (для fax - без
поддиректорий)
-
deny-uid - запретить доступ всем, allow-uid -
разрешить конкретным
пользователям (в т.ч. ftp)
-
restricted-uid - запретить доступ всем (кроме себя)
вовне домашних
директорий
-
dns refuse_mismatch и dns refuse_no_reverse
-
ftp/http сервер
-
классы: LAN_real, dialup_real, LAN_guest, dialup_guest, LAN_anon, dialup_anon,
world_anon (при наличии
неприкрытого squid-a, dialup ничем не
отличается от LAN)
-
guestgroup все-кроме-ftp (все
пользователи - кроме
анонимных - по умолчанию являются
гостями; см. про гостевые группы)
-
realuser
настоящие-пользователи (т.е. я)
-
defumask 027
-
ограничить число внешних
анонимных
пользователей (не забыть файл с текстом
сообщения)
-
предупреждение при входе о
назначении сервера (greeting и banner)
-
hostname, подходящий для самых частых
посетителей
-
email
ответственного за сервер
-
отдельные message для
отдельных классов
пользователей с описанием что, где и как для
выдачи при входе в систему
-
побольше
журнализации (и на syslog).
Сообщения о
пересылках копировать на xferlog для
локальной обработки.
-
разрешить tar и compress всем (на этом
сервере нет больших архивов)
-
chmod/delete/overwrite/rename/umask -
запретить для анонимных
пользователей
-
chmod/umask - запретить для guest
(пытаюсь навязать политику прав
доступа)
-
ограничить номер порта,
открываемого по команде PASV: passive ports 0.0.0.0/0
начало конец (интервал д.б.
согласован с правилами firewall)
-
path-filter из примера для guest и anon
(проверка имени файла на
корректность)
-
запретить анонимным
пользователям запись куда бы то ни было с
помощью upload
-
запретить гостям запись кроме как в
домашнюю директорию (для каждого
отдельно)
-
deny-uid - запретить доступ всем, allow-uid -
разрешить конкретным
пользователям (в т.ч. ftp)
-
restricted-uid - запретить доступ всем (кроме себя)
вовне домашних
директорий
-
dns refuse_mismatch и dns refuse_no_reverse
-
если нужен анонимный доступ
-
заводится группа ftp (/etc/group)
-
заводится
пользователь ftp (/etc/passwd). В
качестве домашней
директории
указывается место, где будут лежать файлы,
доступные анонимным
пользователям. В это место будет
делаться chroot, так что если
предполагается делать линки, то это надо иметь в виду.
Можно добавить в конец "/./pub", чтобы
пользователь сразу попадал туда
(некоторые клиенты этого не любят - MS IE). Поле
пароля в /etc/shadow - забить.
-
Создать саму домашнюю
директорию (root:root 551). MS IE ("мать, мать, мать" -
привычно
откликнулось эхо) пытается
посмотреть листинг корневой
директории и выдает
пользователю пустой список файлов.
Пришлось поменять права на 555, что слегка
уменьшает
безопасность, но делает
любителей
мелкомягких
счастливее.
-
внутри нее
-
директория bin (и
директория и файлы внутри с правами root:root 111): compress, cpio, gzip,
ls, sh, tar, zcat (зачем нужны sh и cpio?)
-
директория etc
(директория с правами root:root 111, файлы
внутри root:root 444)
-
passwd, group - можно пустые
-
welcome*, banner*
-
ld.so.cache (root:root 644)
-
директория lib (root:root 111), для RH 6.2 - 2.1.3, для RH 7.0 - 2.2
вместо 2.1.1
-
ld-2.1.1.so, libc-2.1.1.so, libnsl-2.1.1.so, libnss_files-2.1.1.so (root:root,
555)
-
для RH 6.2
дополнительно libtermcap.so.2.0.8
-
ld-linux.so.2 -> ld-2.1.1.so
-
libc.so.6 -> libc-2.1.1.so
-
libnsl.so.1 -> libnsl-2.1.1.so
-
libnss_files.so.2 -> libnss_files-2.1.1.so
-
для RH 6.2: libtermcap.so.2 -> libtermcap.so.2.0.8
-
директория pub (root:ftp dr-xr-sr-x)
-
внутренние
поддиректории,
заполняемые вручную, должны иметь те же права, что и pub
-
для каждого
наполняющего автомата завести свою
поддиректорию с
необходимыми правами (hardlink на
директории в ext2fs не работает). В любом
случае директории должны иметь права на
чтение и исполнение для
пользователя ftp, файлы - только на чтение.
-
гостевая группа
(пользователи с реальными
именами/паролями, но для которых
производится chroot)
-
создать группу в /etc/group
-
создать
пользователя (/etc/passwd и /etc/shadow)
-
в качестве shell указать /bin/true (внести его в /etc/shells)
-
имя домашней
директории имеет вид:
-
путь для chroot
-
строка "/./"
-
домашняя
поддиректория
-
директория, в которую делается chroot, должна
-
иметь права: "dr-xr-x--x"
-
принадлежать root:root
-
содержать (кроме домашних
поддиректорий) тот же набор, что и для
анонимного доступа (bin, etc, lib)
-
ftpservers - должен
отсутствовать
-
проверяем
конфигурацию /usr/local/sbin/ckconfig
-
в /etc/inetd.conf (нужен ли tcpd на
самом деле?)
ftp stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/in.ftpd -a -l -I -W
(для RH 7.0: /etc/xinetd.d/wu-ftpd: stream,nowait,root,/usr/local/sbin/in.ftpd,-l -a -I -W)
- /etc/pam.d/ftp (?)
-
послать сигнал HUP процессу inetd/xinetd (с
правами root), чтобы
перечитал inetd.conf/xinetd.conf
-
проделать дырки в защите для доступа с LAN, dialup и
снаружи
-
Процесс установки wu-ftpd-2.4.2 для Solaris 2.5 и gcc 2.6.2
-
качаем архив (я извлек версию 2.4.2-beta-11)
-
разтариваем его (создается
директория wu-ftpd-2.4.2-beta-11)
-
заходим в нее
-
сильно меняем src/pathnames.h
(отключая условную
компиляцию)
-
#define _PATH_EXECPATH "/usr/local/wu-ftpd/ftp-exec"
-
#define _PATH_FTPUSERS "/usr/local/wu-ftpd/etc/ftpusers"
-
#define _PATH_FTPACCESS "/usr/local/wu-ftpd/etc/ftpaccess"
-
#define _PATH_CVT "/usr/local/wu-ftpd/etc/ftpconversions"
-
#define _PATH_PRIVATE "/usr/local/wu-ftpd/etc/ftpgroups"
-
#define _PATH_PIDNAMES "/var/tmp/ftp.pids-%s"
-
#define _PATH_XFERLOG "/usr/local/wu-ftpd/xferlog"
-
#define _PATH_FTPHOSTS "/usr/local/wu-ftpd/etc/ftphosts"
-
говорим (не забудь /usr/ccs/bin в список
поиска) ./build sol
-
меняем в Makefile /usr/sbin на /usr/local/sbin, а /usr/share/man на
/usr/local/man, а то уж очень
неприлично получается (/usr/local/man/man1m
должен
существовать!).
-
под
суперпользователем говорим ./build install
-
меняем /etc/inetd.conf, чтобы
вызывался новый ftpd
ftp stream tcp nowait root /usr/local/sbin/in.ftpd in.ftpd -a
-
посылаем сигнал HUP процессу inetd (под
суперпользователем), чтобы заново
зачитал inetd.conf
-
копируем doc/ftpaccess в /usr/local/wu-ftpd/etc/ftpaccess и
правим:
-
class localreal real *.deol.ru 194.84.39.*
класс честных людей
-
class localanon anonymous *.deol.ru 194.84.39.*
местные
конспираторы (в том числе и через PPP)
-
class remoteanon anonymous *
удаленные
конспираторы
-
class allguest guest *
для наших дилеров
псевдопользователь
-
guestgroup guest
где guest - это имя группы из /etc/group
в /etc/passwd заводим
пользователя
dealer:x:401:600:ftp for
dealer:/usr/local/wu-ftpd/home/./4dealers:/bin/true
заметьте выражение /./ - это
необходимо: wu-ftpd делает какие-то
заключения из этого
/bin/true вместо
командного
интерпретатора
необходимо сами понимаете (не забудь
добавить в /etc/shells)
директория 4dealers должна быть с
правами:
═ ═dr-xrwx--- 2 dealer <имя группы администраторов>
внутри директорию upload с
правами
═ ═drwxrwx--- dealesr <имя группы администраторов>
-
limit localreal -1 Any
себя не
ограничиваем ни в чем
-
limit localanon 40 Any /usr/local/wu-ftpd/msgs/msg.local.dead
местных
конспираторов не более 40 (не забудь
создать файл сообщений)
-
limit remoteanon 10 Any /usr/local/wu-ftpd/msgs/msg.remote.dead
удаленных
конспираторов не более 10 (не забудь
создать файл сообщений)
-
limit allguest 10 Any /usr/local/wu-ftpd/msgs/msg.remote.dead
псевдопользователей (дилеров) не более 10
-
noretrieve core
не разрешать извлекать файлы с именем core
-
private no
я не понял зачем это надо, но на всякий
случай выключил
-
banner /usr/local/wu-ftpd/msgs/banner
приветствие,
выдаваемое перед вводом имени
пользователя (можно разнести по
виртуальным хостам)
-
readme README login
readme README cwd=*
информация о файле README (когда был создан и когда
последний раз изменен) будет
выдаваться при входе на сервер и при
переходе в директорию
-
message /etc/welcome.msg login localanon remoteanon
при входе
конспираторов им выдается
сообщение (реальное имя файла /usr/local/wu-ftpd/home/etc/welcome.msg)
-
message /usr/local/wu-ftpd/home/etc/welcome.msg login localreal
тоже самое сообщение для честных людей
-
message .message cwd=*
при входе в
директорию будет
выдаваться файл .message
-
compress yes *
tar yes *
разрешать сжатие и
затаривание всем (реальное
описание процессов в файле /usr/local/wu-ftpd/etc/ftpconversions
-
log commands real,anonymous
все команды должны попадать в журнал, но я
что-то не заметил их там
-
log transfers anonymous,real inbound,outbound
весь трафик должен попадать в журнал: /usr/local/wu-ftpd/xferlog,
формат xferlog.5
-
сообщение по окончанию сеанса я
отключил (где оно должно
лежать?)
-
chmod no guest,anonymous
delete no guest,anonymous
overwrite no guest,anonymous
rename no guest,anonymous
umask no guest,anonymous
разрешать
конспираторам подобные вещи -
самоубийство
-
passwd-check rfc822 warn
делаем полную проверку формата адреса e-mail для
конспираторов и ругаемся если что не так
(запрещать вход нельзя, т.к. Netscape
генерит адрес Mozilla@)
-
email bog@deol.ru
почтовый адрес
администратора: выдается в
сообщения вместо %E (%T -
локальное время, %F -
свободное место в
килобайтах, %C - текущая
директория, %R - имя
удаленного хоста, %L - имя
локального хоста, %U - как себя назвал
пользователь, %u - как показала
перепроверка, %N - текущее число
пользователь в данном классе, %M - макс. число
пользователей в данном классе.
-
разобраться с path-filtr и upload
-
создаем файл /usr/local/wu-ftpd/etc/ftpusers и
заносим в него все имена
пользователей, которые есть в /etc/passwd, но
которых мы не хотим видеть через ftp (root, uucp и др.)
-
создаем файл /usr/local/wu-ftpd/etc/ftphosts, в
который можно занести для каждого
пользователяадреса откуда ему можно
заходить и откуда нет (сейчас пустой)
-
создаем файл /usr/local/wu-ftpd/etc/ftpconversions,
который описывает
преобразования, который ftp-сервер делает "на лету"
(сжатие,
затаривание)
-
файл /usr/local/wu-ftpd/etc/ftpgroups не
создаю, т.к. не понимаю для чего эти группы нам
нужны.
-
выполняем bin/ckconfig, чтобы
проверить
правильность
конфигурирования (ух ты сколько
сообщений...)
-
создаем группу ftp с помощью admintool
(например, 400) и добавляем в нее члена ftp
-
создаем
пользователя ftp с
идентификатор (например, 400) из группы 400(ftp),
комментарий: "Anonymous FTP", shell: /bin/true, password: account is locked,
создать домашнюю
директорию: /usr/local/wu-ftpd/home
-
директория /usr/local/wu-ftpd/home должна
принадлежать
суперпользователю и группе ftp, иметь права
доступе 555
-
теперь создаем в ней
вспомогательные файлы (все
директории с правами 111,
исполняемые файлы 111, тексты 444, кроме явно
именованных):
bin/ls
dev/tcp - права 666 (mknod dev/tcp c 11 42 для Solaris)
dev/zero - права 444 (mknod dev/zero c 13 12 для Solaris)
etc/passwd - можно пустой
etc/group - можно пустой
etc/welcome.msg
usr/lib/ld.so.1 - права 555
usr/lib/libc.so.1 - права 555
usr/lib/libdl.so.1 - права 555
usr/lib/libintl.so.1 - права 555
usr/lib/libw.so.1 - права 555
usr/local/bin/compress
usr/local/bin/gzip
usr/local/bin/tar
usr/share/lib/zoneinfo/Europe/Moscow
-
не забудь про /etc/shells
-
теперь разберемся с pub (root ftp 2555),
внутренние директории должны иметь те же права
-
создаем внутреннюю
директорию pub/incoming (root ftp 733+t) - если надо -
перед этим надо
разобраться с
директивами upload, path-filtr и
научиться
ограничивать размер
-
под
суперпользователем
cd /usr/local/wu-ftpd/home
touch .forward;chmod 400 .forward
touch .rhosts;chmod 400 .rhosts
touch /usr/spool/mail/ftp; chmod 400 /usr/spool/mail/ftp
(?)
-
монтировать NFS внутрь ~ftp только так:
other:/u1/linux /home/ftp/pub/linux nfs ro,noquota,nosuid,intr,bg 1 0
-
ну и самое
интересное:
заполнение pub
Еще раз к вопросу о
пассивном ftp : измени права к файлу ~ftp/dev/tcp с crw-rw-rw- на crw-rw-r--
и права на пассивный ftp (команда PASV -
например, Microsoft Internet Explorer без нее не
живет) будут иметь только
пользователи из группы sys (а
анонимные
пользователи нет).
Программы, входящие в комплект
-
ftpd - собственно сервер (нужны -a -l -I -X -W)
-
-d или -v (записывать
отладочную информацию на syslog)
-
-l (каждую сессию - кто и откуда зашел к нам -
записывать на syslog, уровень info)
-
-t ═секунд (inactive timeout, по
умолчанию - 900, может быть изменен
клиентом)
-
-T секунд
(максимальный inactive timeout)
-
-a
(использовать ftpaccess)
-
-A (не
использовать ftpaccess - по
умолчанию)
-
-L (записывать все команды клиента на syslog, можно
поменять в ftpaccess, уровень info)
-
-i (делать запись о
полученных файлах в xferlog, можно
поменять в ftpaccess)
-
-I (запрещает
использовать протокол ident)
-
-o (делать запись о
переданных файлах в xferlog, можно
поменять в ftpaccess)
-
-X (делать записи о
полученных и
переданных файлах в syslog, а не xferlog; можно
поменять в ftpaccess, уровень info)
-
-u umask (маска по
умолчанию)
-
-w (записывать заходы в wtmp, по
умолчанию)
-
-W (не записывать заходы в wtmp)
-
-s (запуск в
самостоятельный полет, а не через inetd)
-
-S (запуск в
самостоятельный полет, а не через inetd,
отсоединиться от терминала)
-
-p порт
(управляющий порт, по
умолчанию ftp из /etc/services; при работе через inetd не
используется)
-
-P порт (порт данных, по
умолчанию ftp-data из /etc/services или на
единицу меньше
управляющего)
-
-q (по умолчанию,
использовать файлы для хранения номеров
процессов)
-
-Q (не
использовать эти файлы; не будет
работать
ограничение на
количество
пользователей в классе)
-
-r rootdir (сделать chroot
немедленно после запуска, не
дожидаясь ввода имени
пользователя; для
параноиков)
-
ftpwho - показывает
информацию о каждом клиенте (в Solaris 2.5
вызывает ps с
неправильными
параметрами)
-
ftpcount - показывает текущее и
максимальное
количество
пользователей для каждого класса
-
ftpshut - аккуратное
завершение работы
ftp-серверов
-l
за-сколько-минут-запрещать-дальнейшие-соединения -d
за-сколько-минут-разрывать-текущие-соединения
время-завершения [
форматированное-сообщение ]
где
время-завершения:
-
now
-
+минут - через сколько минут
-
HHMM -
абсолютное время
-
ftprestart - разрешить запуск
ftp-сервера, если он был завершен по ftpshut
(удаляет записанные им
сообщения о
завершении работы)
-
ckconfig - проверить
конфигурацию (очень слабая
проверка)
-
privatepw
Аутентификация
пользователя:
-
имя
пользователя д.б. в /etc/passwd (или как его там) и
иметь непустой пароль и иметь
стандартный shell,
возвращаемый getusershell (/etc/shells)
-
это имя не д.б. указано в ftpusers
-
если клиент
предъявляет имя anonymous или ftp, то д.б.
пользователь ftp в /etc/passwd. Пароль в этом
случае не
проверяется. Сервер делает chroot в
домашнюю директорию
пользователя ftp.
Конфигурационные файлы (root:sys:600):
-
ftpservers -
определяет набор файлов
конфигурации для каждого
виртуального сервера. Каждая строка
описывает
виртуальный сервер и содержит два поля:
-
имя/IP-адрес хоста
-
имя директории,
содержащей файлы
конфигурации. Имена файлов
фиксированны: ftpaccess, ftpusers, ftpgroups, ftphosts, ftpconversions.
Если
определенный файл
отсутствует, то
используется
соответствующий файл из
конфигурации основного сервера (из той же
директории, в которой лежит сам файл ftpservers).
-
ftpaccess
-
управление правами доступа
-
autogroup
имя-группы класс ...
если анонимный
пользователь является членом одного из
указанных классов, то сервер
переходит в группу (из /etc/group) с
указанным именем, что
позволяет дать анонимным
пользователям из разных классов доступ к
различным
директориям
-
class класс typelist
шаблон-адресов ...
позволяет отнести клиента в
указанный класс исходя из IP-адреса и типа
клиента, где:
typelist - список из
ключевых слов anonymous (клиенты,
зашедшие под именами ftp или anonymous), guest
(гостевая группа) и real
(зарегистрированные на
локальном хосте - /etc/passwd) через
запятую;
шаблон-адресов - шаблон имени или
адреса хоста клиента или
адрес:маска или адрес/cidr или имя файла
(должно начинаться со слеша и
содержать шаблоны адресов);
восклицательный знак перед
шаблоном отрицает действие шаблона;
несколько шаблонов в строке
образует логическое ИЛИ.
Если клиент м.б. отнесен к
нескольким классам, то
используется первая строка class. Если
клиента нельзя отнести ни к одному классу, то
доступ
запрещается.
-
deny
шаблон-адресов
файл-с-текстом-сообщения
запретить доступ клиентов с
указанного адреса с выдачей текста
сообщения. В качестве шаблона м.б.
указана строка !nameserved, что
запрещает доступ с хостов, имя которых не
определяется по адресу. Можно также
указывать имя файла,
начинающееся со слеша.
-
guestgroup
имя-группы ...
если РЕАЛЬНЫЙ
пользователь является членом
указанной группы (из /etc/group), то с ним
поступают так же как с
анонимным (chroot, запрет на команды USER и PASS).
Домашняя директория такого
пользователя д.б. оформлена также как для
анонимного доступа (строка делится на две части,
разделяемые "/./", первая часть
используется для chroot, вторая
является его
собственной
директорией
относительно нового корня). Вместо имени
группы можно
использовать номер, перед которым надо
поставить процент, или интервал номеров или
звездочку для всех групп.
-
guestuser
имя-пользователя ...
аналогично guestgroup, но
используется имя РЕАЛЬНОГО
пользователя
-
realgroup
имя-группы ...
ревертирует действие guestgroup и guestuser
-
realuser
имя-пользователя ...
ревертирует действие guestgroup и guestuser
-
nice дельта [
класс ] -
изменение приоритета процесса
-
defumask umask [
класс ] - задание umask,
применяемой при создании демоном файлов
-
tcpwindow байт [
класс ] - для
диалапных
пользователей надо поменьше
-
keepalive { yes | ═no } -
установить TCP SO_KEEPALIVE (и
какой будет эффект?)
-
timeout accept секунд -
сколько ждать входного
соединения для передачи данных (PASV) (120)
-
timeout connect секунд -
сколько ждать
установления выходного
соединения для передачи данных (PORT) (120)
-
timeout data секунд -
максимальный период
неактивности на
соединении для передачи данных (1200)
-
timeout idle секунд -
сколько ждать следующей команды (900)
-
timeout maxidle секунд - клиент имеет
возможность
установить idle
самостоятельно. Maxidle
устанавливает верхний предел для
клиента (1200)
-
timeout RFC931 секунд -
максимальное время ожидания ответа для
протокола ident. Если 0, то не
использовать ident вовсе (10).
-
file-limit [ raw ] { in | out | total
} число [ класс ]
ограничить число
передаваемых файлов. raw
ограничивает число любых передач, а не только
файлов данных (а какие еще
бывают?
оглавления?)
-
byte-limit [ raw ] { in | out | total
} число [ класс ]
ограничить число
передаваемых байт. raw
ограничивает любые передачи, а не только
файлов данных. Текущая операция не
прерывается.
-
limit-time { * | anonymous | guest }
минут
ограничение времени сессии.
Реальные
пользователи не
ограничиваются никогда.
-
guestserver [
имя-серверного-хоста ]
гостевой и анонимный доступ
предоставляется только к
указанному хосту (хостам). Клиенту при
неудачном доступе
сообщается имя первого хоста, куда он может
обратиться. Имеет смысл, если сервер
обслуживает несколько
виртуальных доменов.
-
limit класс число
временной-интервал
имя-файла-с-сообщением
ограничение на число
одновременно
работающих клиентов из данного класса.
Временной-интервал
определяется как в UUCP
(например Any или Mo 0900-1800).
Проверка
производится только в момент входа. Если к
сеансу применимо несколько команд limit, то
используется первая.
-
noretrieve [ absolute | relative ] {
class=класс }
имя-файла ...
запретить клиенту читать
указанные файлы. Если имя
начинается со слеша, то только этот файл, иначе
любой файл с
соответствующим именем. Если указана
директория, то любой файл из этой
директории или любой ее
поддиректории. Можно также
указывать шаблоны в стиле shell. По
умолчанию имена
воспринимаются как
абсолютные (relative -
относительно chroot).
-
allowretrieve [ absolute | relative ] {
class=класс }
имя-файла ...
отменить действие директивы noretrieve
-
loginfails число
после указанного числа
неудачных попыток зайти на сервер делать
запись в журнале и
разрывать соединение (5)
-
private { yes | no }
Нестандартные команды SITE GROUP и SITE GPASS
позволяют
пользователю поменять текущую группу (д.б.
перечислены в ftpgroups). Не
понял: private - это
разрешить менять группу или
запретить?
-
выдача сообщений клиенту
-
greeting { full | brief | terse | text
строка }
какой текст будет
выдаваться в строке
приветствия:
-
full - имя хоста и версия сервера
-
brief - имя хоста
-
terse - ничего, кроме факта
готовности к
обслуживанию
-
text -
произвольная строка текста
-
banner
имя-файла
определяет текст сообщения,
выдаваемого клиенту до ввода
имени/пароля. Не совместим с
клиентами, не умеющими
обрабатывать
многострочные сообщения. Имя файла -
абсолютное.
-
hostname
имя-хоста
определяет имя хоста по
умолчанию (если не
используется механизм
виртуальных серверов), которое
подставляется в
приветствие и в строки вместо %L. По
умолчанию - имя
локального хоста.
-
email адрес
адрес
администратора.
Подставляется в строки вместо %E.
-
message
имя-файла { LOGIN |
CWD=имя-директории {
класс } }
содержимое файла выдается клиенту
(однократно) при входе или смене
директории. Имя файла -
относительно chroot.
Макроподстановки:
-
%T - местное время (Thu Nov 15 17:12:42 1990), без
названия зоны. В 2.5.0/2.6.0 (RH Linux 6.0)
иногда выдается GMT.
-
%F - свободное место в разделе (КБ). В 2.5.0/2.6.0 (RH
Linux 6.0) не работает.
-
%C - текущая
директория
-
%E - email адрес
администратора
-
%R - имя удаленного хоста
-
%L - имя данного хоста
-
%u - имя
пользователя,
полученное от ident
-
%U - имя, указанное клиентом при
регистрации
-
%M -
максимальное число
пользователей в данном классе
-
%N - текущее число
пользователей в данном классе
-
%B - дисковых
блоков. В 2.5.0/2.6.0 (RH Linux 6.0) не
работает.
-
%b -
предпочтительный предел числа
дисковых блоков. В 2.5.0/2.6.0 (RH Linux 6.0)
не работает.
-
%Q - текущее число блоков. В 2.5.0/2.6.0 (RH Linux 6.0)
не работает.
-
%I -
максимальное число inode-ов
-
%i -
═предпочтительный предел числа inode-ов
-
%q - текущее число inode-ов
-
%H - лимит времени на
использование
чрезмерного дискового
пространства
-
%h - лимит времени на
использование
чрезмерного числа файлов
-
readme
имя-файла { LOGIN |
CWD=имя-директории {
класс } }
в
соответствующий момент (при входе или смене
директории) сервер
информирует клиента
(однократно) о наличии этого файла и когда он был
создан/изменен. Имя файла -
относительно chroot.
Макроподстановки
аналогично директиве message.
-
Журнализация
-
log commands
список-типов
выводить в журнал все команды клиента, где
список-типов - список через
запятую слов real, guest и anonymous.
-
log transfers
список-типов
список-направлений
выводить в журнал пересылки файлов, где
список-типов - список через
запятую слов real, guest и anonymous;
список-направлений - список через
запятую слов incoming и outbound.
-
log security
список-типов
выводить в журнал нарушения правил
безопасности, где
список-типов - список через
запятую слов real, guest и anonymous.
-
log syslog -
перенаправлять сообщения о
пересылках в syslog (уровень info) вместо файла xferlog.
-
log syslog+xferlog -
направлять сообщения о
пересылках в syslog и файл xferlog.
-
разное
-
alias строка
имя-директории
позволяет переходить в данную
директорию по команде "cd алиас" из любой
директории. Имя
относительное или
абсолютное?
Показывается ли оно в
листинге?
-
cdpath
имя-директории
добавляет директорию к cdpath, которая
используется в качестве списка поиска для
команды cd
-
compress { yes | no }
шаблон-классов ...
разрешить/запретить
компрессию/декомпрессию для классов,
подпадающих под шаблон(ы) или слово all.
-
tar { yes | no }
шаблон-классов ...
разрешить/запретить
использование tar для классов,
подпадающих под шаблон(ы) или слово all.
-
shutdown
имя-управляющего-файла
файл содержит описание грядущей
остановки сервера. Текущие
пользователи
извещаются, новые не
принимаются и т.д. Можно
использовать ftpshut для
генерации этого файла.
-
passive address
возвращаемый-ip-адрес
cidr-шаблон
если клиент выдает команду PASS, то сервер
определяет
вовращаемый адрес исходя из
соответствия ip-адреса клиента
cidr-шаблону.
Прислушивается он к своему
обычному адресу.
Используется, если сервер
находится позади firewall с NAT. firewall
должен пропускать SYN-пакеты на
указанные порты.
-
pasive ports
cidr-шаблон min max
определяется интервал портов, из
которых сервер выбирает порт для
прослушивания случайным образом и
передает его номер клиенту
-
pasv-allow класс
шаблон-адресов
Обычно сервер после
получения команды PASV
разрешает
соединяться только с того же адреса, что и
управляющее
соединение. Данная
директива позволяет
пользователям
указанного класса
соединяться не только с
исходного адеса, но и с этих адресов.
-
port-allow класс
шаблон-адресов
Обычно сервер не позволяет
указывать в команде PORT адреса,
отличные от адреса
управляющего
соединения. Данная
директива позволяет
пользователям данного класса
указывать в команде порт адрес,
подходящий под шаблон.
-
lslong команда [
параметры ] - какую
команду и параметры
использовать для генерации
листинга директории (пробелы в
параметрах
недопустимы).
-
lsshort команда [
параметры ] - какую
команду и параметры
использовать для генерации
листинга директории (пробелы в
параметрах
недопустимы).
-
lsplain команда [
параметры ] - какую
команду и параметры
использовать для генерации
листинга директории (пробелы в
параметрах
недопустимы).
-
incmail email-адрес
кого извещать в случае
анонимного upload. Если указано
несколько адресов, то каждый получит
извещение.
-
mailserver
имя-хоста
какой почтовый сервер
использовать для рассылки
сообщений об анонимном upload. Если
указано несколько, то
пробовать по очереди. По
умолчанию - localhost.
-
mailfrom
email-адрес
какой обратный адрес
подставлять при рассылке
сообщений об анонимном upload. По
умолчанию - wu-ftpd.
-
виртуальные сервера (лучше
использовать ftpservers)
-
daemonaddress ip-адрес -
прислушиваться к
соединениям только на этот адрес
-
virtual ip-адрес { root | banner |
logfile }
имя-файла
определить
соответственно: корень файловой
системы, банерный файл и журнал для
указанного
виртуального сервера
-
virtual ip-адрес { hostname | email }
строка
определить имя хоста
(показываемое в
приветствии) и адрес
администратора для
указанного
виртуального сервера
-
virtual ip-адрес { allow | deny }
имя-пользователя ...
-
virtual ip-адрес private -
закрыть анонимный доступ
-
virtual ip-адрес incmail
email-адрес
кого извещать в случае
анонимного upload. Если указано
несколько адресов, то каждый получит
извещение.
-
virtual ip-адрес mailfrom
email-адрес
какой обратный адрес
подставлять при рассылке
сообщений об анонимном upload. По
умолчанию - wu-ftpd.
-
defaultserver { deny | allow }
═имя-пользователя ...
по умолчанию доступ разрешен всем. Вместо имени
пользоваттеля можно
указывать звездочку (т.е. для всех0
-
defaultserver private -
закрыть анонимный доступ
-
defaultserver incmail
email-адрес
кого извещать в случае
анонимного upload. Если указано
несколько адресов, то каждый получит
извещение.
-
defaultserver mailfrom
email-адрес
какой обратный адрес
подставлять при рассылке
сообщений об анонимном upload. По
умолчанию - wu-ftpd.
-
права доступа
-
{ chmod | delete | overwrite | rename |
umask } { yes | no }
список-типов
разрешить/запретить
пользователям выполнять
соответствующее действие. По
умолчанию - все разрешено.
Список-типов - список через
запятую слов anonymous, guest, real или
class=имя-класса.
-
passwd-check { none | trivial | rfc822 } (
{ enforce | warn } )
уровень проверки
правильности вводимых
анонимными
пользователями в качестве пароля
email-адресов и реакция сервера в случае
ошибки:
-
none - никакой проверки
-
trivial - строка д.
содержать @
-
rfc822 - полная проверка
-
warn - если
обнаружена ошибка, то выдавать
предупреждение
-
enforce - если
обнаружена ошибка, то не впускать
-
deny-email email-адрес
считать данный email-адрес
неправильным
-
path-filter
список-типов
имя-файла-сообщения
шаблон-допустимых-имен
шаблон-недопустимых ...
когда
пользователь типа из списка типов (слова real, guest и
anonymous через запятую)
пытается загрузить файл на сервер, то сервер
проверяет что имя файла
соответствует
регулярному выражению,
указанному в
шаблоне-допустимых и не
соответствует ни одному из
регулярных выражений в шаблонах
недопустимых. В противном случае
выдается сообщение из файла.
-
upload [ absolute | relative ] [
class=имя-класса ]... [ - ]
корень
шаблон-директории { yes | no }
owner group mode [ dirs
| ═nodirs ] [ dir_mode ]
определяет
директории, в которые
разрешено/запрещено
записывать файлы
пользователям из
указанного класса. Все вновь
создаваемые файлы будут иметь
соответствующие права доступа и
принадлежность.
Выбирается самый длинный
подходящий шаблон. dirs/nodirs
разрешает/запрещает создание
поддиректорий (по умолчанию -
разрешено).
Применяется только к
пользователям, домашняя
директория которых (chroot-ed)
совпадает с корень (можно
указывать звездочку). В качестве owner
и/или group можно
указывать звездочку. В этом случае
владелец/группа вновь
создаваемого файла
наследуются от
директории, в которой он
создается. См. upload.configuration.HOWTO
-
throughput -
позволяет задать скорость
передачи
определенных файлов
(директорий) на
определенные хосты (в т.ч.
экспоненциальное
уменьшение скорости для
"навязчивых").
-
anonymous-root корень [
класс ] ...
Определяет корневую
директорию (chroot) для
анонимных
пользователяй
указанного класса и их домашнюю
директорию
(используется домашняя
директория
пользователя ftp ═в
корень/etc/passwd) . Если класс не
указан, то определяет корневую
директорию для анонимных
пользователей из всех прочих классов. Если и этого нет, то
используется старый механизм
(специальная форма записи
домашней директории
пользователя ftp в
настоящем /etc/passwd).
-
guest-root
корень [
интервал-uid ] ...
корень
определяет аргумент chroot для
гостевых
пользователей и их домашнюю
директорию
(используется домашняя
директория
пользователя ═в
корень/etc/passwd) . Можно
задавать отдельные uid (имена или номера со
знаком процента перед ними) или
интервалы через дефис (границы
включаются, нижняя или верхняя гранцы могут быть
опущены). Если uid опущен, то данная строка
определяет корень для тех
гостевых
пользователей, для которых не нашлось более
конкретного описания. Если guest-root вообще не
задан, то
используется старый метод
(специальная форма записи
домашней директории
пользователя в настоящем /etc/passwd).
-
deny-uid
интервал ...
deny-gid
интервал ...
allow-uid
интервал ...
allow-gid
интервал ...
Можно задавать отдельные uid (имена или
номера со знаком процента перед ними) или
интервалы через дефис (границы
включаются, нижняя или верхняя границы могут быть
опущены). Данная команда
запрещает/разрешает доступ к серверу
определенным
пользователям и может
использоваться вместо файла ftpusers. deny
проверяется до allow и до любых других
проверок. Нельзя
смешивать uid и gid в одном
конфигурационном файле.
-
restricted-uid
интервал ...
restricted-gid
интервал ...
unrestricted-uid
интервал ...
unrestricted-gid
интервал ...
Давать/не давать реальному или
гостевому
пользователю (на анонимных не
действует) доступ вовне его
домашней директории.
-
site-exec-max-lines
число [ класс ] ...
ограничивает число строк
посылаемых командой SITE EXEC (0 - без
ограничений). По умолчанию - 20 строк.
-
dns refuse_mismatch
файл-с-сообщением [ override ]
выдавать сообщение, если прямой и
обратный адреса клиента не
совпадают. Если не указано override, то
прекращать сеанс.
-
dns refuse_no_reverse
файл-с-сообщением [ override ]
выдавать сообщение, если клиент не имеет
обратного адреса. Если не указано override, то
прекращать сеанс.
-
dns resolveroptions [options]
флаги из resolver(3), без
префикса RES_,
предварюемые плюсом или минусом.
-
ftpconversions - каждая строка
описывает возможное
преобразование файлов "на лету" и
состоит из 8 полей,
разделенных
двоеточиями (только одно
преобразование при каждом запросе):
-
удаляемый префикс (не работает)
-
удаляемый суффикс
-
добавляемый префикс (не работает)
-
добавляемый суффикс
-
исполняемая при этом внешняя
программа и ее параметры; вместо %s
подставляется временное имя файла; должна
работать как pipe; для Solaris
поменять /bin на /usr/local/bin и убрать md5sum,
которого нет
:.Z: : :/usr/local/bin/compress -d -c
%s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS
: : :.Z:/usr/local/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS
:.gz: : :/usr/local/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP
: : :.gz:/usr/local/bin/gzip -c %s:T_REG:O_COMPRESS:GZIP
: : :.tar:/usr/local/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR
: : :.tar.Z:/usr/local/bin/tar -c -Z -f -
%s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS
: : :.tar.gz:/usr/local/bin/tar -c -z -f -
%s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP
: : :.crc:/usr/local/bin/cksum
%s:T_REG::CKSUM
однако tar+gzip
почему-то не работает (tar+compress
работает!),
рекоментации насчет --use-compress-programm не
помогают
-
типы файла
(входного или
выходного) - по-моему
путаница - T_REG (обычный файл), T_ASCII
(текстовый), T_DIR
(директория) или сочетание
-
опции - O_COMPRESS, O_UNCOMPRESS,O_TAR или
сочетание
-
описание
-
ftpgroups -
нестандартные команды SITE GROUP и SITE GPASS
позволяют
пользователю поменять текущую группу. Такие
группы д.б.
перечислены в ftpgroups:
вводимое-клиентом-имя-группы:шифрованный-пароль:настоящее-имя-группы
-
ftphosts -
ограничивает доступ под
определенными именами
пользователей с указанных хостов (по
умолчанию: доступ открыт
отовсюду). Формат:
allow
имя-пользователя
шаблон-IP-адреса ... (доступ из
других мест будет закрыт)
deny
имя-пользователя
шаблон-IP-адреса ...
где
шаблон-IP-адреса
-
IP-адрес
-
шаблон в формате shell
-
адрес/cidr
-
адрес:маска
-
ftpusers - список имен
пользователей, которые есть в /etc/passwd, но
которым не надо давать ftp-доступ.
Формат журнала xferlog (для режима syslog, уровень info - нет дня недели и года):
- сокращенное английское название дня недели (Sat); отсутствует для syslog
- сокращенное английское название месяца (Dec)
- день месяца
- часы:минуты:секунды (время местное)
- год (4 цифры); отсутствует для syslog, вместо него:
- имя хоста, на котором расположен сервер
- имя процесса и номер в квадратных скобках
- xferlog
- (send): или (recv):
- продолжительность передачи в секундах
- имя удаленного хоста
- размер файла в байтах
- имя файла (полное или относительно chroot)
- тип передачи
- действие над файлом в процессе передачи
- C - сжат
- U - разжат
- T - taer-ед
- _- не было произведено никаких действий
- направление передачи
- o - с сервера
- i - на сервер
- тип пользователя
- a - анонимный
- g - guest
- r - real (из /etc/passwd)
- имя реального пользователя или идентификационная строка
(вводимая вместо пароля) для анонимного или гостя
- имя сервиса (ftp)
- способ аутентификации
- 0 - никакой
- 1 - ident (rfc931)
- аутентифицированный идентификатор пользователя. Если аутентификация не
использовалась, то звездочка.
- завершенность передачи
- c - передача была закончена
- i - не закончена
Поддерживаемые команды:
-
ABOR - прервать
предыдущую команду (должна быть
предварена сигналами telnet IP и Synch)
-
APPE - добавить к файлу
-
CDUP/XCUP - подняться на
директорию вверх
-
CWD /XCWD- поменять текущую
директорию
-
DELE
-
HELP
-
LIST (ls -lgA)
-
MKD /XMKD- создать
директорию
-
MDTM - показать время
последнего изменения файла
-
MODE - задать режим
пересылки
-
NLST - ls
-
NOOP
-
PASS - задать пароль
-
PASV - вход в "пассивный" режим
передачи
-
PORT - указать порт для
последующей передачи
-
PWD/XPWD
-
QUIT
-
REST - продолжить
прерванную ранее передачу
-
RETR - взять файл
-
RMD/XRMD - удалить
директорию
-
RNFR - исходное имя
переименовываемого файла
-
RNTO - новое имя
переименовываемого файла
-
SITE -
нестандартные команды
-
UMASK - задать umask
-
IDLE - задать inactive timeout
-
CHMOD
-
HELP
-
NEWER - показать список файлов более новых, чем
указанная дата (по
умолчанию выключено)
-
MINFO - аналогично NEWER, но выдает больше
информации
-
GROUP - сменить группу
-
GPASS - предъявить пароль группы
-
EXEC - запустить программу
-
SIZE - показать размер файла
-
STAT - показать состояние сервера (Можно
запрашивать в процессе передачи,
предварив сигналами IP и Synch
протокола telnet)
-
STOR - записать файл
-
STOU - записать файл с
уникальным именем
-
STRU - задать структуру передачи
-
SYST - показать тип
операционной системы, на которой
работает сервер
-
TYPE - задать тип передачи
-
USER - задать имя
пользователя
Изменения от 2.4.2-beta-11 до 2.6.0
Отличия 2.6.1 (2 июля 2000) от 2.6.0
Отличия 2.6.2 (29 ноября 2001) от 2.6.1
- исправлены проблемы с безопасностью, связанные с обработкой шаблонов
имен (], }, cd {)
Как делать анонимный FTP-доступ
другой автор
Стандартный in.ftpd,
входящий в поставку Solaris 2.5
в═/etc/services:
═ ═rftp 55/tcp
в /etc/inetd.conf
═ rftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd
не нравится по двум причинам:
-
не знаю насколько он
безопасен
-
не понимает команды типа reget
|
Bog BOS: FTP серверы (wu-ftpd)
|
Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru