Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

Как установить безопасный и надёжный FTP сервер


Как установить безопасный и надёжный FTP сервер

     В этом документе идет речь о том, как установить безопасный и надёжный FTP сервер. Как известно для передачи незаконных файлов чаще всего используются именно FTP сервера. Также довольно часто хакерам удается получить доступ к системам с неправильно установленными FTP серверами.
     В этом FAQ изложены рекомендации для системных администраторов, которые помогут им правильно настроить FTP сервер, и свести к минимуму угрозу проникновения в систему злоумышленников через этот вид сервиса.

Содержание:
Общие принципы установки анонимных FTP серверов. Установка FTP сервера с переназначаемым корневым каталогом (chrooted FTP server). Информация специфищеская для различных операционных систем. Старые SVR2 и SVR3 системы, RTU 6.0 (Masscomp, нинешний Concurrent Real Time UNIX), и AT&T 3B1 и 3B2 HPUX Solaris 2.x SunOS Где можно найти другие FTP демоны Как узнать, является ли FTP сервер безопасным Archie

1. Общие принципы установки анонимных FTP серверов.

Создайте пользователя ftp в /etc/passwd. Он может принадлежать к любой группе, например arhciv (если группа не определена то пропишите ее в файле /etc/group). Домашний каталог должен быть ~ftp, где ~ftp это полный путь к каталогу, который будет "корневым", для всех публичных (anonymous) пользователей. Создание этого пользователя "запускает" публичный FTP сервер.

Используйте неправильный пароль и shell для этого пользователя. Строка из passwd файла для этого пользователя должна быть подобной этой: ftp:*:400:400:Anonymous FTP:/home/ftp:/bin/true Создайте каталог ~ftp. Владельцем каталога должен быть root (но не ftp), группа таже, что и у пользователя ftp (например коммандой chown root.archiv ftp). Таким образом права доступа "владельца" принадлежат root, а групповие права принадлежат всем остальным пользователям. Установите права доступа к каталогу ~ftp в 0555 (например коммандой chmod 555 ftp)

Внимание: В некоторых описания рекомендуют делать владельцем каталога ~ftp пользователя ftp. Если вы хотите спать спокойно то НИКОГДА НЕ ДЕЛАЙТЕ ЭТОГО!.

 

Создайте каталог ~ftp/bin. Владелец каталога root, группа wheel. Права доступа 0111 (noread, nowrite, execute).

 

Скопируйте программу ls в каталог ~ftp/bin. Назначте владельцем для ls - root. Права доступа 0111 (noread, nowrite, execute). Если вы будете записывать в этот каталог еще программы, то права доступа и владельца назначайте точно также как и для ls.

 

Создайте каталог ~ftp/etc. Владелец каталога root, группа wheel. Права доступа 0111 (noread, nowrite, execute).

 

Создайте в каталоге ~ftp/etc усеченные версии файлов подобные /etc/passwd и /etc/group. Права доступа к файлам должны быть 0444. В файле ~/ftp/etc/passwd должны быть описаны только пользователи root, daemon, uucp и ftp. Файл ~/ftp/etc/group должен содержать описание группы к которой принадлежит пользователь ftp. Также в файле ~/ftp/etc/passwd вы можете создать описание пользователей, чьи файлы будут находиться в каталогах сервера (это нужно для команды ls). Например, для всех файлов в каталоге ~ftp/pub/linux владельцем является 'balon' c UID=156, в этом случае вы можете записать в ~ftp/etc/passwd файл следующее: linux:*:156:120:Kazik Balon:: Незабудьте удалить из файла ~ftp/etc/passwd *ВСЕ* пароли, записав вместо них символ '*'. root:*:0:0:Ftp maintainer::
ftp:*:400:400: Anonymous ftp:: Для большей безопасности вы можете вообще не создавать в каталоге ~ftp/etc файлы, passwd и group. В этом случае команда ls не будет показывать имена владельцев и групп файлов. Но учтите, что некоторые из FTP демонов могут использовать информацию из passwd и group файлов в других целях.

 

Создайте каталог ~ftp/pub. Сделайте владельцем каталога себя и назначте группу туже, что и пользователя ftp. Права доступа к каталогу должны быть 0555.

Файли размещенные в этом каталоге будут доступны по чтению для всех "публичных" пользователей. Все каталоги в ~ftp/pub должны иметь права доступа 0555.

Внимание: Никакие каталоги, подкаталоги или файлы размещенные в каталоге ~ftp не должни принадлежать пользовалелю ftp. Некоторые современные FTP демоны позволяют изменять владельлев файлов и каталогов с помощью команд подобных chown. Это можно запретить в файле конфигурации FTP сервера. Например, для WuFTP вы можете в его файле конфигурации указать следующее:


# all the following default to "yes" for everybody

delete          no      guest,anonymous         # delete permission?

overwrite       no      guest,anonymous         # overwrite permission?

rename          no      guest,anonymous         # rename permission?

chmod           no      anonymous               # chmod permission?

umask           no      anonymous               # umask permission?

 

Если вы ходите дать возможность анонимным пользователям записивать файлы на ваш сервер, создайте каталог ~ftp/pub/incoming. Этот каталог должен принадлежать root и иметь права доступа 733. И виполните команду chmod +t ~ftp/pub/incoming. FTP демон обычно не позволяет анонимным пользователям перезаписывать файлы , но обыкновенный пользователь системы может удалить их. Установка прав доступа в 1733 запрещает это. Ниже приведена часть файла конфигурации FTP демона управляющая процессом загрузки файлов на сервер.


# specify the upload directory information



upload  /var/spool/ftp  *       no

upload  /var/spool/ftp  /incoming       yes     ftp     staff   0600    nodirs



# path filters



path-filter  anonymous  /etc/msgs/pathmsg  ^[-A-Za-z0-9_.]*$  ^.  ^-

path-filter  guest      /etc/msgs/pathmsg  ^[-A-Za-z0-9_.]*$  ^.  ^-

Здесь запрещена загрузка (upload) файлов во все каталоги сервера, но потом она разрешается для каталога /incoming причем владельцем файлов будет ftp а права доступа 0600.

Рекомендация: создавайте всю структуру FTP сервера (или только каталог incoming) в другом дисковом разделе. Это поможет предотвратить преднамеренное заполнение всего вашего системного диска всяким мусором.

Если вы используете WuFTP то вы можете сконфигурировать некоторые дополнительные функции, Например, ахивация/разархивация файлов 'на лету', или создание tar файла с иерархией каталогов. Для этого вам необходимо получить исходные тексты утилит gzip, gnutar, compress м скомпилировать их без использования динамических библиотек. Потом разместите эти файлы в каталог ~ftp/bin и отредактируйте файл /etc/ftpconversions чтобы разрешить эти операции.

Gary Mills написал небольшую программы реализующую следующее:

Для выполнения комманд tar и compress, он написал небольшую программу pipe, и скомпилировал без использования динамических библиотек. Его файл /etc/ftpconversions выглядит так:


#strip prefix:strip postfix:addon prefix:addon postfix:external command:types:options:description



:.Z:  :  :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS

:-z:  :  :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS

:  :  :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS

:  :  :.tar:/bin/tar cf - %s:T_REG|T_DIR:O_TAR:TAR

:  :  :.tar.Z:/bin/pipe /bin/tar cf - %s | /bin/compress -c:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS

:  :  :.tar:/bin/gtar -c -f - %s:T_REG|T_DIR:O_TAR:TAR

:  :  :.tar.Z:/bin/gtar -c -Z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS

:  :  :.tar.gz:/bin/gtar -c -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP



А здесь сама программа:

-------- CUT HERE ------------




/* pipe.c: exec two commands in a pipe */

#define NULL (char *)0

#define MAXA 16



main(argc, argv) int argc; char *argv[]; {

char *av1[MAXA], *av2[MAXA];

int i, n, p[2], cpid;                                                      



i = 0; n = 0;

while ( ++i < argc && n < MAXA ) {

  if ( *argv[i] == '|' && *(argv[i]+1) == '' ) break;

  av1[n++] = argv[i];

}

if ( n == 0 ) uexit();

av1[n] = NULL;

n = 0;

while ( ++i < argc && n < MAXA )

av2[n++] = argv[i];

if ( n == 0 ) uexit();

av2[n] = NULL;

if ( pipe(p) != 0 ) exit(1);

if ( ( cpid = fork() ) == (-1) ) exit(1);

else if ( cpid == 0 ) {

  (void)close(p[0]);

  (void)close(1);

  (void)dup(p[1]);

  (void)close(p[1]);

  (void)execv(av1[0], av1);

  _exit(127);

} else {

  (void)close(p[1]);

  (void)close(0);

  (void)dup(p[0]);

  (void)close(p[0]);

  (void)execv(av2[0], av2);

  _exit(127);                                                            

}



/*NOTREACHED*/



}



uexit() {

(void)write(2, "Usage: pipe <command> | <command>n", 34);

exit(1);

}



-------- CUT HERE ------------

 

И еще некоторые вещи, которые не помешало бы сделать:

как root выполнить следующие комманды: touch ~ftp/.rhosts
touch ~ftp/.forward
chmod 400 ~ftp/.rhosts
chmod 400 ~ftp/.forward тоесть создать файлы .forward и .rhosts нулевой длинны с вдадельцем root и правами доступа 400.

Если вы в каталог ~ftp или его подкаталоги монтируете диски с других машин, то устанавливайте для них режим read-only (только чтение). Вот пример записи для файла /etc/fstab для машины с запушенным ftp сервером: other:/u1/linux /home/ftp/pub/linux nfs ro,noquota,nosuid,intr,bg 1 0 По этой записи смотнируется в каталог /home/ftp/pub/linux диск с машины 'other' без дисковой квоты (noquota), без поддержки suid программ, "прерываемым" - на случай если хост 'other' не работает.

2. Установка FTP сервера с переназначаемым корневым каталогом (chrooted FTP server).

Это раздел вставлен Marcus J Ranum <mjr@tis.com> Пререкомпилируйте ваш ftpd без использования динамических библиотек и попестите его в каталог ~ftp/bin. Влажельцем должен быть root.

 

Скомпилируйте без использования динамических библиотек программу ls и поместите ее тоже в каталог ~ftp/bin. Для Sun, можно использовать портированную из BSD версию комманы ls. Ее можно найти на ftp://ftp.tis.com/pub/firewalls/toolkit/patches/ls.tar.Z Владельцем для ls должет быть root.

 

Владельцем для каталога ~ftp сделайте root и права доступа установите в 0755 (ЭТО ОЧЕНЬ ВАЖНО!)

 

Создайте копии файлов ~ftp/etc/passwd и ~ftp/etc/group (незабудьте убрать пароли), владельцем должен быть root.

 

Создайте программу враппер ("wrapper") (один из вариантов приведен ниже) и пропишите ее в /etc/inetd.conf


/*

** Программа подразумевает, что вы выбрати в катестве базоваго каталога /var/ftp

** Если у вас другой каталог, то замените во всем тексте /var/ftp на полный путь

** к выбранному вами каталогу

** Прим: Не используйте для ftp катагог '/' (корневой)!

*/

main()

{



if(chdir("/var/ftp")) {

perror("chdir /var/ftp");

exit(1);

}

if(chroot("/var/ftp")) {

perror("chroot /var/ftp");

exit(1);

}



/* optional: seteuid(FTPUID); */

execl("/bin/ftpd","ftpd","-l",(char *)0);

perror("exec /bin/ftpd");

exit(1);

}

Options:

Вы можете использовать 'netacl' из toolkit или tcp_wrappers для достижения такого же эффекта.

Также вы можете в исходных текстах ftpd найти все места где вфзфвается ф-ция seteuid() убрать эти вызовы, и в программе "враппере" вставить вызов setuid(ftp) перед вызовом ftpd. Это предотвратит возможность подучения root привелегий, если в вашем ftpd будет найдена "дырка".

 

Проследите, что бы во всей иерархии каталогов на FTP сервере были правильно устаеовленны права доступа и владельцы файлов, и никогда не размещайте на FTP исполняемые файлы (с установленным флагом executed).

 

Теперь файл ~/dtp/etc/passwd полностью отдельный и независимый от системного файла /etc/passwd.

ЗАПОМНИТЕ:

Если через ваш ftpd кто то сможет получить привелегии "root" то это может закончиться очень печально. В связи с этим очень хорошей рекомендацией является следующее - старайтесь не запускать "демонов" от пользователя root. Многие так стартуют, но не всем им нужны root'овые привелегии. Вы можете проверить с какимы правами работают программы с помощью комманды 'ps uax'

3. Информация специфищеская для различных операционных систем.

Некоторым системам требуется устройство /dev/tcp: Старые SVR2 и SVR3 системы RTU 6.0 (Masscomp, now Concurrent Real Time UNIX), AT&T 3B1 и 3B2

 

[dev/tcp]

Некоторые реализации ftpd требуют наличия ~ftp/dev/tcp для обеспечения работы анонимного FTP сервера.

Вы можете создать это устройство (man mknod) в катадоге ~ftp/dev/ c такими же major и minor номерами, как и у системного /dev/tcp.

~ftp/dev - это каталог, ~ftp/dev/tcp - символьное устройство. Владелец м группа для него 'root'. Права доступа для ~ftp/dev должны быть read/write/exec для владельца и read/exec для группы, для ~ftp/dev/tcp права владельца read/write, права для группы read.

 

HPUX

[Logging] Если вы используете ftpd от HP, то для включения долее подробного протоколирования в файле /etc/inetd.conf для ftpd нужно указать ключ '-l'.

Solaris 2.x

[Script] В ОС Solaris содержится скрипт для установки анонимного FTP сервера. Его описание вы можете найти в мане для ftpd (man ftpd). Мы вам рекомендуем просмотреть, что этот скрипт делает, на предмет возможных ошибок в конфигурации связанных с безопастностью.

 

SunOS

[Libraries] Для обеспечения работы в SunOS с динамическими библиотеками, необходимо выполнить следующее: Создать каталог ~ftp/usr. Владелец root, права доступа 0555.

 

Создать каталог ~ftp/usr/lib. Владелец root, права доступа 0555.

 

Скопировать загрущик ld.so в каталог ~ftp/usr/lib. Владелец root, права доступа 0555.

 

Скопируйте файлы libc.so.* в каталог ~ftp/usr/lib

Для libc.so.* - владелец root, права доступа 0555.

Note: Для версий 4.1.2 или более ранних, вам понадобиться скопировать еще файлы /usr/lib/libdl.so.* в каталог ~ftp/lib.

 

Создайте каталог ~ftp/dev. Владелец root, права доступа 0111.

 

Для работы загрущика необходим ~ftp/dev/zero. Перейдите в каталог ~ftp/dev и создайте его с помощью команды: mknod zero c 3 12 Владелец для ~ftp/dev/zero - root. Права доступа на чтение (0444).

Внимание: Для новичков: Не пытайтесь скопировать /dev/zero в ~ftp/dev/zero! /dev/zero это безконечный файл, который будет копироваться пока не заполнит весь ваш диск.

 

Если вы не хотите переносить библиотеки, то вы можете воспользоваться версией команды ls, которая скоипилированна без использования динамических библиотек. На CD-ROM с SunOS вы можете ее найти, причем уже скомпилированную. В этом случае вам нужно произвести действия описанные в пунктах #5-6.

[Logging]Стандартный сановский ftpd протоколирует *всю* информацию о паролях. Для исправления этого, вам нужно установить патч:


101640-03       SunOS 4.1.3: in.ftpd logs password info when -d option is used.

В файле /etc/inetd.conf найдите строку, которая начинается с "ftp". В конце этой строки вы найдете "in.ftpd". Исмените это на "in.ftpd -dl". В /etc/syslog.conf, добавте строку типа этой:

                      

daemon.*                /var/adm/daemonlog

Протоколируемая информация может быть разделена (что особенно нужно для SunOS4.1.1, которая не обрабатывает запись вида daemon.*), например:


daemon.info                                    /var/adm/daemon.info

daemon.debug                                   /var/adm/daemon.debug

daemon.err                                     /var/adm/daemon.err

Примечание, колонки должны разделяться символами табуляции, а не пробелами, иначе это работать не будет.
Для создания лог файла выполните команду touch /var/adm/daemonlog, и перезагрузите ваши inetd и syslogd. Если у вас не установлен патч, то обязательно сделайте зладельцем лог файла root и установите права доступа в 0600, иначе любой сможет прочитать этот файл и выбрать из него пароли пользователей.

Внимание: Вы можете все свои файлы протоколов сделать доступными только для root. Это защитит от возможности вычислить пароль пользователя, если он его ввел вместо своего имени.

4. Где можно найти другие FTP демоны

Wuarchive FTP 2.4- A хороший FTP демон, с расширенным управлением доступом, системой протоколирования, и многогранной конфигурацией.

Его можно найти на FTP сервере ftp.uu.net в каталоге "/networking/ftp/wuarchive-ftpd". Вы можете проверить контрольные суммы для архивов, что бы убедиться в том, что вы получили именно ту версию, что нужно. (Внимание: в старых версиях Wu-FTP есть ошибки по части безопастности!)


                        BSD        SVR4        

     File               Checksum   Checksum    MD5 Digital Signature

     -----------------  --------   ---------   --------------------------------

     wu-ftpd-2.4.tar.Z  38213  181  20337 362  cdcb237b71082fa23706429134d8c32e

     patch_2.3-2.4.Z    09291    8  51092  16  5558a04d9da7cdb1113b158aff89be8f



DECWRL ftpd version 5.93, можно получить на сервере gatekeeper.dec.com в каталоге "/pub/misc/vixie" directory.


                        BSD        SVR4        

     File               Checksum   Checksum    MD5 Digital Signature

     -----------------  --------   --------- --------------------------------

     ftpd.tar.gz        38443  60  1710 119  ae624eb607b4ee90e318b857e6573500



Public Domain Sources:

  ftp.uu.net ~ftp/systems/unix/bsd-sources/libexec/ftpd
gatekeeper.dec.com ~ftp/pub/DEC/gwtools/ftpd.tar.Z

5. Как узнать, является ли FTP сервер безопасным

В этом разделе приведен небольшой список действий необходимых для проверки надежности вашего FTP сервера. Проверьте, не обрабатывает ли ваш сервер комманду SITE EXEC при соединении через телнет на 21 порт с приследующим набором команды SITE EXEC. Если ваш сервер обрабатывает эту команду, то убедитесь, что у вас стоит ftpd последней версии, так как в старых версиях была возможность в такой ситуации получить доступ к shell через 21'й порт.

 

Убедитесь, что никто не может создать файл или записать файл расположенный в основном каталоге FTP сервера. Если кто нибуть зайдет и создаст файлы .rhosts и .forward с определенным содержимым, то это даст возможность вторгнуться в вашу систему любому злоумышленнику.

 

Убедитесь, что на FTP сервере нет файлов или каталогов принадлежащих пользователю ftp (основной каталог особенно). Несоблюдение этого также открывает возможность проникновения в систему.

 

Убетитесь, что у вас стоит FTP демон последних версии.

6. Archie

Поиск программ на FTP серверах. Войдите на один из этих серверов как archie, или воспользуйтесь соответствующей программой-клиентом.




    archie.ac.il               132.65.20.254    (Israel server)

    archie.ans.net             147.225.1.10     (ANS server, NY (USA))

    archie.au                  139.130.4.6      (Australian Server)

    archie.doc.ic.ac.uk        146.169.11.3     (United Kingdom Server)

    archie.edvz.uni-linz.ac.at 140.78.3.8       (Austrian Server)

    archie.funet.fi            128.214.6.102    (Finnish Server)

    archie.internic.net        198.49.45.10     (AT&T server, NY (USA))

    archie.kr                  128.134.1.1      (Korean Server)

    archie.kuis.kyoto-u.ac.jp  130.54.20.1      (Japanese Server)

    archie.luth.se             130.240.18.4     (Swedish Server)

    archie.ncu.edu.tw          140.115.19.24    (Taiwanese server)

    archie.nz                  130.195.9.4      (New Zealand server)

    archie.rediris.es          130.206.1.2      (Spanish Server)

    archie.rutgers.edu         128.6.18.15      (Rutgers University (USA))

    archie.sogang.ac.kr        163.239.1.11     (Korean Server)

    archie.sura.net            128.167.254.195  (SURAnet server MD (USA))

    archie.sura.net(1526)      128.167.254.195  (SURAnet alt. MD (USA))

    archie.switch.ch           130.59.1.40      (Swiss Server)

    archie.th-darmstadt.de     130.83.22.60     (German Server)

    archie.unipi.it            131.114.21.10    (Italian Server)

    archie.univie.ac.at        131.130.1.23     (Austrian Server)

    archie.unl.edu             129.93.1.14      (U. of Nebraska, Lincoln (USA))

    archie.univ-rennes1.fr                      (French Server)

    archie.uqam.ca             132.208.250.10   (Canadian Server)

    archie.wide.ad.jp          133.4.3.6        (Japanese Server)



  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте