четверг, апреля 04, 2013

Практика работы с TFTP

Всем доброго дня, сегодня мы с вами попробуем попрактиковаться в использование протокола TFTP. Для данной практики мы будем использовать 3 виртуальные машины, виртуально находящиеся в одной подсети.  В моем случае это будут две машины, работающие под управлением Windows XP, и одна виртуальная машина с установленным на нее Debian 6.0.7. На одну из виртуальных машин с Windows XP (виртуальная машина 1) мы установим популярный в определенных кругах Tftpd32, включающий в свой состав TFTP сервер и TFTP клиент. На второй виртуальной машине с XP мы попрактикуемся в использование штатного клиента TFTP встроенного в Windows. Ну а на машине  с Debian (виртуальная машина 3) мы познакомимся с азами TFTP в Linux. И так если вам все это интересно, то приступаем.

Для начала сконфигурируем наши виртуальные машины. 

На первую виртуальную машину мы установим  Tftpd32. Для этого скачайте его дистрибутив по ссылке, и произведите его установку. Думаю при этом у вас не должно возникнуть каких либо проблем. Далее в корне диска C создаем папку и помещаем в нее несколько файлов. В моем случае папка называется Public и в ней находятся файлы 1.bmp и 2.bmp. После этого запускаем Tftpd32 и нажав на кнопку Browse выбираем папку, файлы из которой мы будем раздавать при помощи TFTP, в моем случае это папка C:\Public. В поле Server Interface выбираем сетевой интерфейс, на котором будет функционировать TFTP сервер, если на вашей виртуальной машине он всего один, то ничего не меняем. Про себя отмечаем что IP адрес первой виртуальной машины 192.168.1.41.
tftpd 32 сконфигурирован на раздачу файлов из папки Public по протоколу TFTP
На второй виртуальной машине с Windows XP ничего настраивать не нужно TFTP  клиент в Windows XP установлен по умолчанию (В случае с Windows 7 необходимо его включить Панель управления – Программы и компоненты – Включение или отключение компонентов Windows – Клиент TFTP). Так что  отмечаем про себя только IP адрес данной виртуальной машины, в моем случае это 192.168.1.26. Так же создаем на данной машине директорию С:\Client и помещаем в нее два текстовых документа 1.txt и 2.txt, содержащие произвольный текст.

Теперь приступим к самому интересному – к конфигурированию TFTP сервера в Debian. Сразу отмечу, что IP данной виртуальной машины 192.168.1.83. Для на чала нам потребуется установить на нашу виртуальную машину несколько пакетов, для этого выполним в консоли команду:

  sudo aptitude install openbsd-inetd tftpd tftp

Пакет openbsd-inetd представляет собой сетевую службу, которая обрабатывает входящие    TCP и UDP соединения  и запускает соответствующую программу для обработки данных соединений. Пакет tftpd представляет собой TFTP сервер, а пакет tftp TFTP клиент.

После того как все перечисленные выше пакеты будут установлены приступим к их конфигурированию. По умолчанию TFTP сервер сконфигурирован на использование директории /srv/tftp. Возможно это и удобно, то так как мы учимся работать с TFTP мы попробуем это изменить и сделаем так чтобы TFTP сервер для своей работы использовал директорию /TFTP_server. Для начала создадим данную директорию выполнив команды:

  cd /
  sudo mkdir TFTP_server
  cd TFTP_server
  echo “1 file” | sudo tee 1.log
  echo “2 file” | sudo tee 2.log

Первой командой мы переходив в корневую директорию. Второй создаём в ней директорию TFTP_server. Третьей командой мы переходим в директорию TFTP_server. С помощью двух последних команд мы создаем в директории TFTP_server файлы 1.log  и 2.log содержащие текст «1 file» и «2 file» соответственно.

Далее отредактируем файл /etc/inetd.conf. Для этого выполним команду (вместо nano можно использовать любой другой текстовый редактор):

  sudo nano /etc/inetd.conf

В данном файле ищем строки подобные:

  #:BOOT: TFTP service is provided primarily for booting.  Most sites
  #run this only on machines acting as "boot servers."
  tftp dgram udp wait nobody /usr/sbin/tcpd  /usr/sbin/in.tftpd /srv/tftp

Заменяем аргумент /srv/tftp на /TFTP_server. В итоге у вас должно получится:

 tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /TFTP_server

После чего сохраняем файл inetd.conf. Чтобы только что внесенные настройки вступили в силу необходимо перезапустить службу openbsd-inetd, для этого выполняем команду:

  sudo /etc/init.d/openbsd-inetd restart

Теперь можно считать что данная виртуальная машина настроена для работы. И далее мы перейдем к практике.




Практика 1. Копируем файлы с TFTP сервера с помощью встроенного TFTP клиента Windows

Для начала запустим консоль на виртуальной машине 2. И попробуем скачать файл 1.bmp с TFTP сервера виртуальной машины 1 (192.168.1.41). Для этого в консоли выполним команду:

  tftp 192.168.1.41 GET 1.bmp

После этого на время копирования произойдет пауза, по окончание которой вы увидите результат выполнения операции.
Файл успешно скопирован с TFTP сервера
Стоит отметить что копирование файла осуществляется в ту директорию, в которой при выполнении команды вы находились в консоле. Так в приведенном выше примере файлы были скопированы в папку пользователя с именем usero. Для того чтобы осуществить копирование файла в любую директорию можно воспользоваться следующим способом:

  cd C:\
  tftp 192.168.1.41 GET 2.bmp

В данном случае вы меняете текущую директорию в консоли на C:\, а уже после этого осуществляете в нее копирование файлов с помощью TFTP.

Теперь если мы перейдем на виртуальную машину 1. И посмотрим на вкладку Log Viewer сервера tftpd32, то мы сможем просмотреть статистику запросов поступающих от клиентов к данному TFTP серверу, в данном случае статистика содержит только два запроса на чтение файлов:
Статистика запросов поступающих на TFTP сервер виртуальной машины 1
Копирование файлов с TFTP сервера виртуальной машины 3 (Debian) осуществляется аналогичным образом, только потребуется выполнить команды:

  tftp 192.168.1.83 GET 1.log
  tftp 192.168.1.83 GET 2.log

Практика 2. Записываем файлы на TFTP сервер с помощью встроенного TFTP клиента Windows

Для того чтобы скопировать файлы находящиеся в папке C:\Client (виртуальная машина 2) на TFTP сервера виртуальной машины 1 необходимо в консоли выполнить следующие команды:

  tftp 192.168.1.41 PUT C:\Client\1.txt
  tftp 192.168.1.41 PUT C:\Client\2.txt

Записанные файлы на виртуальной машине 1 появятся в директории C:\Public.

Если мы попробуем выполнить копирование файлов аналогичным способом на виртуальную машину 3 с Linux, то получим ошибку Access Violation :
Ошибка Access Violation при попытки записи на tftpd
Дело в том, что tftpd установленный на виртуальную машину 3, позволяет осуществлять запись только в уже существующие файлы. Поэтому на необходимо выполнить на виртуальной машине 3 следующие команды:

  cd /TFTP_server
  touch 1.txt
  sudo chmod 777 –R /TFTP_server

Первой командой мы переходи в директорию /TFTP_server. Второй командой мы создаем в ней пустой файл с именем 1.txt. Третьей командой мы даем полные права на доступ к директории /TFTP и всем имеющимся в ней файлам.
  
После этого можно выполнять на виртуальной машине 2 команду:

  tftp 192.168.1.83 PUT C:\Client\1.txt

И она пройдет без ошибок.

Практика 3. Копируем файлы с TFTP сервера с помощью Tftpd32

Давайте попробуем скачать файлы хранящиеся на TFTP сервере виртуальной машины 3. Для этого на виртуальной машине 1 перейдем к окну приложения tftpd32. Откроем вкладку TFTP Client и укажем в ней адрес TFTP сервера с которого мы хотим скачать файл, имя файла который мы хотим скачать, а так же имя файла под которым мы хотим сохранить скачанный файл на нашем компьютере.
Используем клиент tftpd32 для чтения файлов
После того как все вышеперечисленные параметры заданы, нажимаем на кнопку GET. После чего будет выполнена загрузка файла.

Практика 4. Запись файлов на TFTP сервер с помощью Tftpd32

Теперь попробуем записать файлы на TFTP сервер виртуальной машины 3 (Debian) используя TFTP клиент встроенный в Tftpd32. Как мы уже выяснили ранее, для того чтобы осуществлять запись файлов на tftpd сервер виртуальной машины 3, необходимо создать пустые файлы с таким же именем на данном сервере. Поэтому сначала выполняем следующие команды на виртуальной машине 3:

  cd /TFTP_server
  touch 1.bmp
  touch 2.bmp
  sudo chmod 777 –R /TFTP_server

После этого возвращаемся к виртуальной машине 1. Опять же открываем вкладку TFTP Client и заполняем  ее следующим образом:
Производим запись файлов с помощью tftpd32
После чего нажимаем на кнопку PUT. После чего будет произведена запись файлов на TFTP сервер виртуальной машины 3.

Практика 5. Копируем файлы с TFTP сервера с помощью TFTP клиента в Linux

Теперь настало время поработать с Linux. Перейдем на виртуальную машину 3 и попробуем скачать с нее файлы хранящиеся на TFTP сервере виртуальной машины 1. Для этого в консоли введем:

  tftp
  get 192.168.1.41:1.bmp

Команда tftp позволяет перейти к управлению клиентом tftp. С помощью команды get мы отправляем к TFTP серверу запрос на чтение файла. В качестве параметров указываются адрес tftp сервера:имя запрашиваемого файла.

Копируем файл по TFTP в Debian
После чего файл 1.bmp будет скопирован с TFTP сервера виртуальной машины 1 и помещен в директорию /TFTP_server виртуальной машины 3.

Практика 6. Записываем файлы на TFTP сервер с помощью TFTP клиента в Linux

В заключение попробуем записать файлы на TFTP сервер виртуальной машины 1 используя клиент виртуальной машины 3 с Debian. Для этого выполним на ней следующие команды:

  tftp
  put 1.log 192.168.1.41:1.log

Здесь отметим что команда put позволяет отправить запрос на запись к tftp серверу. Первый параметр указываем имя записываемого файла на локальной машине. Второй параметр имеет формат адрес tft сервера:имя под которым файл будет записан на сервер.
Записываем фал на tftp сервер в Debian
Пока это все примеры использования TFTP. Надеюсь они пригодятся вам в вашей профессиональной практике.

2 коммент.:

Спасибо Егор!
Все понятно, без лишней воды..

Отправить комментарий