У многих системных администраторов рано или поздно возникает необходимость поднять tftp-сервер для каких-либо целей (например для заливки новой прошивки на коммутатор). Далее будет показано как можно развернуть tftp-сервер на Debian/Ubuntu Linux.
Способ #1. Использование стандартного tftpd
Самый простой и быстрый способ. Для начала нужно установить tftpd (и заодно клиент - tftp - он пригодится для проверки работоспособности сервера):
apt-get install tftpd tftp
По умолчанию в качестве корня сервера tftpd будет использовать директорию /srv/tftp и работать с правами пользователя nobody, если вас это не устраивает - поменяйте соответствующим образом строку
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftp
После изменения этой строки нужно перезапустить супер-сервер inetd:
invoke-rc.d openbsd-inetd restart
Далее нужно создать корневую директорию сервера и задать её владельца (далее будем предполагать что все настройки выполнены по умолчанию):
mkdir -p /srv/tftp && chown nobody /srv/tftp
Теперь нам нужно протестировать наш сервер. Для этого создадим тестовый файл в корне сервера:
echo Test File > /srv/tftp/test && chown nobody /srv/tftp/test
И попробуем его скачать:
echo get test | tftp 127.0.0.1
Если никаких ошибок выдано не было - проверяем содержимое скачанного файла. Если и тут всё хорошо - значит наш tftp-сервер нормально работает. Если же нет - проверьте права на корневую директорию сервера и её содержимое. Самой распространённой ошибкой является невозможность серверов прочитать свои собственные файлы.
Способ #2. Использование atftpd в режиме "inetd"
Установим atftpd (в качестве клиента можно использовать как классический tftp, так и его родной atftp, разницы между ними практически нет, но последний немного удобнее использовать в различных скриптах по причине большего количества аргументов командной строки):
apt-get install atftpd atftp
Сам atftpd может работать как в качестве самостоятельного сервера, так и в качестве одной из подсистем суперсервера inetd (или любого его аналога). По умолчанию он настроен на работу через inetd и для его функционирования в /etc/inetd.conf добавляется строка:
tftp dgram udp4 wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd --tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 /var/lib/tftpboot
Параметров тут перечислено много и информацию по ним лучше всего искать в man-странице atftpd. Основное что нас тут интересует: сервис работает с правами пользователя nobody и считает корнем директорию /var/lib/tftpboot.
Создаём директорию:
mkdir -p /var/lib/tftpboot && chown nobody /var/lib/tftpboot
Создаём тестовый файл:
echo Test File > /var/lib/tftpboot/test && chown nobody /var/lib/tftpboot/test
Пробуем скачать тестовый файл и просмотреть его содержимое:
atftp -g -r test 127.0.0.1 && cat test
Если всё пройдёт нормально то на стандартный вывод будет выдана надпись: "Test File". Если же вместо этого будут какие-то ошибки - нужно начинать искать проблему. Скорее всего она кроется в правах доступа (как и в предыдущем случае).
Способ #3. Использование atftpd в режиме "standalone"
Здесь всё практически так же, как и в предыдущем случае, только нет необходимости запускать суперсервер inetd, поскольку atftpd в этом случае работает как самостоятельный сервер. Если интересен именно такой вариант то нужно сделать следующее: первым делом закоментировать строку запуска atftpd в /etc/inetd.conf:
#<off># tftp dgram udp4 wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd --tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 /var/lib/tftpboot
и переазпустить суперсервер:
invoke-rc.d openbsd-inetd restart
Далее нужно поменять значение переменной USE_INETD в файле /etc/default/atftpd с true на false:
#USE_INETD=true USE_INETD=false
Дополнительные опции для atftpd при такой настройке перечисляются в переменной OPTIONS всё того же файла. Настройки по умолчанию совпадают с настройками по умолчанию для режима "inetd", соответственно проверка работоспособности сервера проводится так же.
Заключение
Выше были показаны три разных способа организации tftp-сервера на Debian/Ubuntu Linux. Приведённые рекомендации можно с минимальными поправками использовать на большинстве современных дистрибутивов.
Следует отметить что для корректной работы в файрволле должен быть разрешён доступ к серверу по порту 69/udp
Приятной работы!
2008-12-28 20:25:15 (#)