|
Ключевые слова: tftp, freebsd, (найти похожие документы)
Автор: vorakl <vorakl@proton.me> Newsgroups: email Date: Sun, 25 Dec 2005 17:02:14 +0000 (UTC) Subject: Настройка TFTP сервера для FreeBSD 5.x+ Version: 1.0 Copyright (c) 2006 vorakl <vorakl@proton.me.> 1. Постановка задачи. 2. Решение задачи. 3. Пошаговая реализация. 1. Постановка задачи. Необходимо настроить сервер для сохранения (восстановления) конфигурации коммутаторов и маршрутизаторов по протоколу tftp. Сервер должен быть достаточно стабильным в работе и обеспечивать оптимальный уровень безопасности, учитывая специфику tftp-протокола. 2. Решение задачи. В качестве tftp-сервера был выбран tftp-hpa by Brooks Davis <brooks@FreeBSD.org.> Программа позволяет запускать дочерний процесс от непривилегированного пользователя, создавать от его имени и с определёнными правами новые файлы, выполнять chroot в выбранный каталог, ограничивать доступ к файлам по таким критериям, как имя файла и переданная комманда (WRQ или RRQ), выполнять прозрачное переименовывание файлов в зависимости от IP-адреса клиента. Программа прекрасно работает как самостоятельный сервер и не нуждается в использовании inetd. В поставке идёт так же достаточно удобная клиентская программа, которая в отличае от поставляемой с базовой системой, позволяет передавать желаемые команды прямо в строке вызова. Предложенная ниже конфигурация обеспечивает: * программа используется как самостоятельный сервис, без использования inetd; * умеренное протоколирование через syslog по ftp facility. Уровень детализации протоколирования задаётся в строке парамметров, от полного отсутствия до максимального (-vvv); * дочерние процессы выполняются от имени непривилегированного пользователя tftpd; * осуществляется chroot в каталог /var/tftp; * разрешено создавать новые файлы, если такие отсутствую в рабочем каталоге; * все новые файлы создаются от имени tftpd:tftpd и назначаются права 740, т.е. к файлу имеют доступ только владелец и группа; * доступ для всех остальных пользователей, как к файлам, так и к рабочему каталогу /var/tftp не требуется; * все имена файлов прозрачно преобразуются при записи из ИМЯ в IP-ИМЯ, а при чтении - из IP-ИМЯ в ИМЯ. Это позволяет ограничить доступ к файлам, основываясь на IP-адресе клиента. Т.е. одно и тоже имя файла от абсолютно разных хостов на сервере будет сохраняться под разными именами и у каждого хоста будет доступ только к своей копии файла. 3. Пошаговая реализация. Установить программу: cd /usr/ports/ftp/tftp-hpa && make install clean Добавить новую группу: pw groupadd tftpd Добавить нового пользователя: pw useradd tftpd -c tftp_manager -d /nonexistent -g tftpd -s /usr/sbin/nologin Создать рабочий каталог для размещения скачанных/закаченных данных: mkdir /var/tftp && chown tftpd:tftpd /var/tftp && chmod 750 /var/tftp Настроить syslog на протоколирование от ftp.* и ротацию протокола. Если настройки по-умолчанию syslog и newsyslog не менялись, то ни чего настраивать не нужно. Протоколирование в этом случае будет производиться в /var/log/xferlog Создать конфигурационный файл обработки файлов (переименование, контроль доступа): touch /usr/local/etc/tftpd-remap.conf && chmod 440 /usr/local/etc/tftpd-remap.conf && \ chown tftpd:tftpd /usr/local/etc/tftpd-remap.conf Добавить в файл /usr/local/etc/tftpd-remap.conf: # Rename all files # If WRQ: filename -> IP-filename # If RRQ: IP-filename -> filename r .* \i-\0 Создать стартовый скрипт: touch /usr/local/etc/rc.d/tftpd.sh && chmod +x /usr/local/etc/rc.d/tftpd.sh Добавить в файл /usr/local/etc/rc.d/tftpd.sh: #!/bin/sh # # tftp-hpa init script # Copyright (c) 2006 by Alexey Tsvetnov, vorakl@fbsd.kiev.ua # # PROVIDE: tftpd # REQUIRE: DAEMON # BEFORE: LOGIN # KEYWORD: shutdown # # Define these tftpd_* variables in one of these files: # /etc/rc.conf # /etc/rc.conf.local # /etc/rc.conf.d/tftpd # # tftpd_enable (bool): Set it to "YES" to enable tftpd. # Default is "NO". # tftpd_pidfile (path): Set full path to tftpd.pid. # Default is "/var/run/tftpd.pid". # tftpd_remapfile (path): Set full path to remap file. # Default is "/usr/local/etc/tftpd-remap.conf". # tftpd_datadir (path): Set full path to directory with data. # Default is "/var/tftp". # tftpd_flags (str): Extra flags passed to start command. # Default is "-cps -u tftpd -U 037 -B 1468". # . /etc/rc.subr name="tftpd" rcvar=`set_rcvar` load_rc_config $name # DO NOT CHANGE THESE DEFAULT VALUES HERE : ${tftpd_enable="NO"} : ${tftpd_pidfile="/var/run/tftpd.pid"} : ${tftpd_remapfile="/usr/local/etc/tftpd-remap.conf"} : ${tftpd_datadir="/var/tftp"} : ${tftpd_flags="-vvcps -u tftpd -U 037 -B 1468"} extra_commands="reload" start_cmd="tftpd_start" stop_postcmd="tftpd_poststop" reload_cmd="tftpd_reload" required_files="/usr/local/etc/tftpd-remap.conf" pidfile=$tftpd_pidfile procname="/usr/local/libexec/in.tftpd" tftpd_start() { /bin/echo -n "Starting tftpd" /usr/local/libexec/in.tftpd $tftpd_flags -l -m $tftpd_remapfile $tftpd_datadir /bin/ps x | /usr/bin/grep in.tftpd | /usr/bin/grep -v grep | /usr/bin/awk '{print $1}' > $tftpd_pidfile /bin/echo "." } tftpd_poststop() { /bin/rm -f $tftpd_pidfile } tftpd_reload() { /bin/kill -1 `cat $tftpd_pidfile` } run_rc_command "$1" Добавить в /etc/rc.conf: tftpd_enable="YES" Требуемые настройки firewall: а) для сервера: UDP ServerIP [69] <- ClientIP [1024-65535] UDP ServerIP [1024-65535] <-> ClientIP [1024-65535] ipfw: ipfw -q add pass udp from ${tftp_clnt} 1024-65535 to me 69 in ipfw -q add pass udp from me 1024-65535 to ${tftp_clnt} 1024-65535 out ipfw -q add pass udp from ${tftp_clnt} 1024-65535 to me 1024-65535 in б) для клиента: UDP ClientIP [1024-65535] -> ServerIP [69] UDP ClientIP [1024-65535] <-> ServerIP [1024-65535] ipfw: ipfw -q add pass udp from me 1024-65535 to ${tftp_srv} 69 out ipfw -q add pass udp from ${tftp_srv} 1024-65535 to me 1024-65535 in ipfw -q add pass udp from me 1024-65535 to ${tftp_srv} 1024-65535 out
|
Обсуждение | [ Линейный режим | Показать все | RSS ] |
|
Добавить комментарий |
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |