- TFTP в Linux. Организация сервера TFTP
- Установка atftp в Linux
- Настройка TFTP сервера atftpd
- Запуск atftpd из командной строки
- Запуск atftpd автоматически при старте системы
- Запуск atftpd автоматически по запросу
- Автоматическая установка «Astra Linux Special Edition» (часть 1)
- Об автоматической установке дистрибутива «Astra Linux Special Edition»
- Автоматическая установка «Astra Linux Special Edition»
- Настройка http-сервера apache для ubuntu’образных
- Настройка vsftpd
- Настройка dnsmasq как dhcp и tftp сервера
- Организация каталога для tftp-сервера
- Пример файла default
- Пример файла preseed.cfg
- Некоторые выявленные проблемы
- Разбираем initrd.gz
- Похожие статьи
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 по истечению таймаута корректно завершиться.
Источник
Автоматическая установка «Astra Linux Special Edition» (часть 1)
Об автоматической установке дистрибутива «Astra Linux Special Edition»
Автоматическая преднастроенная установка на основе так называемых preseed файлов (ответов на вопросы инсталлятора) не является чем-то новым, информации в сети полно, например тут. Данная технология очень удобна и в комбинации с PXE (подробнее тут) позволяет быстро и без лишних вопросов установить ОС на целевой компьютер или сервер. Наша команда при работе над проектом программного комплекса кластера высокой готовности (что такое кластерные технологии в целом можно почитать здесь) на базе отечественной защищенной ОС Astra Linux Special Edition версии 1.3 столкнулась с необходимости установки ОС в идентичной конфигурации на несколько серверов, а поскольку в процессе тестирования нашего продукта на железе, возникала необходимость тестировать на свежеустановленной ОС, вопрос оптимизации временных затрат на данную операцию вышел на первый план. При установке программного комплекса у заказчика автоматизация установки тоже дело полезное и, как выяснилось позже, необходимое.
Кратко процедура установки выглядит так:
- В BIOS целевого компьютера ставим «Загрузка по сети» (обычно Boot to Network -> Enable и в Boot Device Priority -> Ethernet на первом месте, уточняйте в документации).
- На компьютере который у нас будет выступать в роли сервера установки, заряжаем dhcp, tftp и http (ftp) (подробности ниже).
- Включаем целевой компьютер, тот получает IP, качает загрузочный образ по tftp и запускает инсталляцию.
- и как говорится: Поехали!
Автоматическая установка «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
# разбиение диска создание разделов
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, то стандартные настройки и скрипты запуска не подходят. Ниже приведена инструкция и примеры скриптов для решения.
Источник