Як встановити безпечний і надійний ftp сервер

Як встановити безпечний і надійний FTP сервер

У цьому документі йдеться про те, як встановити безпечний і надійний FTP сервер. Як відомо для передачі незаконних файлів найчастіше використовуються саме FTP сервера. Також досить часто хакерам вдається отримати доступ до систем з неправильно встановленими FTP серверами.
В цьому FAQ викладені рекомендації для системних адміністраторів, які допоможуть їм правильно налаштувати FTP сервер, і звести до мінімуму загрозу проникнення в систему зловмисників через цей вид сервісу.

Створіть користувача ftp в / etc / passwd. Він може належати до будь-якої групі, наприклад arhciv (якщо група не визначена то пропишіть її в файлі / etc / group). Домашній каталог повинен бути

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-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

А тут сама програма:


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

#define NULL (char *) 0

І ще деякі речі, які не завадило б зробити:

як root виконати наступні команди: 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' не працює.

Це розділ вставлений Marcus J Ranum Пререкомпіліруйте ваш 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 / group (не забудьте прибрати паролі), власником повинен бути root.

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

** Програма має на увазі, що ви вибраті в катестве базоваго каталогу / var / ftp

** Якщо у вас інший каталог, то замініть у всьому тексті / var / ftp на повний шлях

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

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

Ви можете використовувати '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'

Деяким системам потрібно пристрій / dev / tcp: Старі SVR2 і SVR3 системи RTU 6.0 (Masscomp, now Concurrent Real Time UNIX), ATT 3B1 і 3B2

Деякі реалізації 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.

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

[Libraries] Для забезпечення роботи в SunOS з динамічними бібліотеками, необхідно виконати наступне: Створити каталог

ftp / usr. Власник root, права доступу 0555.

ftp / usr / lib. Власник root, права доступу 0555.

Скопіювати загрущік ld.so в каталог

ftp / usr / lib. Власник root, права доступу 0555.

Передайте файли libc.so. * в каталог

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

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

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, добавте рядок типу цієї:

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

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

Увага: Ви можете всі свої файли протоколів зробити доступними тільки для root. Це захистить від можливості обчислити пароль користувача, якщо він його ввів замість свого імені.

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

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

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.

File Checksum Checksum MD5 Digital Signature

ftpd.tar.gz 38443 60 1710 119 ae624eb607b4ee90e318b857e6573500

Public Domain Sources:

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

Переконайтеся, що ніхто не може створити файл або записати файл розташований в основному каталозі FTP сервера. Якщо хто небуть зайде і створить файли .rhosts і .forward з певним вмістом, то це дасть можливість вторгнутися в вашу систему будь-якого зловмисникові.

Переконайтеся, що на FTP сервері немає файлів або каталогів належать користувачеві ftp (основний каталог особливо). Недотримання цього також відкриває можливість проникнення в систему.

Убетітесь, що у вас стоїть FTP демон останніх версії.

Пошук програм на 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 (ATT 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)