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-адресе клиента. Т.е. одно и тоже имя файла от абсолютно разных хостов на
сервере будет сохраняться под разными именами и у каждого хоста будет доступ
только к своей копии файла.
Настроить syslog на протоколирование от ftp.* и ротацию протокола. Если настройки
по-умолчанию syslog и newsyslog не менялись, то ни чего настраивать не нужно.
Протоколирование в этом случае будет производиться в /var/log/xferlog
Создать конфигурационный файл обработки файлов (переименование, контроль доступа):
#!/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".
#
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
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