Использование стандартного tftpd
Для начала нужно установить tftpd (и заодно клиент - tftp - он пригодится для проверки работоспособности сервера): sudo 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-сервер нормально работает. Если же нет - проверьте права на корневую директорию сервера и её содержимое. Самой распространённой ошибкой является невозможность серверов прочитать свои собственные файлы.
Использование atftpd в режиме "inetd"Установим atftpd (в качестве клиента можно использовать как классический tftp, так и его родной atftp, разницы между ними практически нет, но последний немного удобнее использовать в различных скриптах по причине большего количества аргументов командной строки): sudo 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. Создаём директорию: sudo 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". Если же вместо этого будут какие-то ошибки - нужно начинать искать проблему. Скорее всего она кроется в правах доступа (как и в предыдущем случае).
Использование 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", соответственно проверка работоспособности сервера проводится так же.
Выше были показаны три разных способа организации ftp-сервера на Ubuntu Linux. Приведённые рекомендации можно с минимальными поправками использовать на большинстве современных дистрибутивов.Следует отметить что для корректной работы в файрволле должен быть разрешён доступ к серверу по порту 69/udp
|