Исходный код пакета tftp-hpa для alpine с поддержкой протокола trq
Go to file
Alexander Zhirov fcc3f73807 Добавлены проверки MAC-адреса и команд создания/удаления символической ссылки 2022-08-18 11:03:28 +03:00
img Добавлены проверки MAC-адреса и команд создания/удаления символической ссылки 2022-08-18 11:03:28 +03:00
package Добавлены проверки MAC-адреса и команд создания/удаления символической ссылки 2022-08-18 11:03:28 +03:00
trq Добавлены проверки MAC-адреса и команд создания/удаления символической ссылки 2022-08-18 11:03:28 +03:00
APKBUILD Добавлены проверки MAC-адреса и команд создания/удаления символической ссылки 2022-08-18 11:03:28 +03:00
README.md Добавлены проверки MAC-адреса и команд создания/удаления символической ссылки 2022-08-18 11:03:28 +03:00
fix-common.patch tftp with trq protocol 2022-08-17 17:09:52 +03:00
in.tftpd.confd tftp with trq protocol 2022-08-17 17:09:52 +03:00
in.tftpd.initd tftp with trq protocol 2022-08-17 17:09:52 +03:00

README.md

tftp-hpa

protocol

Описание

К стандартным opcodes RRQ и WRQ был добавлен TRQ (Thinstation Request) со значением 6, позволяющий создать символическую ссылку на файл-загрузчик для PXE-сервера.

Структура filename принимаемая TFTP-сервером состоит из частей, разделённая ;:

01-<mac-address>;<command>;<source-file>

где

  • 01 - указывается как префикс MAC-адреса тонкого клиента
  • mac-address - MAC-адрес тонкого клиента в нижнем регистре, разделённого -, например ff-ff-ff-ff-ff-ff
  • command - команда (cr/rm) для создания/удаления символической ссылки на файл
  • source-file - основной файл, на который необходимо создать символическую ссылку

Символическая ссылка создаётся в директории mac.cfg с правами drwxrwxrwx, расположенной в корневой директории TFTP сервера. Например, структура filename создания симолической ссылки на файл thinstation:

01-ff-ff-ff-ff-ff-ff;cr;thinstation

Удаление символической ссылки:

01-ff-ff-ff-ff-ff-ff;rm

Структура каталога tftpboot:

.
└── tftpboot
    └── [drwxrwxrwx] mac.cfg
        ├── 01-ff-ff-ff-ff-ff-ff -> thinstation
        └── thinstation

Пример запроса на PHP

Создание пакета на php для создания символической ссылки, отправляемого на TFTP-сервер:

$opcode = 6; // TRQ opcode
$request = '01-ff-ff-ff-ff-ff-ff;cr;thinstation';
$mode = 'octet';
$ip = '192.168.1.1';
$port = 69;
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
$package = chr(0) . chr($opcode) . $request . chr(0) . $mode . chr(0);
socket_sendto($sock, $package, strlen($package), MSG_EOF, $ip, $port);
socket_close($sock);

Сборка пакета в Docker

Склонировать репозиторий в удобное место:

git clone https://git.zhirov.website/alexander/tftp-hpa.git tftp-hpa

Войти в оболочку alpine для сборки пакета запустив docker командой:

docker run --rm -it -v $PWD/tftp-hpa:/home/packager/reposerve/main/tftp-hpa alpine:latest sh

Установить инструменты разработчика:

apk add sudo build-base alpine-sdk

Cоздать пользователя packager и добавьте его в список sudo

adduser -D packager
addgroup packager abuild
echo 'packager ALL=(ALL) NOPASSWD:ALL' >/etc/sudoers.d/packager

Войти под созданным пользователем packager:

sudo -u packager sh

Сгенерировать ключи:

abuild-keygen -a -i

Собрать пакет:

cd /home/packager/reposerve/main/tftp-hpa
REPODEST=~/packages/latest abuild -r

Для установки в других экземплярах alpine возможно понадобятся сгенерированные ранее ключи для сборки пакета (/home/packager/.abuild/{*.rsa,*.rsa.pub}).

Безопасность

Отсутствует проверка на источник запроса, так как сформировать запрос на создание/удаление символической ссылки выполняется в произвольной форме.