Astra linux 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, как протокол, вообще не предусматривает никакой аутенфикации:

Читайте также:  Web api windows application

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 по истечению таймаута корректно завершиться.

Источник

Автоматическая установка «Astra Linux Special Edition» (часть 1)

Об автоматической установке дистрибутива «Astra Linux Special Edition»

Автоматическая преднастроенная установка на основе так называемых preseed файлов (ответов на вопросы инсталлятора) не является чем-то новым, информации в сети полно, например тут. Данная технология очень удобна и в комбинации с PXE (подробнее тут) позволяет быстро и без лишних вопросов установить ОС на целевой компьютер или сервер. Наша команда при работе над проектом программного комплекса кластера высокой готовности (что такое кластерные технологии в целом можно почитать здесь) на базе отечественной защищенной ОС Astra Linux Special Edition версии 1.3 столкнулась с необходимости установки ОС в идентичной конфигурации на несколько серверов, а поскольку в процессе тестирования нашего продукта на железе, возникала необходимость тестировать на свежеустановленной ОС, вопрос оптимизации временных затрат на данную операцию вышел на первый план. При установке программного комплекса у заказчика автоматизация установки тоже дело полезное и, как выяснилось позже, необходимое.

Читайте также:  Интегрировать драйвера дистрибутив windows server

Кратко процедура установки выглядит так:

  1. В BIOS целевого компьютера ставим «Загрузка по сети» (обычно Boot to Network -> Enable и в Boot Device Priority -> Ethernet на первом месте, уточняйте в документации).
  2. На компьютере который у нас будет выступать в роли сервера установки, заряжаем dhcp, tftp и http (ftp) (подробности ниже).
  3. Включаем целевой компьютер, тот получает IP, качает загрузочный образ по tftp и запускает инсталляцию.
  4. и как говорится: Поехали!

Автоматическая установка «Astra Linux Special Edition»

Из документации на ОС нами было определено, что такая возможность присутствует, что в принципе ожидаемо для достаточно свежего Дебьян-подобного дистрибутива и разработчики приводят инструкцию как это сделать… Но «гладко было на бумаге». В процессе первоначального знакомства столкнулись с рядом проблем. Но обо всем по порядку. Для реализации задачи нами был выбран dnsmasq в качестве dhcp и tftp сервера и образ netinst с диска Астры. Первое с чем надо определится как будем отдавать репозиторий с пакетами. Как правило, используют http и тут первая особенность, поскольку это защищенная и сертифицированная ОС, то имеющийся сервер Apache — тоже защищен, отсутствует возможность доступа без авторизации (только pam или kerberos). Следовательно, если вы будете использовать другую ОС, в качестве сервера установки, то можно настроить любой http-сервер.

Настройка http-сервера apache для ubuntu’образных

# aptitude install apache2
правим /etc/apache2/httpd.conf добавив следующие строки:
# /media/cdrom — зеркала пакетов (в данном примере cd дистрибутивом)

Options Indexes FollowSymLinks
Allowoverride None

Options Indexes FollowSymLinks
Allowoverride None

Alias /astra «/media/cdrom»
Alias /tftpboot «/srv/ftp/tftp»

# service apache2 restart

  • Проверить через браузер, что указанные каталоги доступны.
  • Настройка vsftpd

    # aptitude install vsftpd

    # mkdir -p /srv/ftp && chmod -R 755 /srv/ftp

    # usermod -d /srv/ftp ftp
    правим файл /etc/vsftpd.conf:
    listen=YES
    listen_ipv6=NO
    anonymous_enable=YES
    anon_root=/srv/ftp/
    local_enable=NO
    write_enable=YES
    local_umask=022
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    dirmessage_enable=YES
    use_localtime=YES
    xferlog_enable=YES
    connect_from_port20=YES
    chroot_local_user=YES
    secure_chroot_dir=/var/run/vsftpd/empty
    pam_service_name=ftp
    rsa_cert_file=/etc/ssl/private/vsftpd.pem

    # service vsftpd restart

    Настройка dnsmasq как dhcp и tftp сервера

    # aptitude install dnsmasq
    правим файл /etc/dnsmasq.conf:
    interface=eth0
    dhcp-range= , , , 24h
    dhcp-option=3,
    enable-tftp
    # /srv/ftp/tftp — путь до корневого каталога tftp сервера
    tftp-root=/srv/ftp/tftp
    # pxelinux.0 это файл из пакета SYSLINUX, входящего в состав образа netinst.
    dhcp-boot=pxelinux.0

    # service dnsmasq restart

    Организация каталога для tftp-сервера

    Копируем в /srv/ftp/tftp из netinst файлы linux (ядро), pxelinux.0, initrd. gz (временная файловая система, используемая ядром при начальной загрузке). Далее, в /srv/ftp/tftp создаем каталог pxelinux. cfg и там делаем файл с именем default (его будет получает целевой компьютер). Данный файл содержит параметры загрузки ядра. В параметре url и указывается файл с ответами на вопросы установщика.

    Пример файла default

    • Для установки базовой системы + рабочего стола Fly добавляем строку: tasksel tasksel/first multiselect Base, Fly
    • не настраиваем сервисы ALD и службу kiosk (служба разграничения доступа к файлам) добавляем следующие строки:
      astra-license astra-license/license boolean true
      krb5-config krb5-config/kerberos_servers string
      libnss-ldapd libnss-ldapd/ldap-base string
      libnss-ldapd libnss-ldapd/ldap-uris string
      libnss-ldapd libnss-ldapd/nsswitch multiselect services
      ald-client ald-client/make_config boolean false
      ald-client ald-client/manual_configure note
      tasksel tasksel/astra-feat-setup multiselect

    Пример файла preseed.cfg

    # настройка клавиатуры
    d-i keyboard-configuration/xkb-keymap select ru d-i console-setup/toggle string Alt+Shift
    d-i languagechooser/language-name-fb select Russian
    d-i countrychooser/country-name select Russia
    d-i keyboard-configuration/toggle select Alt+Shift
    d-i console-setup/fontface select Terminus
    d-i console-setup/ask_detect boolean false
    d-i console-setup/layoutcode string ru d-i console-setup/variant Россия

    # подключение репозиториев
    d-i apt-setup/non-free boolean true
    d-i apt-setup/contrib boolean true

    # выключить показ диалога с WEP ключом.
    d-i netcfg/wireless_wep string

    # настройка зеркала с пакетами
    d-i mirror/protocol string ftp
    d-i mirror/country string manual
    d-i mirror/ftp/hostname string
    d-i mirror/ftp/directory string /astra_repository
    d-i mirror/ftp/proxy string

    # задаёт, установлены или нет аппаратные часы по Гринвичу.
    d-i clock-setup/utc boolean true

    # настройка timezone
    d-i time/zone string Europe/Moscow

    # определяет, нужно ли использовать NTP для установки часов во время установки
    d-i clock-setup/ntp boolean false

    Читайте также:  Nvidia driver readme linux nouveau

    # разбиение диска создание разделов
    d-i partman-auto/method string lvm
    d-i partman-lvm/device_remove_lvm boolean true
    d-i partman-auto/purge_lvm_from_device boolean true
    d-i partman-md/device_remove_md boolean true
    d-i partman-md/confirm_nochanges boolean true
    d-i partman-lvm/confirm boolean true
    d-i partman-auto/choose_recipe select atomic
    d-i partman-md/confirm boolean true
    d-i partman-partitioning/confirm_write_new_label boolean true
    d-i partman/choose_partition select Finish partitioning and write changes to disk
    d-i partman/confirm boolean true
    d-i partman-md/confirm_nooverwrite boolean true
    d-i partman/confirm_nooverwrite boolean true

    # устанавливаемый пакет (мета) с образом ядра; можно указать «none»,
    # если ядро устанавливать не нужно.
    d-i base-installer/kernel/image string linux-image-generic

    d-i passwd/make-user boolean true

    # пароль суперпользователя, любой открытым текстом
    d-i passwd/root-password password password
    d-i passwd/root-password-again password password

    # создать учётную запись обычного пользователя.
    d-i passwd/user-fullname string user
    d-i passwd/username string user

    # пароль обычного пользователя, или открытым текстом
    d-i passwd/user-password password user
    d-i passwd/user-password-again password user

    console-setup console-setup/fontface select Terminus

    # Вы можете указать нужно ли устанавливать non-free и contrib ПО.
    d-i apt-setup/non-free boolean true
    d-i apt-setup/contrib boolean true
    d-i apt-setup/services-select multi-select
    d-i apt-setup/security_host string
    d-i apt-setup/volatile_host string

    # По умолчанию программа установки требует, чтобы репозитории
    # аутентифицировались с помощью известного ключа gpg.
    # Этот параметр выключает данную аутентификацию.
    # Предупреждение: это небезопасно, рекомендуется не делать этого.
    d-i debian-installer/allow_unauthenticated string true

    # установка базовой системы + рабочий стол Fly
    tasksel tasksel/first multiselect Base, Fly

    # отдельные дополнительные пакеты для установки
    d-i pkgsel/include string openssh-server

    # специфичные настройки для Astra Linux
    astra-license astra-license/license boolean true
    krb5-config krb5-config/kerberos_servers string
    libnss-ldapd libnss-ldapd/ldap-base string
    libnss-ldapd libnss-ldapd/ldap-uris string
    libnss-ldapd libnss-ldapd/nsswitch multiselect services
    ald-client ald-client/make_config boolean false
    ald-client ald-client/manual_configure note
    # НЕ настраивать киоск
    #astra-feat-setup astra-feat-setup/feat multiselect kiosk mode
    tasksel tasksel/astra-feat-setup multiselect

    d-i console-cyrillic/toggle select Caps Lock

    # некоторые версии программы установки могут отсылать отчёт
    # об установленных пакетах. По умолчанию данная возможность
    # выключена, но отправка отчёта помогает проекту
    # определить популярность программ и какие из них включать на CD.
    popularity-contest popularity-contest/participate boolean false

    # эту переменную можно безопасно устанавливать, она указывает, что grub
    # должен устанавливаться в MBR,
    # если на машине не найдено другой операционной системы.
    d-i grub-installer/only_debian boolean true

    # это заставляет grub-installer устанавливать в MBR, даже если на машине
    # есть другая ОС, что менее безопасно, так как может привести к отказу
    # загрузки этой другой ОС.
    d-i grub-installer/with_other_os boolean true

    # остановить систему после завершения установки, а
    # не перегружаться в установленную систему.
    d-i debian-installer/exit/halt boolean true

    Некоторые выявленные проблемы

    Большинство изменений сделаны в initrd, под спойлерами команды для разборки\сборки initrd.

    Разбираем initrd.gz

    # gunzip initrd. gz

    # sudo gzip initrd

    • изменен usr/share/localechooser/languagelist поддержка русскому языку изменена с 2 на 1. Было ru;2;RU;ru_RU.UTF-8;;console-setup стало ru;1;RU;ru_RU.UTF-8;;console-setup . Без этого при выборе русской локали установка «затыкалась».
    • добавлен модуль dca. ko в lib/modules/3.2.0−27-generic/kernel/drivers/dca/. Без него intel’овские гигабитные адаптеры не «поднимаются» в процессе инсталляции, следовательно качнуть пакеты не представляется возможным.
    • добавлены модули dm-log.ko dm-mirror.ko dm-mod.ko dm-region-hash.ko в lib/modules/3.2.0−27-generic/kernel/drivers/md/. Без них не работали наши сервера, в которых стоит программный RAID (serial ata raid, soft raid).
    • также мы добавили ключи от своего репа spkb-archive-keyring.gpg (он служит зеркалом при установке) в usr/share/keyrings, так как репозиторий нам пришлось модифицировать.

    Причина использования собственного репозитория в качестве зеркала для установки в том, что имеющейся в оригинальном дистрибутиве пакет grub-installer1.70astra.se4_amd64.udeb, содержит ошибку и валится при установке grub на soft&fake raid. Был заменен на grub-installer1.78ubuntu8_amd64.udeb.

    Как видно из данной статьи, количество операций по настройке, довольно велико, и, естественно, нам хотелось этот процесс как-то автоматизировать. Что из этого получилось и как задавать индивидуальные параметры установки по mac-адресам читайте в следующей части.

    Похожие статьи

    Сборка Mono для Debian и Astra Linux

    Команда Лаборатории 50 подготовила сборку Mono для Debian Buster и Astra Linux Special Edition 1.6. Состав В сборку входит: Mono 6.12; LibGdiPlus 6.0.6; Entity Framework 6; драйвер Npgsql Entity Framework.

    ГосJava 2020.3

    Изменения по сравнению с версией 2020.2 Java Runtime Environment Импортированы исправления из OpenJDK 8u262. Закрыты уязвимости: CVE-2020-14583: incomplete interface type checks in Graal compiler (Hotspot, 8236867). CVE-2020-14664: out-of-bounds write in.

    Запуск нескольких экземпляров Tomcat

    Запуск нескольких экземпляров Apache Tomcat Если есть необходимость запуска нескольких экземпляров сервера Apache Tomcat, то стандартные настройки и скрипты запуска не подходят. Ниже приведена инструкция и примеры скриптов для решения.

    Источник

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