Как настроить TFTP‑сервер на Linux

Что такое TFTP?
TFTP (Trivial File Transfer Protocol) — простой протокол передачи файлов, впервые описанный в 1980 году и формализованный в июне 1981 года как TFTP Protocol revision 2 в RFC 783 автором Karen R. Sollins. Кратко:
- Транспорт: UDP (порт 69). По сути — «без соединения».
- Функции: только чтение/запись файлов (нет списков, удаления или переименования).
- Безопасность: нет встроенной аутентификации или шифрования.
- Преимущества: простота реализации, подходит для встраиваемых устройств и сред без ОС.
Определение в одну строку: TFTP — лёгкий протокол для передачи файлов по локальной сети, удобный для загрузки прошивок и начальной загрузки систем (netboot).
Когда TFTP уместен и когда нет
- Уместен: начальная загрузка устройств (PXE), прошивка встроенных систем, перенос конфигураций в доверенной LAN-сети, когда важна простота и совместимость.
- Неприемлем: публичные сети без VPN, перенос чувствительных данных, случаи, когда нужна контрольная целостность и подтверждение доставки через TCP.
Важно: TFTP не гарантирует доставку пакетов (UDP), поэтому для передачи больших файлов по ненадёжным сетям лучше выбрать SCP/SFTP/HTTPS.
Быстрая установка (Debian/Ubuntu) — пошагово
- Установите tftpd-hpa (рекомендуется для Debian-производных):
sudo apt-get update
sudo apt-get install tftpd-hpa- Проверьте переменные в /etc/default/tftpd-hpa:
cat /etc/default/tftpd-hpaТипичный файл выглядит так:
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"Убедитесь, что используемый каталог существует и содержит файлы, которые вы планируете отдавать/принимать. Частые директории: /var/lib/tftpboot, /srv/tftp.
Для удобства можно сменить владельца каталога на вашего пользователя (чтобы не ставить sudo при каждом действии):
sudo chown -R $USER /srv/tftp- Если нужно, чтобы сервер мог создавать новые файлы при загрузке с клиента, добавьте опцию –create в TFTP_OPTIONS и перезапустите службу:
TFTP_OPTIONS="--secure --create"sudo systemctl restart tftpd-hpa
sudo ss -uapn | grep :69 # проверка прослушиваемого UDP порта 69Как отправить файл с устройства (пример BusyBox)
На многих встраиваемых системах клиент tftp реализован в BusyBox. Пример отправки файла example.bin на сервер 192.168.1.100:
busybox tftp
# внутри интерактивного клиента или как однострочный вызов
busybox tftp -l example.bin -p 192.168.1.100Типичная проблема: ошибка при попытке загрузки файла на сервер. Причина — мера безопасности: tftpd-hpa по умолчанию требует, чтобы файл уже существовал в каталоге и имел права на запись для всех. Иначе сервер отклонит попытку создать новый файл.
Решение — создать пустой файл и выставить права 666 (rw для всех) в каталоге сервера:
cd /srv/tftp
touch example.bin
chmod 666 example.bin
# затем на устройстве
busybox tftp -l example.bin -p 192.168.1.100Альтернатива — разрешить автоматическое создание файлов, добавив –create в TFTP_OPTIONS (см. выше).
Безопасность и рекомендации по защите
Important: TFTP не шифрует трафик и не аутентифицирует пользователей. Рассматривайте TFTP только внутри доверенной сети или внутри VPN. Рекомендации практической безопасности:
- Сегментируйте сеть: размещайте TFTP-сервер в изолированной VLAN или подсети.
- Используйте файрвол: ограничьте доступ к UDP/69 только нужными IP-адресами.
- Логируйте доступ: включите системные логи и мониторьте подозрительную активность.
- Минимизируйте права: каталоги и файлы TFTP должны иметь минимально возможные права, создавайте отдельного пользователя tftp.
- Храните чувствительные данные вне TFTP: передавайте конфигурации с личными или секретными данными через SFTP/HTTPS.
- Используйте VPN или SSH-туннелирование для удалённых подключений.
Короткая методология hardening (чеклист):
- Отключить TFTP публично в интернет
- Ограничить доступ по IP в iptables/nftables
- Настроить syslog для tftpd и анализировать
- Применять –secure и избегать общего каталога с другими сервисами
- Периодически проверять целостность файлов (hash sums)
Отладка и частые проблемы
Симптом: клиент пишет “Error” или “Timed out” без подробностей.
Проверка сервера:
- Проверить, что tftpd-hpa запущен: systemctl status tftpd-hpa
- Убедиться, что порт UDP 69 прослушивается: ss -uapn | grep :69
- Проверить права файлов: ls -l /srv/tftp
- Проверить маршрутизацию и межсетевой экран: traceroute/iptables/nftables
- Использовать tcpdump или tshark для захвата трафика UDP: sudo tcpdump -n -i any port 69
Пример сценария: клиент не видит сервера — возможно, между ними NAT или firewall блокирует UDP. TFTP использует динамические UDP-порты для передачи блоков после установления сессии — это важно учитывать при настройке ACL.
Альтернативы и когда выбирать другую технологию
- SFTP/SSH: когда нужна аутентификация и шифрование; лучше для публичных или небезопасных сетей.
- SCP/rsync: удобны для больших файлов и инкрементальных синхронизаций.
- HTTP(S): простая интеграция с CI/CD, легко кешируется и масштабируется.
Выбор краткая эвристика:
- Нужна скорость и простота в LAN → TFTP
- Нужна безопасность и контроль → SFTP/HTTPS
- Нужна согласованность/повторяемость → rsync/HTTPS
Совместимость и особенности разных дистрибутивов
- Debian/Ubuntu: tftpd-hpa, atftpd, tftp-hpa — часто tftpd-hpa предпочтителен.
- Red Hat/CentOS/Fedora: пакет чаще называется tftp-server (xinetd или systemd-variant).
- BusyBox/встраиваемые: встроенный клиент tftp обычно поддерживает минимальный набор опций.
Совет: перед масштабированием протестируйте совместимость клиента/сервера (особенно поведение при создании файлов и разбиении блоков).
Роль‑ориентированные действия
Администратор сети
- Установить и настроить tftpd-hpa
- Ограничить доступ по IP/файрволу
- Включить мониторинг и логирование
Инженер встраиваемой системы
- Проверить клиентский tftp в BusyBox
- Подготовить оболочку сборки для передачи bin/firmware
- Тестировать загрузку и проверять контрольные суммы
Оператор поддержки
- Проверять права файлов
- Восстанавливать файлы при проблемах
- Контролировать места хранения и бэкапы
Матричный выбор: когда включать –create
- Выгода: упрощение процесса загрузки файлов с устройств.
- Риск: любой клиент может создать файл, потенциально затирая существующие данные.
- Рекомендация: использовать –create только в контролируемых сетях и, при возможности, на временном сервисе, а не на общем файловом хранилище.
Пример сценариев и тесткейсы (основные)
- Тест установки:
- Установить пакет, перезапустить службу, проверить прослушивание UDP:69.
- Тест скачивания файла:
- Поместить test.bin в каталог, выставить права 644, скачать с клиента.
- Тест загрузки файла без –create:
- Создать пустой файл на сервере с правами 666 и выполнить upload с клиента.
- Тест загрузки файла с –create:
- Включить опцию –create, удалить файл, выполнить upload; убедиться, что файл создаётся.
Критерии приёмки
- Сервер отвечает на запросы клиентов в локальной сети
- Файлы успешно загружаются/скачиваются в соответствии с настройками прав
- Логирование событий регистрации успешных/неуспешных попыток
Короткий чек‑лист для запуска (SOP)
- Установить пакет: sudo apt-get install tftpd-hpa
- Проверить /etc/default/tftpd-hpa и каталог TFTP_DIRECTORY
- Настроить права на каталог и файлы
- Ограничить доступ по IP/портам в firewall
- Перезапустить службу и протестировать с клиента
Альтернативный поток принятия решения (Mermaid)
flowchart TD
A[Нужно передать файл?] --> B{Сеть защищена?}
B -- Да --> C{Нужна аутентификация/шифрование?}
B -- Нет --> D[Используйте VPN или SFTP]
C -- Да --> D
C -- Нет --> E[Используйте TFTP в локальной сети]
E --> F[Настроить права и firewall]
F --> G[Тестирование]GDPR и приватность
TFTP не шифрует данные; передача персональных данных через TFTP в публичных или смешанных сетях может нарушать требования по защите данных. Для передачи личных данных используйте шифрование и аутентификацию (SFTP/HTTPS) и учитывайте локальные регуляции.
Краткое резюме
TFTP остаётся полезным инструментом для простых задач передачи файлов в локальной и доверенной сети, особенно в контексте встраиваемых систем и начальной загрузки устройств. Его достоинство — простота и широкая поддержка; основное ограничение — отсутствие безопасности и базовых функций управления файлами. Всегда комбинируйте TFTP с мерами сетевой изоляции, мониторинга и резервного копирования.
Часто задаваемые вопросы
Можно ли использовать TFTP через интернет?
Нет: без VPN или шифрования передача через интернет потенциально небезопасна. Для удалённого доступа используйте VPN или SFTP.
Как разрешить создание файлов на сервере при загрузке клиентом?
Добавьте опцию –create в TFTP_OPTIONS в /etc/default/tftpd-hpa и перезапустите сервис.
Что делать, если upload возвращает «permission denied»?
Проверьте, что файл существует на сервере и имеет права на запись (например, chmod 666 file). Либо включите –create.
Короткое уведомление для социальных сетей: Настройте TFTP на Linux быстро и безопасно: установка, права, –create, отладка и меры безопасности — в одном материале.