tftp-сервер на Debian/Ubuntu

()

У многих системных администраторов рано или поздно возникает необходимость поднять 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

Приятной работы!

Ключевые слова: tftp, linux, tftpd, atftpd, atftp.

Комментарии:

2008-12-28 20:25:15 (#)

И как шьются комутаторы? просто я только из-под венды шил, с помошью программ:) еще tftp используется для загрузки бездисковых станций. больше применений не знаю, файлы четез него точно не передают уже:)))

morbo 2008-12-29 12:11:00 (#)

>файлы четез него точно не передают уже

А что по-вашему через него передают?

И почему "уже"? Значит раньше всё-таки передавали?

MooSE 2008-12-29 15:04:25 (#)

Шьются молча:) Кладёшь прошивку на tftp-сервер, заходишь на коммутатор и говоришь где её взять:)

Цитата:


файлы четез него точно не передают уже


я так понимаю ladm имел ввиду то, что для организации файлопомоек и обмена файлами в сети tftp как-то уже не моден:)
Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE