- Linux tftp для windows
- Tftp сервер windows
- Как проверить работу tftp-сервера?
- Установка TFTP сервера в Debian или Ubuntu
- Установка tftp-hpa
- Настройка tftp-hpa
- TFTP в Linux. Организация сервера TFTP
- Установка atftp в Linux
- Настройка TFTP сервера atftpd
- Запуск atftpd из командной строки
- Запуск atftpd автоматически при старте системы
- Запуск atftpd автоматически по запросу
Linux tftp для windows
Добрый день товарищи, сегодняшней темой для изучения будет как установить tftp сервер на примере tftpd64 service edition. Для некоторых айтишных задач требуется поднять tftp-сервер, который обычно предназначен только для простой передачи файлов между устройствами. TFTP изначально так и разрабатывался, чтобы быть простым. Прочитать о его работе можно на Wikipedia.Мне понадобился сервер tftp для того, чтобы слить настройки с уже настроенного коммутатора Cisco и при необходимости залить его обратно.
Tftp сервер windows
Для того, чтобы развернуть сервер на своем рабочем месте необходимо:
- Загрузить нужный дистрибутив отсюда . Стоит обратить внимание, что дистрибутивы различаются по типу запуска: как службу (service edition) и как приложение (standard edition) и также по битности ОС. Для себя я выбрал пакет tftpd64 service edition (installer)
- После загрузки, устанавливаем загруженный дистрибутив, не изменяя абсолютно никаких параметров.
- Если Вы загрузили, как и я, дистрибутив с запуском в качестве службы, то стоит вручную запустить службу или просто перезапустить компьютер.
далее жмем i Agree и соглашаемся с лицензионным соглашением.
Выставляем нужный птички и жмем next.
Как установить tftp сервер на примере tftpd64 service edition-03
Задаем при необходимости альтернативный каталог для установки.
Как установить tftp сервер на примере tftpd64 service edition-04
Как установить tftp сервер на примере tftpd64 service edition-05
Как установить tftp сервер на примере tftpd64 service edition-06
Не забудьте проверить что открыт TCP, UPD порт 69.
Как установить tftp сервер на примере tftpd64 service edition-07
Открываем установленную программу и нажимаем снизу Settings
Как установить tftp сервер на примере tftpd64 service edition-08
Оставляем галку TFTP Server
Как установить tftp сервер на примере tftpd64 service edition-09
Переходим на вкладку TFTP и нажимаем Browse
Как установить tftp сервер на примере tftpd64 service edition-10
Указываем папку где у вас будет ссылка на папку tftp
Как установить tftp сервер на примере tftpd64 service edition-11
Закрываем, у вас должно получиться нечто подобное
Как установить tftp сервер на примере tftpd64 service edition-12
Всё! Теперь можно подключаться к серверу и копировать файлы. У операционной системы Windows XP tftp-клиент установлен по умолчанию, а у Windows server 2008R2 его необходимо доставить, я описал это тут (Как установить tftp клиента в Windows Server 2008R2)
Как проверить работу tftp-сервера?
Для того, чтобы передать файл необходимо открыть cmd.exe и выполнить команду:
Для того, чтобы получить файл с сервера, есть команда:
Использовать этот сервер для каких-то постоянных задач не рекомендуется, так как у него практически нет никакой защиты от несанкционированного подключений к серверу. Да, можно ограничить доступ к нему только определенным IP-адресам, но та легкость, с которой можно подменить IP-адрес, позволяет сказать, что это не относится к сетевой безопасности вообще.
Установка TFTP сервера в Debian или Ubuntu
Установка tftp-hpa
Одним из самых популярных вариантов TFTP сервера на Linux является tftp-hpa — улучшенная версия обычного tftpd, его то мы и настроим и установим ниже. Он очень прост в использовании и его установка с настройкой может занять всего несколько минут.
Перед установкой не лишним будет обновить список пакетов и сами установленные пакеты до актуального состояния:
Устанавливаем сервер следующей командой:
На этом установка сервера закончена, и сервер уже готов к запуску. Если же вам нужна какая-то специфичная настройка, то переходим к следующему пункту.
Настройка tftp-hpa
Простой конфиг программы находится по следующему адресу /etc/default/tftpd-hpa , и представляет из себя набор из нескольких параметров.
TFTP_USERNAME=»tftp» — пользователь, под которым работает демон (служба) TFTP. По умолчанию равно «tftp», и без весомых причин менять его на что-то другое не стоит.
TFTP_DIRECTORY=»/srv/tftp» — директория под TFTP сервер. Для её смены следует в новой директории дать права пользователю под которым работает TFTP сервер, например для директории по адресу /var/tftp следует проделать следующую операцию:
TFTP_ADDRESS=»:69″ — адрес, который прослушивает сервер.
TFTP_OPTIONS=»—secure» — параметры запуска сервера TFTP, обязательно оставляем secure на его месте, для безопасной работы. Так же доступны следующие полезные параметры запуска:
- —ipv4, -4 — сервер будет работать только по IPv4.
- —ipv6, -6 — аналогично пункту выше, только для IPv6. Может не работать, если сервер был скомпилирован без поддержки IPv6.
- —create, -c — разрешает СОЗДАВАТЬ файлы клиентам на TFTP сервере. По умолчанию, клиенты могут только скачивать файлы с TFTP сервера. Не стоит включать без надобности.
TFTP в Linux. Организация сервера TFTP
В репозиториях операционных систем на базе ядра Linux вы найдете множество серверов, реализующих протокол TFTP: некоторые делают упор на простоте конфигурации и малом потребление ресурсов, другие предоставляют расширенные возможности, но все они созданы с одной целью — принимать и отдавать файлы. Мы будем рассматривать настройку TFTP сервера в Linux на примере atftpd — сервера TFTP с расширенными возможностями. Будьте уверены, освоив atftpd, вы без труда справитесь с любым другим TFTP сервером в Linux.
Установка atftp в Linux
Попытка установить сервер atftpd из репозиториев приведет к установке еще одного сервера — одного из супер-серверов inet — демона, запускающего программы по событию, в данном случае по факту появления на 69 порту UDP запросов на подключение. Вы скажите: «А что же тут плохого?». Вообщем-то ничего, но если вы используете Debian версии 8 и выше или Ubuntu версии 15.04 и выше, то вы наверняка слышали о SystemD. SystemD — новый менеджер инициализации, пришедший на смену init. На конец 2015 года поддержка SystemD не реализована для серверов TFTP — мы сделаем это вручную. Поэтому, лучше устанавливать TFTP сервер из исходных текстов и сразу перейти в соответствующий раздел нашей статьи, но если вы всё же решили поизвести установку atftpd из репозиторией комадой
apt-get install atftpd
незабудьте остановить подтянувшийся inet и, собственно, сам atftpd
systemctl stop atftpd inetd
А также выключить их
systemctl disable atftpd inetd
Для избежания недоразумений также рекоменду удалить скрипт запуска atftpd из /etc/init.d/
И стереть его упоминание из конфигурационного файла inet с помощью, например редактора nano:
nano /etc/inetd.conf #удалите строчку, начинающуюся с tftp
Избежать всего этого поможет сборка TFTP сервера из исходных текстов. Для этого нужно скачать архив с исходниками например c сайта sourceforge с помощью wget
wget http://downloads.sourceforge.net/project/atftp/atftp-0.7.1.tar.gz #версия может отличаться
tar -xzvf atftp-0.7.1.tar.gz #версия может отличаться
Перейти в каталог с распакованным содержимым
cd atftp-0.7.1 #версия может отличаться
Выполнить конфигурационный скрипт, указав в качестве папки назначения /opt/atftp (вы, конечно, можете выбрать любую другую папку)
Создать эту папку
И, наконец, собранные файлы, закинуть в папку назначения
На последок почистим за собой
cd ..
rm -R atftp-0.7.1
и создадим символические ссылки на исполняемые файлы
ln -svi /opt/atftp/sbin/atftpd /sbin/
ln -svi /opt/atftp/bin/atftp /usr/bin/
Настройка TFTP сервера atftpd
TFTP сервер atftpd не читает никакой конфигурационный файл. Вместо этого все параметры ему передаются в качестве ключей запуска, например:
—logfile /PATH_TO_FLE #задает файл в который atftpd будет писать лог
—verbose=FROM_1_TO_7 # задает уровень документирования событий
—user USER.GROUP #задает от имени какого пользователя и группы будет запущен atftpd
—port PORT_NUMBER #задает UDP порт, который будет слушать сервер
—bind-address SERVER_IP_ADDRESS #задает IP адрес, который будет слушать сервер
В конце командной строки atftpd следует передать полный абсолютный путь до папки, в которой и будет осуществляться вся деятельность TFTP сервера в вашей ОС Linux
Далее мы рассмотрим несколько примеров сценариев запуска atftpd, в зависимости от которых нам понадобяться те или иные ключи запуска
Запуск atftpd из командной строки
Этот способ подойдет тем, хочет единовременно запустить TFTP сервер, отдать или принять файл и завершиться.
Минимальный набор команд будет такой:
atftpd —daemon —no-fork /mnt/share
Вы наверняка заметили два новых ключа запуска: «daemon» и «no-fork». Ключ «—daemon» заставляет atftpd «висеть» в ожидании соединения, а ключ «—no-fork» предотвращает его переход в фон. Когда все операции с передачей файлов будут завершены, мы сможете просто нажать Ctrl+C для завершения atftpd. Если же ключ «—no-fork» не использовать, то завершить процесс можно будет командой
Стоить отметить тот факт, что чтобы папка, которую мы передали TFTP серверу для работы, была доступна не только на чтение, но и на запись, нужно выдать это право обезличенному пользователю (anonymous), так как TFTP, как протокол, вообще не предусматривает никакой аутенфикации:
chmod -R o=rwx /mnt/share #папка может отличаться
Запуск atftpd автоматически при старте системы
Если вы хотите, чтобы atftpd запускался автоматически при старте компьютера, в системах на базе SystemD следует создать в дирректории /lib/systemd/system/ unit-файл atftpd.service для SystemD вот такого минимально содержания:
[Unit]
Description=Extended TFTP server
[Service]
Type=forking
ExecStart=/opt/sbin/atftpd —daemon /mnt/share
В параметре ExecStart нужно указать ту папку и бинарный файл atftpd, в которую вы его устанавливали, а также все ключи запуска, которые считаете нужными. Заметьте, что ключ «—no-fork» в данном случае противопоказан, а вот «—daemon» обязателен, так как по сценарию планируется, что atftpd будет «висеть» в системе постоянно, ожидая соединения
После того, как файл будет создан, нужно, чтобы SystemD перечитал свою конфигурацию
а затем активировать уже сам сервис:
systemctl enable atftpd.service
Теперь atftpd будет запускаться автоматически при старте системы. Вручную его можно запускать и останавливать командами
systemctl stop atftpd.service
systemctl start atftpd.service
Запуск atftpd автоматически по запросу
Мы с вами рассмотрели ситуацию, когда TFTP сервер atftpd, запущенный единожды при старте компьютера, остается «висеть» в системе, ожидая новых подключений. При этом вначале статьи упоминули, что при установке из репозиторией atftp тянет за забой супер-сервер inet, способный запускать atftpd только тогда, когда запрос реально поступает на сервер. Это очень удобно с той точки зрения, что пока TFTP не используется — он остановлен и не потребляет системных ресурсов. Так же мы отметили тот факт, что SystemD имеет такую функциональность «из коробки», и что необходимости теперь и в самом супер-сервере inet нет. Осталось научить SystemD это делать. Для этого SystemD должен сам слушать входящий порт на предмет поступления запросов и, в случае обнаружения, запустить atftpd и отдать ему сокет. Кроме того, после обработки соединения atftpd должен еще и корректно завершиться. Чтобы SystemD стал прослушить соответствующий UDP сокет, нужно создать unit-файл, описывающий этот сокет, и положить его туда же — в /lib/systemd/system/. При этом его имя должно соответствовать имени сервис-файла, который ему придеться запускать, за исключением суффикса, который нужно поменять с «.service» на «.socket». В нашем случае файл должен называться atftpd.socket. Создадим его вот с таким содержанием:
[Unit]
Description=TFTP socker for atftpd
Запись ListenDatagram=0.0.0.0:69 означает, что SystemD будет слушать порт UDP 69 на всех доступных ему IP адресах. Вы вправе (да и так будет лучше) указать конкретный IP адрес вашего сервера — это улучшит безопасность.
Но это еще не все. Раз мы выбрали способ запуска по событию, мы не хотим более, чтобы atftpd запускался автоматически при старте системы. Выключим его:
systemctl disable atftpd.service
И сам service-файл /lib/systemd/system/atftpd.service тоже подкорректируем:
- убираем ключ «—daemon» — мы больше не хотим, чтобы atftpd «висел» в системе постоянно
- добавляем ключ «—tftpd-timeout 10» — TFTP сервер корректно завершиться, если в течение 10 сек. к нему не поступит более обращений
- добавляем параметр StandartInput=socket в секцию [Service], чтобы SystemD передавал сокет с данными на вход atftpd
- удаляем секцию [Install] целиком — мы больше не хотим, чтобы atftpd запускался при старте системы
Должно получиться что-то вроде этого:
[Unit]
Description=Extended TFTP server
[Service]
ExecStart=/opt/atftp/sbin/atftpd —verbose=7 —logfile /var/log/atftpd —tftpd-timeout 10 /mnt/share
StandardInput=socket
Не забываем перечитывать конфигурацию SystemD:
И активируем наш сокет-файл
systemctl enable atftpd.socket
Можно перезагрузиться, можно включить сокет вручную:
systemctl start atftpd.socket
netstat -lupvn | grep 69
Можно увидеть, что порт 69 прослушивает некий «init», который на самом деле является символической ссылкой на SystemD
udp 0 0 0.0.0.0:69 0.0.0.0:* 1/init
При этот, если вы обратитесь к серверу каким-нибудь tftp клиентом, SystemD запустит atftpd и передаст ему клиента. А после того, как передача файлов завершиться, atftpd по истечению таймаута корректно завершиться.