Запустить tftp сервер linux

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 из репозиторией комадой

незабудьте остановить подтянувшийся 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 (вы, конечно, можете выбрать любую другую папку)

И, наконец, собранные файлы, закинуть в папку назначения

На последок почистим за собой

и создадим символические ссылки на исполняемые файлы

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

Читайте также:  Узнать свой видеодрайвер 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. Создадим его вот с таким содержанием:

Читайте также:  Whatsapp bomber kali linux

[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

Можно увидеть, что порт 69 прослушивает некий «init», который на самом деле является символической ссылкой на SystemD

udp 0 0 0.0.0.0:69 0.0.0.0:* 1/init

При этот, если вы обратитесь к серверу каким-нибудь tftp клиентом, SystemD запустит atftpd и передаст ему клиента. А после того, как передача файлов завершиться, atftpd по истечению таймаута корректно завершиться.

Источник

How to install tftp server on Debian 11

This tutorial explains how to set up a TFTP (Trivial File Transfer Protocol) server on Debian 11 and Linux-based distributions.

Before starting, let’s open the tftp port (69) using UFW (Uncomplicated Firewall), as shown in the following image.

Once the port is open, we can proceed with the TFTP installation.

Installing TFTP server and client:

To begin installing the TFTP service, use apt as shown in the screenshot below.

As said, the previous command installed the TFTP service. To install the TFTP client using apt, run the following command.

Configuring the TFTP server:

Once the TFTP server is installed, you need to configure it. The TFTP configuration file is located at /etc/default/tftpd-hpa. You can edit the configuration file using nano, as shown in the example below. On debian, run the following command.

The default configuration file seems like the image below where:

  • TFTP_USERNAME: Here, you can specify the TFTP user; the default user is tftp.
  • TFTP_DIRECTORY: Here, you can specify the TFTP directory to upload or download files from. By default, the directory /srv/tftp is created; you can leave it or define a new one (in such case, you’ll need to create it using the mkdir command).
  • TFTP_ADDRESS: Here, you specify the TFTP IP address and port, which by default for TFTP is port 69
  • TFTP_OPTIONS: Here, you can specify options; we’ll add the needed option to upload files to the TFTP server in our following examples.
Читайте также:  Linux 32bit on 64bit

In the screenshot below, you can see I only edited TFTP_ADDRESS to define the server IP and TFTP_OPTIONS to allow uploading files by adding the —create option.

After editing the configuration file, exit saving changes (For nano, press Ctrl+X and Y)

As you can see, the default tftp directory is where files are stored in /srv/ftp. On Debian 11, this directory is created by default when installing tftp. You can create a different one if needed. But you’ll need to change the user and group ownership to allow the defined user in the configuration file (By default, the tftp user) to store files inside.

To change the directory ownership to the tftp user, use the chown command as shown below.

Once reconfigured, restart the tftp service; you can do it using systemctl, as shown in the following example.

Upload and Download files using TFTP:

To connect to a TFTP server, just run tftp followed by the server IP address as shown in the following screenshot, in which tftp is used to connect to the server with IP address 192.168.1.103.

Once connected, to upload a file, you can use the put command followed by the file name you want to upload. In the example below, the file named linuxhintfile is uploaded to the server with IP address 192.168.1.103.

To download files, use the get command followed by the file name you want to download, as shown in the image below.

TFTP vs FTP vs SFTP:

Unlike FTP and SFTP, TFTP works under the UDP protocol; it is a faster but less secure and flexible alternative. TFTP doesn’t allow authentication, and users can’t modify files. Even the regular FTP protocol (Port 21) is the safest alternative. TFTP is mainly used for network boot processes and is almost unused.

The TFTP server doesn’t allow to show the TFTP directory content; users must know the file name they want to download.

Conclusion:

As you can see, the main advantage of the TFTP protocol is the simplicity of implementing it. Any Linux user level can easily set up a TFTP server. It is important to remember that TFTP is an unsafe implementation, and SFTP must be considered the main alternative to transfer files and filter unwanted access. Users must remember to open port 69 to allow TFTP traffic; this can be achieved using Iptables or UFW, as shown in the first step of this article.

You can get additional information on TFTP at https://linux.die.net/man/1/tftp.

I hope this tutorial explaining how to install a TFTP server on Debian 11 was useful. Keep following Linux Hint for additional Linux tips and tutorials.

About the author

David Adams

David Adams is a System Admin and writer that is focused on open source technologies, security software, and computer systems.

Источник

Оцените статью
Adblock
detector