Главная > Программное обеспечение > Программы для Интернет > |
FAQ по wu-ftpd |
Секция 2 из 3 - Предыдущая - Следующая
Все секции
- 1
- 2
- 3
Системные вызовы system на Digital Unix несколько иные чем обычно. Следуйте приведенному ниже руководству чтобы исправить это.
Входящий в Digital Unix стандартный ftpd записывает статистику после отработки chroot и Benoit Maillard (maillard@fgt.dec.com) что это происходит потому что они не используют стандартные системные вызовы. Во время просмотра дистрибутива, был найден файл syslog.c в директории support и затем изменен файл Makefile.osf в директории support/makefiles на предмет включения syslog.c в собираемую библиотеку. Затем в ходе компиляции получены две ошибки от этого файла, точнее одно предупреждение и одна ошибка. Предупреждение относилось к: if ((p = malloc(strlen(ident) + 1)) == NULL) для исправление необходимо следующее изменени: if ((p = (char *)malloc(strlen(ident) + 1)) == NULL) Ошибка же возникала врезультате "переопределения" openlog (или closelog). Она связана с переопределением следующих вызовов в <syslog.h> extern int openlog __((const char *, int, int)); extern int syslog __((int, const char *, ...)); extern void closelog __((void)); extern int setlogmask __((int)); После копирования /usr/include/syslog.h в директорию support и изменений в файле syslog.c #include <syslog.h> на #include "syslog.h" сообщения исчезли. После этих изменений все должно работать корректно как для анонимных, так и для реальных пользователей в отношении записи статистики в daemon.log файл.Это замечание было послано в список рассылки Daniel Clar (Daniel.Clar@supelec.fr).
Установка в makefile написана под использование программы install версиий
bsd. Некоторые Операционные системы используют программу install версий
SVR4. В этом случае сделайте соответствующие изменения в makefile, например:
INSTALL = /usr/ucb/install
Необходимые изменения зависят от версии Digital unix. Так для Digital
unix 4.0 строка LIBES в makefile должна быть LIBES = -lsupport и
никаких изменений в crypt() не требуется.
Внесите следующие изменения в
./src/config/config.osf :
#define SecureWare #include <sys/secdefines.h> #include <sys/types.h> #include <sys/security.h> #include <sys/audit.h> #include <prot.h>и добавьте строку в файл ./src/makefiles/Makefile.osf
LIBES = -lsupport -lsecurity -laudИ замените везде вызов crypt() на bicrypt.
А для работы необходимо полностью скопировать /etc/sia в ~ftp/etc/sia. Самый простой способ:
# cd /etc # tar -cvf - sia | (cd ~ftp/etc;tar -xpf -)Также, для того чтобы воспринимались пароли больше чем 8-мь символов, необходимо заменить строку:
crypt_alg = AUTH_CRYPT_OLDCRYPT;на
crypt_alg = AUTH_CRYPT_BIGCRYPT;Этот кусок был добавлен Andrew C. Saylor (asaylor@comsource.net).
Добавьте в ./src/ftpd.c
#define SPT_SCO 6 /* write kernel u. area */ /* FTP server. */ #include "config.h" #include <cma.h> <-- добавьте это #include <sys/types.h>информация предоставлена Andrew C. Saylor (asaylor@comsource.net).
Чтобы скомпилировать для типа "trusted system" необходимы следующие изменения В файле src/config.h замените строку:
примечание: "trusted system" - в зависимости от контекста имеет разное трактование, в данном документе это относится к системе защиты (обычно это C2 security), в то время как дословный перевод "системы доверия>
#undef SHADOW_PASWWORDна
#define SHADOW_PASSWORDВ файле src/makefiles/Makefile.hpx, строка LIBES должна быть такой:
LIBES = -lsupport -lc -lPW -lsecКриптование "root" пароля отличается от метода используемого для обычных пользователей. И в таком случае необходимо использовать вызов функции bigcrypt. Ниже приведены необходимые изменения в исходном коде:
В файле src/ftpd.c, в самом начале:
#ifdef _HPUX_SOURCE #include <hpsecurity.h> #include <prot.h> #endifи в этом же файле в функции pass(), найдите где находится похожий код и внесите изменения (возможны небольшие отличия):
char *xpasswd, *bpasswd,*salt; #ifdef KERBEROS xpasswd = crypt16(passwd, salt); #else xpasswd = crypt(passwd, salt); bpasswd = bigcrypt(passwd, salt); <-- КАК ДОЛЖНО БЫТЬ #endif #ifdef ULTRIX_AUTH if ((numfails = ultrix_check_pass(passwd, xpasswd)) < 0) { #elif defined(_HPUX_SOURCE) if (pw == NULL || *pw->pw_passwd == '\0' || (strcmp(xpasswd, pw->pw_passwd) && strcmp(bpasswd, pw->pw_passwd))) { <-- И ЗДЕСЬ ТОЖЕ #else /* The strcmp does not catch null passwords! */ if (pw == NULL || *pw->pw_passwd == '\0' || strcmp(xpasswd, pw->pw_passwd)) { #endif reply(530, "Login incorrect.");Информация предоставлена Jose Luis Martinez Garcia (jluis@sitecal.es).
Если описанное выше не помогло, рассмотрим более расширенно: If the above doesn't work, some more notes :
/usr/include/shadow.h: Этот *системный* файл приводит к падению gcc при компиляции. Необходимо изменить следующее объявление: extern int lckpwdf(void), to extern int lckpwdf(void); <<--- note the ';' realpath.c: Помнится была одна внешняя ссылка (мб больше чем одна?) которая не соответствовала внутреннему объявлению. Помнится изменил объявление realpath в соответствии со внешним. Оригиналю были удалены и поэтому нет возможности точно описать изменения. ftpcmd.c: Этот файл создается из ftpcmd.y (через yacc/bison). Увы созданный код невозможно откомпилировать. Пришлось вставлять 2-е структуры взяв их из более ранней версии wu-ftpd. Вроде бы это были 'cmdtab[]' и 'sitetab[]' структуры и они вызывались до их объявления. Makefile.hpx: Изменен так чтобы не удалял исправления в ftpcmd.c описанные выше. ftpd.c: 1) установлены правки в соответствие с инструкцией в FAQ-е. Новый код работает без проблем (Вероятно попробую портировать его в POP3 сервер). 2) изменен printf где-то в районе SEPPROCTITLE для включения "wuftpd" в строку процесса (подобно hp-ux ftpd). Тут необходимо небольшое лечение связанное с тем что при RETR к именам файлов приклеиваются ^M^J.Описание прислано Chuck Davis (cdavis@wrair-amss.army.mil).
Доп. ремарка: В "trusted system'е" HP's вызов getpwnam не применяется при работе с криптованными паролями. Вместо нее нужно использовать getprpwnam. Измените ftpd.c на предмет использования getprpwnam.
pr_pw = getprpwnam(pw->pw_name); /* get shadow password */ xpasswd = crypt(passwd, pr_pw->ufld.fd_encrypt); bpasswd = bigcrypt(passwd, pr_pw->ufld.fd_encrypt);
Суммарные замечания по установке wu-ftpd в HP-UX 10.20:
wu-ftp2.4 была
установлена на "чистой" HPUX 10.20, которая пришла прямо от HP с уже
постренным ядром и важное отличие этой сборки от "generic" в том что были
урезаны X-libs и X-utils (что имеет смысл порекомендовать если вы собираете
HP 10.20 только для ftp).
- Возьмите ОБА пакета wu-ftp2.4 и ansi-c компилятор для сборки (я получил свой у HP, вы можете запросить ansic.hp-10.20.tar.gz)
- сначала разверните накет содержащий "C" (HP приходит со стандартным компилятором, который можно использовать ЛИШЬ для сборки ЯДРА). Для установки компилятора "C" следуйте документации README/INSTALL. Не забудьте чтобы новый компилятор был доступен в пути или укажите где нужно откуда его вызывать.
- Соберите wu-ftpd
- Установите сервер
- Специальные замечания по настройке для сильно загруженного сервера ftp:
Сопровождаемый мной ftp сервер имеет очень сильную загрузку и это
потребовало некоторых изменений в конфигурации ядра в отношении "lock"
файлов и одновременному доступу к одним и тем же файлам. Все это было
реализовано через SAM. Существенным моментом для сохранения доступа к сильно
загруженной машине было необходимое уменьшение состояния fin_wait так чтобы
"lock" на открытые файлы сохранялся бы минимальное время. В моем случае
fin_wait был уменьшен до 5 минут или меньше.
Этот раздел обсуждает особенности компиляции wuftpd в необычных ситуациях.
Добавьте в Makefile для вашей OS поддержку AFS libs/includes. На данный момент такая поддержка сделана в Makefile только для AIX. Используйте как пример. затем добавьте следующую строку в #include section of src/ftpd.c :
#include <afs/stds.h>добавлено Perry L. Morgan (pmorgan@uceng.uc.edu).
Michael Brennen (mbrennen@fni.com) написал в список рассылки следующее:
Для использования SKEY необходимо следующее: Раскоментировать строку #undef SKEY в config.h. Иногда нужно время чтобы найти это место, но думается что это не проблема. Скопируйте skey.h в директорию src. Скопируйте библиотеку libskey.a в директорию support. Добавьте в нужный вам файл Makefile.* из src/makefiles следующие строки: добавьте "-DSKEY" в макроопределение CFLAGS; добавьте "-lskey" в макроопределение LIBES; Это должно помочь, если нет, попросите помощи.
Посмотрите опцию 'deny-mail' в руководстве ftpaccess(5).
Обычно достаточно изменить строку для ftp сервера в файле /etc/inetd.conf (файл в котором определяется какие серверы запускются через inetd. Однако в некоторых операционных системах за это отвечает другой файл).
В последних версиях, если не задано никаких опций в командной строке, wuftpd запустится с опциями которые у него заданы по-умолчанию, в этом режиме он не анализирует конфигурацию из файла ftpaccess. Чтобы использовать конфигурацию из ftpaccess добавьте в командную строку опцию -a в файле inetd.conf.
Это может быть задано в командной строке или использую специальное переопределение в файлах /etc/services и /etc/inetd.conf. Для задания порта через командную строку ищите использование опции -P и -p в руководстве ftpaccess(5).
Или используйте специальные переопределения, добавьте 2-а порта в /etc/services (используйте не задействованные другими службами на вашей машине) и затем запустите wuftpd на этих портах (для примера посмотрите как определены порты для стандартного ftp). Вы можете попробовать так:
ftptest 4021/tcp #command port ftptest-data 4020/tcp #data portЗатем сделайте изменения в /etc/inetd.conf для запуска wuftpd :
ftptest stream tcp nowait root /usr/etc/in.ftpd in.ftpdпримеч.: Строка должна соответствовать вашей OS и конфигурации, это всего лишь пример.
Получено от W. James Showalter (gamma@mintaka.disa.mil)
Возможно что ваш демон inetd обрезает строку с большим списком параметров (4 или 5) В этом случае вы можете попытаться воспользваться следующей программой wrapper'ом:
/* wrapper for wuftpd to add command line arguments that don't fit under inetd */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <syslog.h> int main(argc,argv) int argc; char **argv; { char *path="/local-adm/bin/ftpd"; char *cmd="ftpd"; fflush(stderr); fflush(stdout); errno=0; execl(path,cmd,"-a","-l","-L","-u022",NULL); openlog("wrapftpd",LOG_PID, LOG_LOCAL6); syslog(LOG_WARNING,(const char *)strerror(errno)); closelog(); exit(EXIT_FAILURE); }Код от Albert Lunde (Albert-Lunde@nwu.edu)
Распакуйте этот файл в пустую директроию с именем WUFtpd250 Не заходя в эту директорию наберите 'pkgadd -d .' и получите на экран сообщение схожее с:
# pkgadd -d . The following packages are available: 1 WUFtpd250 wu-ftpd 2.5.0 SPARC/ULTRAsparc 2.5.1 - 2.5 (sun4c,sun4d,sun4e,sun4m,sun4u,sun4u1) 2.5.0 Select package(s) you wish to process (or 'all' to process all packages). (default: all) [?,??,q]:
Оригинальная версия wu-ftpd имела проблему представления 2000-ого года при разборе MDTM (время модификации файла). В этой версии не велось никаких работ по решению этой проблемы.
Эта проблема была решена в версии wu-ftpd 2.4.2 beta 14 реализованной в Августе 1997. После этой правки wu-ftpd считается полностью соответствующей Y2K.
Правка заключалась в следующем :
В ftpcmd.y было добавлено следующее
(эта часть касается синтаксиса: MDTM check_login SP pathname CRLF)
reply(213, "19%02d%02d%02d%02d%02d%02d", t->tm_year, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);19%02d необходимо было заменить на %04d и t->tm_year на t->tm_year + 1900:
reply(213, "%04d%02d%02d%02d%02d%02d", t->tm_year + 1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
Когда анонимный пользователь осуществляет вход, banner файлы открываются относительно "корня" структуры анонимного пользователя. Имейте это ввиду. Это нужно иметь ввиду в случае расположения banner'а или использования на него link'а.
Этот формат содержит параметры ДНЯ и ВРЕМЕНИ доступа. Возможные элементы: Sa,Su,Mo, ... Any (для любого дня). Например: SaSu|Any1800-0700 означает возможность круглосуточного доступа в Субботу и Воскресенье или с 18:00 по 07:00 во все остальные дни. Проверьте ftpd на правильность восприятия временной зоны.
Можно воспользоваться ftpcheck который находится на <URL:ftp://ftp.cle.ab.com/pub/ftpcheck.v2.3
Все счетчики и _максимально_количество_ в том числе, зависят от класса к которому относится пользователь, однако, до входа пользователя класс к которому он принадлежит, естественно еще не определен(с тех пор как wu-ftpd стал брать переменные realuser/anonymous/guestuser для вычисления класса пользователя).
Во первых, убедитесь что эти утилиты собраны статически и не требуют "shared" библиотек. Что касается GNU fileutils, их можно взять здесь: <URL:ftp://prep.ai.mit.edu/pub/gnu/fileutils-3.16.tar.gz> (номера версий могут отличаться).
Для разных операционных систем могут дополнительно требоваться различные библиотеки или устройства. Вы можете проверить это через "chroot" для домашней директории ftp. Например, проверить как в этом случае работает /bin/ls в ~ftp директории:
chroot ~ftp /bin/ls
Или, если партиция смонтирована с "-nosuid", что также приводит к подобной ошибке в таких системах как SunOS или Solaris, для уточнения смотрите страницу: <URL:http://www.stokely.com/stokely/sunservice.tips/11991.html>
Сначала почитайте руководства системы - man, оригинального in.ftpd(1m). Который должен содержать скрипт для полной установки ftp, посмотрите его через призму того как вы установили сами. Затем, если файловая система с ~ftp смонтирована с опцией "-nosuid" файлы специальных устройств работать не будут.
Solaris'у необходимо наличие файлов спец.устройств ~ftp/dev/tcp и ~ftp/dev/zero и дополнительных библиотек. Для получения более точной информации читайте системные руководства Solaris или используйте команду man command-name. Для определения библиотек необходимых для работы команд выполните команду ldd ls например и так далее. Также необходимо наличие файла ~ftp/etc/group для выполнения команды ls, без которого она не будет исполняться. Как и ~ftp/etc/group так и ~ftp/etc/passwd эти файлы должны содержать минимум информации необходимой лишь для работы ftp, те никаких строк из /etc/passwd для реальных пользователей и всего что может послужить хотя бы намеком на возможные проблемы security.
Обычно требуется включения следующих библиотек :
ld.so, ld.so.1,
libc.so.1, libdl.so.1, libintl.so.1, libmp.so.1, libnsl.so.1,
libsocket.so.1, libw.so.1, nss_compat.so.1, nss_dns.so.1, nss_files.so.1,
nss_nis.so.1, nss_nisplus.so.1, straddr.so
Проблемы связанные с /etc/group описаны Eric (ewedaa@kset.com).
Решение этой проблемы обсуждалось в FAQ группы comp.unix.solaris: <URL:http://www.fwi.uva.nl/pub/solaris/solaris2> пункт 6.24 (на данный момент).
Воспользуйтесь командой ldd чтобы определить какие библиотеки используются этими командами. Кроме того в случае испоняемых модулей в ELF формате добавьте ELF загрузчик ld-linux.so в ~ftp/lib.
ELF изменения присланы Al Longyear (longyear@sii.com).
Скопируйте в ваше дерево ftp статическую версию ls (/sbin/ls) вместо
динамической, статическая имеет размер около 400K.
Создайте файлы passwd
и group в ~ftp/etc. Скопируйте содержимое /etc/sia в
~ftp/etc/sia это файлы matrixconf и siainitgood.
SunOS требует наличия файлов ~ftp/dev/zero, ~ftp/dev/tcp и некоторых библиотек, действуйте в соответствие с man. И проверьте флаги доступа указанных выше файлов.
AIX поставляется со скриптом для автоматической установки.
AIX 3.2.5 - /usr/lpp/tcpip/samples/anon.ftp
AIX 4.1.4 -
/usr/samples/tcpip/anon.ftp
После выполнения скрипта измените ражимы доступа к ~ftp/pub на безопасные.
Кроме того AIX поставляется с утилитой 'dump' с помощью которой можно посмотреть какие библиотеки использовались для сборки команды-программы.
Пояснения присланы Eilon Gishri (eilon@aristo.tau.ac.il)
Для IRIX 6.2 требуется наличие файла ~/ftp/dev/zero и библиотек. Перед созданием /dev/zero, проверьте его текущие номера major и minor :
ls -lL /dev/zeroИ создайте подобное устройство а ~ftp используя :
cd ~ftp/dev mknod zero c <major> <minor> cd .. chmod 555 devВозможно потребуется скопировать следующие библиотеки /lib/libc.so.1 в ~ftp/lib/libc.so.1 и /lib/rld в ~ftp/lib/rld. Они требуются для команд ls, compress, gtar и gzip.
Можно определить какие библиотеки нужны для этих програм:
csh# setenv _RLD_PATH /usr/lib/rld.debug csh# setenv _RLD_ARGS '-v -quickstart_info -stat'Для остановки просмотра достаточно установить переменные среды:
csh# unsetenv _RLD_PATH csh# unsetenv _RLD_ARGSПолную информацию по Irix можно найти в IRIX Insight Library (Online Books) в книге/глава "IRIX Admin: Networking and Mail" в параграфе "How to Set Up a Proper Anonymous FTP Account". Информация получена от Frans Stekelenburg (gjs@knmi.nl) and Jim Davis (jdavis@cs.arizona.edu)
SCO требует /dev/socksys.
Это совершенно некорректно по отношению к системе. Цитата : Проблема в
том что ls_short и ls_long были определены неверно (система была
скомпилирована BSD-вым компилятором с использованием BSD конфигурационного
файла) используя ls -lA и ls -lgA соответственно. Это привело к тому что
команда ls работает с ошибками (поскольку в данный момент операционка SVR4)
и самое главное что весь вывод ls направляет только в stderr и нет
возможности посмотреть stdout.
просто Ноу Комментц
Информация от Perry A. Stupp (pstupp@i-com.com)
После апгрейда произошли изменения с вашей OS. Чаще всего: новые
библиотеки в том числе и shared. Также могли измениться major/minor номера
устройств. Пересмотрите ваши разделямые библиотеки и устройства если такое
произошло после апгрейда.
А лучше пересобирите wu-ftpd заново.
Wu-ftpd поставляется с прекрасными руководствами, man, которые содержат всю необходимую информацию по данному вопросу.
Тем не менее, стоит отметить что ряд особенностей связанный со сменой среды после chroot для анонимных пользователей применим и к guest.
Направление shutdown в файле ftpaccess указывает на существующий в настоящий момент файл. Либо измените направление, либо удалите файл для перехода из режима shutdown в рабочий режим.
В случае, если вы использовали команду ftpshut, необходимо помнить что для возобновления работы ftp демона необходимо удалить файл созданный ftpshut вручную.
Проверьте следующее :
Существует несколько возможных вариантов, большинство связано с отличием задания параметров командной строки для разных версий команды tar.
/bin/tar -cf - %s
, результат будет как в случае
использования /bin/tar -cvf - %s
. Опция -v
будет
добавлять лишние данные в поток. Решение : заменить на следующее
/bin/tar cf - %s
без первого "-".
В случае использования Solaris 2.4 и GNU's tar-1.11.8 (сконфигурированным и скомпилированным с флагом --disable-nls) используйте флаг в GNU tar --use-compress-program=путь к программе сжатия
например :
: : :.tar.Z:/bin/ftp-exec/tar -c
--use-compress-program=/bin/ftp-exec/compress -f -
%s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS
: :
:.tar.gz:/bin/ftp-exec/tar -c --use-compress-program=/bin/ftp-exec/gzip -f -
%s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP
Да. Строки для файла ftpconversions такие :
:.zip: : :/bin/unzip -qq -p %s:T_REG|T_ASCII:O_UNCOMPRESS:UNZIP : : :.zip:/bin/zip -qq -r - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:ZIPСам Info-ZIP можно найти на <URL:http://quest.jpl.nasa.gov/Info-ZIP/>
Создайте для этой цели соответствующий SHELL (например отредактировав под
свои цели /[usr/]bin/true[false]. Затем отразив это в
соответствующих изменениях /etc/shells. И последнее, после отладки
заменить shell пользователя на ваш.
Затем : убедитесь что
пользователь не сможет каким-либо путем выполнить из под этого account'а
команды.Одна из проблем связана с работой sendmail.
Дополнительную информацию и скрипты можно найти на : <URL:http://www.landfield.com/wu-ftpd/ftponly/ftponly.html>
Секция 2 из 3 - Предыдущая - Следующая
Вернуться в раздел "Программы для Интернет" - Обсудить эту статью на Форуме |
Главная - Поиск по сайту - О проекте - Форум - Обратная связь |