init
This commit is contained in:
commit
29da8777e6
9 changed files with 582 additions and 0 deletions
141
README.md
Normal file
141
README.md
Normal file
|
@ -0,0 +1,141 @@
|
|||
# tftp-hpa-trq
|
||||
|
||||
- [Описание](#описание)
|
||||
- [Пример запроса на `php`](#пример-запроса-на-php)
|
||||
- [Пример запроса на `python`](#пример-запроса-на-python)
|
||||
- [Сборка пакета в Docker](#сборка-пакета-в-docker)
|
||||
- [Генерация ключей](#генерация-ключей)
|
||||
- [Безопасность](#безопасность)
|
||||
|
||||

|
||||
|
||||
## Описание
|
||||
|
||||
К [стандартным](http://isp.vsi.ru/library/Networking/TCPIPIllustrated/tftp_tri.htm) `opcodes` `RRQ` и `WRQ` был добавлен `TRQ` (*Thinstation Request*) со значением `6`, позволяющий создать символическую ссылку на файл-загрузчик для PXE-сервера.
|
||||
|
||||
Структура `filename` принимаемая TFTP-сервером состоит из частей, разделённая `;`:
|
||||
```sh
|
||||
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`:
|
||||
|
||||
```sh
|
||||
01-ff-ff-ff-ff-ff-ff;cr;thinstation
|
||||
```
|
||||
|
||||
Удаление символической ссылки:
|
||||
|
||||
```sh
|
||||
01-ff-ff-ff-ff-ff-ff;rm
|
||||
```
|
||||
|
||||
Структура каталога `tftpboot`:
|
||||
|
||||
```sh
|
||||
.
|
||||
└── tftpboot
|
||||
└── [drwxrwxrwx] mac.cfg
|
||||
├── 01-ff-ff-ff-ff-ff-ff -> thinstation
|
||||
└── thinstation
|
||||
```
|
||||
|
||||
## Пример запроса на PHP
|
||||
|
||||
Создание пакета на PHP для создания символической ссылки, отправляемого на TFTP-сервер:
|
||||
|
||||
```php
|
||||
$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);
|
||||
```
|
||||
|
||||
## Пример запроса на Python
|
||||
|
||||
Создание пакета на Python для создания символической ссылки, отправляемого на TFTP-сервер:
|
||||
|
||||
```python
|
||||
import socket
|
||||
|
||||
opcode = 6 # TRQ opcode
|
||||
request = '01-ff-ff-ff-ff-ff-ff;cr;thinstation'
|
||||
mode = 'octet'
|
||||
ip = '192.168.0.11'
|
||||
port = 69
|
||||
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
package = chr(0) + chr(opcode) + request + chr(0) + mode + chr(0)
|
||||
sock.sendto(package.encode(), (ip, port))
|
||||
sock.close()
|
||||
```
|
||||
|
||||
## Сборка пакета в Docker
|
||||
|
||||
Склонировать репозиторий в удобное место:
|
||||
|
||||
```sh
|
||||
git clone https://git.zhirov.kz/alexander/tftp-hpa-trq.git
|
||||
```
|
||||
|
||||
Войти в оболочку `alpine` для сборки пакета запустив `docker` командой:
|
||||
|
||||
```sh
|
||||
docker run --rm -it -v $PWD/tftp-hpa-trq:/home/packager/reposerve/main/tftp-hpa-trq alpine:latest /bin/ash
|
||||
```
|
||||
|
||||
Установить инструменты разработчика:
|
||||
|
||||
```sh
|
||||
apk add sudo build-base alpine-sdk
|
||||
```
|
||||
|
||||
Cоздать пользователя `packager` и добавьте его в список sudo
|
||||
|
||||
```sh
|
||||
adduser -D packager
|
||||
addgroup packager abuild
|
||||
echo 'packager ALL=(ALL) NOPASSWD:ALL' >/etc/sudoers.d/packager
|
||||
```
|
||||
|
||||
Войти под созданным пользователем `packager`:
|
||||
|
||||
```sh
|
||||
sudo -u packager sh
|
||||
```
|
||||
|
||||
Собрать пакет:
|
||||
|
||||
```sh
|
||||
cd /home/packager/reposerve/main/tftp-hpa-trq
|
||||
REPODEST=~/packages/latest abuild -r
|
||||
```
|
||||
|
||||
Для установки в других экземплярах `alpine` возможно понадобятся сгенерированные ранее ключи для сборки пакета (`/home/packager/.abuild/{*.rsa,*.rsa.pub}`).
|
||||
|
||||
### Генерация ключей
|
||||
|
||||
Сгенерировать ключи:
|
||||
|
||||
```sh
|
||||
abuild-keygen -a -i
|
||||
```
|
||||
|
||||
Или же прокинуть в контейнер свои ключи в `/home/packager/.abuild`.
|
||||
|
||||
|
||||
## Безопасность
|
||||
|
||||
Отсутствует проверка на источник запроса, так как сформировать запрос на создание/удаление символической ссылки выполняется в произвольной форме.
|
Loading…
Add table
Add a link
Reference in a new issue