Tftpd hpa не работает

не могу запустить tftpd-hpa, recvfrom: Socket operation on non-socket

# 5 лет, 5 месяцев назад (отредактировано 5 лет, 5 месяцев назад) Здравствуйте!
Делал бездисковую станцию по статье https://habrahabr.ru/post/253573/
Выполнил
pacman -S tftp-hpa
затем
mkdir -p /etc/systemd/system/tftpd.service.d && echo -e ‘[Service]\nExecStart=\nExecStart=/usr/bin/in.tftpd -s /srv/nfs/diskless/boot’ > /etc/systemd/system/tftpd.service.d/directory.conf
но systemctl start tftpd.socket tftpd.service выдаёт следующее:
journalctl -xe

Смущает строка Завершена остановка юнита tftpd.socket.

Как разобраться, кто виноват и что делать?
.
.
.
////// заменил цитирование на cоde. vadik////

Собственно кто виноват я понял, проблема в этой строке:
ExecStart=/usr/bin/in.tftpd -s /srv/nfs/diskless/boot
из файла /etc/systemd/system/tftpd.service.d

В чём может быть проблема? Есть идеи?

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

Заработало пока так:
в файле /etc/systemd/system/tftpd.service.d
прописано как в оригинальном файле

ExecStart=/usr/bin/in.tftpd —listen $TFTPD_ARGS

ExecStart=/usr/bin/in.tftpd -s /srv/nfs/diskless/boot

Во-первых, необязательно городить огород через создание дополнительных файлов типа . /tftpd.service.d/directory.conf. Путь к нужной директории
можно просто указать в /etc/conf.d/tftpd. (Ну это, как говорится, на вкус и цвет. )
А по сути: попробуйте запустить эту команду «/usr/bin/in.tftpd -s /srv/nfs/diskless/boot» ручками в терминале, вот и увидите, что не так.
# 5 лет, 5 месяцев назад (отредактировано 5 лет, 5 месяцев назад) Спасибо большое за ответ. Раз уж взялся городить, так хоть теперь разобраться, доски кривые или руки, научиться городить в конце концов 🙂

Строку я пробовал запускать, но ничего не увидел.
/usr/bin/in.tftpd -s /srv/nfs/diskless/boot
Команда запустилась, моргает курсор, при нажатии на клавиатуру возвращается командная строка.
В запущенных процессах его нет.
Полагаю, что ждёт посылки из stdin и выходит получив код с клавиатуры.

Я если честно не понимаю что происходит в этот момент, если не указан параметр -l
Предполагаю, что без этого параметра -l (с ним сервер запускается в standalone mode) в команде systemctl start tftpd.socket tftpd.service менеджер systemd должен связать эти два сервиса чтобы данные сокета через stdin передавались в in.tftpd
Грубо говоря, старт через systemctl без параметра -l делается чтобы служба не висела постоянно в памяти, а работала только тогда, когда есть поступающие данные через socket.
Верно ли предположение? Что может мешать запуститься через socket?

Почему возникает recvfrom: Socket operation on non-socket ?
В какой лог залезть чтобы это увидеть?
Проблема с сокетом?

UPD/
вот картинка strace /usr/bin/in.tftpd -s /srv/nfs/diskless/boot
когда происходит ожидание:

Файла /var/run/nscd/socket действительно нет
Это что же, получается что все проблемы от того, что DNS на машине не поднят? Или его должен создавать tftpd.socket?
.
.
.
////// заменил цитирование на cоde. vadik////

А сеть в это время уже поднята?
# 5 лет, 5 месяцев назад (отредактировано 5 лет, 5 месяцев назад)

bitrixbiz
Файла /var/run/nscd/socket действительно нет

Прошу не пинать, но попробую немного уточнить в части возвращаемого значения вызова connect (errno=ENOENT) … — я бы не сказал, что это ошибка и на дальнейший процесс это не влияет.
Когда то трейсил libreoffice -writer на предмет долгого открытия, так вот там то же имеются такие строчки
connect(3, , 110) = -1 ENOENT (No such file or directory)
но на работу это не влияет ….
nscd это демон кэширования службы имён …. и к нему частенько все лезет … и, кстати, он по дефолту не запущен ….
$ systemctl is-enabled nscd
disabled
Насчет возвращаемого значения вызова setsockopt … errno=ENOTSOCK (Socket operation on non-socket). согласно описания означает — Аргумент s — это файл, а не сокет . С этим вызовом практически не знаком и что в действительности это означает, ничего существенного сказать не могу …. но процесс то на этом не остановился, пошел дальше и затыка не видно.

PS . еще один момент — connect, вернувший значение 0, связан с дескриптором 3, …. connect, вернувший значение -1, связан с дескриптором 4, и эти вызовы к решаемой задаче вроде бы прямого отношения не имеют ..…. а вот socket и connect, имеющие отношение к реальной задаче в логе не вижу … или они были выше или ниже …. или их нет вообще. или я ошибаюсь . .

Читайте также:  Что делать муж пьет не работает есть ребенок
То, что на команду из консоли ничего не выдает — хорошо.
Теперь покажите, что говорит «systemctl cat tftpd.service».
# 5 лет, 5 месяцев назад (отредактировано 5 лет, 5 месяцев назад)

kurych
То, что на команду из консоли ничего не выдает — хорошо.
Теперь покажите, что говорит «systemctl cat tftpd.service».

а вот strace /usr/bin/in.tftpd -s /srv/nfs/diskless/boot
при выполненном systemctl start tftpd.socket

разницы не вижу никакой, что делаешь перед этим systemctl start tftpd.socket или systemctl stop tftpd.socket
Кстати:
.
.
.
////// заменил цитирование на cоde. vadik////

# 5 лет, 5 месяцев назад (отредактировано 5 лет, 5 месяцев назад) запустил nscd, ошибка connect(4, , 110) = -1 ENOENT (No such file or directory) пропала
а остальное тоже самое.
.
.
.
////// заменил цитирование на cоde. vadik////

© 2006-2021, Русскоязычное сообщество Arch Linux.
Название и логотип Arch Linux ™ являются признанными торговыми марками.
Linux ® — зарегистрированная торговая марка Linus Torvalds и LMI.

Источник

Ещё один блог сисадмина

воскресенье, 11 мая 2014 г.

Настройка TFTP-сервера tftpd-hpa

Пока нет ничего крупного, продолжу выкладывать мелкие памятки, сделанные для себя.

Однажды мне понадобилось настроить TFTP-сервер в Linux. До этого приходилось пользоваться только TFTP-сервером во FreeBSD. Хотел найти что-то похожее, но это оказалось не так просто. Перепробованные мной два других TFTP-сервера не подошли. Точно помню, что один из них не имел опции для создания новых файлов, позволяя писать только в уже существующие файлы. Другой тоже чем-то не устроил. В итоге остановился на TFTP-сервере tftpd-hpa. У него можно отметить два достоинства:

  • Умеет работать автономно, без помощи inetd,
  • Есть опция, разрешающая создание новых файлов, что полезно для сохранения резервных копий конфигурации оборудования.

Установим пакет tftpd-hpa:
После установки отредактируем файл /etc/default/tftpd-hpa, содержащий настройки сервера. Приведём его к следующему виду:
В настройках указаны дополнительные опции:

  • create разрешает серверу создавать новые файлы,
  • ipv4 предписывает ему ожидать подключений только на адресах IPv4,
  • umask предписывает сбрасывать бит записи для группы и все биты доступа для остальных пользователей,
  • permissive предписывает не проводить никаких проверок прав доступа к файлу сверх производимых операционной системой.

Создадим каталог для tftp-сервера, дадим серверу доступ к каталогу:
Можно также поменять домашний каталог пользователя tftp в файле /etc/passwd на /var/tftp.

Осталось перезапустить демона, чтобы он начал работу с новым каталогом:

5 комментариев:

Спасибо, помогло. А то замучили меня inetd и xinetd ( под ними циска чет не могла бэкап положить)

Эти две опции лучше убрать:
—umask 027 —permissive
С некоторых свичей бывает так , что файл создаётся , но по факту он пустой.
Явно что-то по правам доступа. Если убираешь — всё нормально.

—permissive разрешает tftp-серверу создавать файлы, без этой опции он будет писать только в те файлы, которые уже существуют.

Чушь несусветная. Создание файлов разрешает опция —create, это вроде бы как из самог названия опции должно быть понятно. Не надо фантазировать.

Я в ubuntu-16.04 сделал так:

TFTP_USERNAME=»tftp»
TFTP_DIRECTORY=»/home/user/tftp»
TFTP_ADDRESS=»0.0.0.0:69″
TFTP_OPTIONS=»—ipv4 —secure —create —umask 000 —permissive»

# mkdir /home/user/tftp
# usermod -a -G tftp user
# chmod –R 777 /home/user/tftp

Теперь все в домашнем коталоге

Анонимный, именно так и написано в тексте заметки. С кем спорите?

Источник

Tftpd-hpa

Материал из Пингвиньи радостей

Содержание

Статья о tftp сервере Tftpd-hpa

Tftpd-hpa это программа, создающая TFTP сервер и обеспечивающая возможность бездисковой Загрузки компьютера по сети.

Установка

Пакет присутствует в хранилище пакетов debian.
Для установки пакета

  • в командной строке: следует выполнить команду # apt-get install tftpd-hpa
  • в графическом режиме: воспользоваться специализированной программой управления пакетами

После установки пакет готов к работе.

Tftpd-hpa может работать в двух режимах: в «режиме демона» и «режиме сервиса». Переключение между режимами, а также установка параметров запуска программы, осуществляется в файле конфигурации /etc/default/tftpd-hpa.

Читайте также:  Настроить аирпринт с айфона

Некоторые часто использумые команды

Проверки работоспособности сервера

Для проверки работоспособности сервера могут быть использованы команды

Режим сервиса

Если режим работы Tftpd-hpa прямо не указан в файле /etc/default/tftpd-hpa, то по умолчанию используется «режим сервиса». Для реализации данного режима должен быть установлен суперсервер openbsd-inetd. Способ запуска в «режим сервиса» подходит для работы сервера TFTP в публичных сетях, в связи с возможностю повысить безопасность его использования с помощью Tcpd и библиотеки libwrap.

(Например) Для установки ограничений доступа к серверу Tftpd-hpa

  • в файлы конфигурации пакета Tcpd добавляются строки
  • для применения новой конфигурации осуществляется перезапуск сервиса

Режим демона

В режиме демона Tftpd-hpa запускается самостоятельно и не требует для своей работы других программ . Данный режим удобен в доверенной сети — например для поддержки загрузки LTSP-клиентов.

Для переключения в «режим демона»

  • в файл /etc/default/tftpd-hpa добавляется строка
  • комментируется строка с запуском сервиса в /etc/inetd.conf
  • перезапускается суперсервер inetd
  • перезапускается tftpd-hpa

Трансформация запросов к серверу

Благодаря поддержке подключения файла переименований, Tftpd-hpa может осуществлять трансформацию запросов к серверу. Это востребовано например при развёртывании установки Windows по сети.

Для подключения файла переименований, например в «режим демона»

  • в файл конфигурации /etc/default/tftpd-hpa добавляется строка
  • перезапускается сервер

Источник

The tftpd-hpa doesn’t start after update

I have tftpd-hpa installed(Ubuntu 16.04 LTS). Recently, maybe after getting some updates (or uninstalling some application with vaste dependencies) the tftpd-hpa doesn’t start anymore. The tftpd-hpa settings are:

The default root directory is /var/lib/tftpboot . Output of systemctl status tftpd-hpa.service and journalctl -xe commands:

EDIT: below is sudo netstat -lnp | grep 69 output

2 Answers 2

Combining the two parts of information:

Recently, after some updates received

And the following error:

Apr 18 01:47:32 Amtek in.tftpd[4777]: cannot bind to local IPv4 socket: Address already in use

It seems like the problem is that the tftp port (69) is already in use, when you start the tftp server. This might be due to a new program which was installed/updated recently.

Running the following command will help you figure out which process is using tftp port (69) on your machine:

-l, —listening Show only listening sockets. (These are omitted by default.)

—numeric , -n Show numerical addresses instead of trying to determine symbolic host, port or user names.

-p, —program Show the PID and name of the program to which each socket belongs.

Note: The | grep 69 filter the result and will show only the lines which holds 69 in them

As you added to your question the result of netstat -lnp shows that now inetd is running on udp/port 69, it is possible that it execute tftp client as part of inetd , hence you can’t run tftpd-hpa on this port.

Note: Please check if tftpd is running, and if it is good enough you can avoid using tftpd-hpa

You have two options:

Move tftp server to use different port This can be done by changing the following line which set tftp on port 69:

To use other port, e.g. 6900:

Note: Using this solution will require that tftp-client will use the new port number

Stop inetd from using udp/69 You can check if tftp configuration file exists in inetd folder, search for a file in a name like:

Источник

Tftpd hpa не работает

Собственно, возникла необходимость в настройке tftp-сервера для хранения конфигурационных файлов коммутаторов, прошивок оборудования, etc. А если есть необходимость — значит пора приступать к настройке собственного TFTP-сервера. Для начала немного общей информации о принципах работы протокола TFTP.

Простейший протокол передачи файлов (TFTP) — это очень удобный и простой протокол, применяемый для копирования файлов с одного устройства, поддерживающего протоколы TCP/IP, на другое.

В протоколе TFTP в качестве транспортного протокола используется UDP, а это означает, что на транспортном уровне TFTP является ненадежным. Но для обеспечения надежности в протоколе TFTP применяется собственная система подтверждения. При передаче файла с помощью TFTP этот файл разбивается на блоки по 512 байтов и передается в виде блоков. Устройство получателя должно передавать подтверждение ACK после получения каждого 512-байтового блока. Применение метода передачи с помощью окон не предусматривается. Вместо этого устройство отправителя просто следит за тем, на какой блок не было получено подтверждение АСК, и не отправляет больше данные до тех пор, пока не будет получено АСК для этого блока. Такое функциональное средство приводит к созданию простого и удобного в реализации механизма исправления ошибок.

Читайте также:  Sharp multisystem как настроить каналы

Протокол TFTP не поддерживает многие важные средства FTP, но именно поэтому он и является таким небольшим и простым протоколом. В частности, протоколом TFTP не поддерживается аутентификация пользователя (по идентификатору пользователя и паролю). Функции получения листингов каталогов и просмотра каталогов также не поддерживаются. При использовании TFTP предполагается, что программа, запрашивающая файл, имеет информацию о точном имени файла, а программа, передающая файл, имеет сведения, где находится этот файл. Если любое из этих предположений оказывается неверным, происходит ошибка и передача отменяется.

Более детально с тем, как работает протокол TFTP можно здесь.

Протокол TFTP определен в документе RFC 1350 (стандарт 33), который находится по адресу ftp://ftp.isi.edu/in-notes/std/std33.txt.

С принципами работы протокола разобрались. Приступим к настройке ПО TFTP-сервера, а именно tftp-hpa. Основные возможности tftp-hpa:

  • запуск программы в режиме standalone от имени непривилегированного пользователя;
  • создавать от имени непривилегированного пользователя файлы с определенными правами;
  • выполнять chroot в выбранный каталог;
  • ограничение доступа к файлам по таким критериям, как имя файла и переданная команда (WRQ или RRQ);
  • прозрачное переименовывание файлов в зависимости от IP-адреса клиента.

В поставке идёт также достаточно удобная клиентская программа, которая, в отличие от поставляемой с базовой системой, позволяет передавать желаемые команды прямо в строке вызова.

Приступим к установке:

# cd /usr/ports/ftp/tftp-hpa && make install clean

Теперь добавим группу tftpd и пользователя tftpd, от имени которых и будет работать tftp-hpa:

# pw groupadd tftpd
# pw useradd tftpd -c TFTP\ manager -d /nonexistent -g tftpd -s /usr/sbin/nologin

Далее создаем рабочий каталог и выставляем необходимые права доступа:

# mkdir /var/tftp
# chown tftpd:tftpd /var/tftp
# chmod 750 /var/tftp

Создаем конфигурационный файл обработки файлов (переименование, контроль доступа), выставляем необходимые права доступа:

# touch /usr/local/etc/tftpd-remap.conf
# chmod 440 /usr/local/etc/tftpd-remap.conf
# chown tftpd:tftpd /usr/local/etc/tftpd-remap.conf

Редактируем /usr/local/etc/tftpd-remap.conf до следующего состояния:

# cat /usr/local/etc/tftpd-remap.conf
# Rename all files
# If WRQ: filename -> IP-filename
# If RRQ: IP-filename -> filename

Создаем стартовый скрипт запуска и делаем его исполняемым:

# touch /usr/local/etc/rc.d/tftpd.sh
# chmod +x /usr/local/etc/rc.d/tftpd.sh

Правим его до следующего содержания:

# cat /usr/local/etc/rc.d/tftpd.sh

#!/bin/sh
#
# tftp-hpa init script
# Copyright (c) 2006 by Alexey Tsvetnov, vorakl [at] fbsd [dot] kiev [dot] ua
#
# PROVIDE: tftpd
# REQUIRE: DAEMON
# BEFORE: LOGIN
# KEYWORD: shutdown
#
# Define these tftpd_* variables in one of these files:
# /etc/rc.conf
# /etc/rc.conf.local
# /etc/rc.conf.d/tftpd
#
# tftpd_enable (bool): Set it to «YES» to enable tftpd.
# Default is «NO».
# tftpd_pidfile (path): Set full path to tftpd.pid.
# Default is «/var/run/tftpd.pid».
# tftpd_remapfile (path): Set full path to remap file.
# Default is «/usr/local/etc/tftpd-remap.conf».
# tftpd_datadir (path): Set full path to directory with data.
# Default is «/var/tftp».
# tftpd_flags (str): Extra flags passed to start command.
# Default is «-cps -u tftpd -U 037 -B 1468».
#

# DO NOT CHANGE THESE DEFAULT VALUES HERE

extra_commands=»reload»
start_cmd=»tftpd_start»
stop_postcmd=»tftpd_poststop»
reload_cmd=»tftpd_reload»
required_files=»/usr/local/etc/tftpd-remap.conf»
pidfile=$tftpd_pidfile
procname=»/usr/local/libexec/in.tftpd»

tftpd_start() <
/bin/echo -n «Starting tftpd»
/usr/local/libexec/in.tftpd $tftpd_flags -l -m $tftpd_remapfile $tftpd_datadir
/bin/ps x | /usr/bin/grep in.tftpd | /usr/bin/grep -v grep | /usr/bin/awk ‘‘ > $tftpd_pidfile
/bin/echo «.»
>

tftpd_poststop() <
/bin/rm -f $tftpd_pidfile
>

tftpd_reload() <
/bin/kill -1 `cat $tftpd_pidfile`
>

Добавляем в rc.conf строку запуска tftp-сервера:

# echo ‘# TFTP Server’ >> /etc/rc.conf
# echo ‘tftpd_enable=»YES»‘ >> /etc/rc.conf

Ну и, собственно, запускаем tftp-hpa:

# sh /usr/local/etc/rc.d/tftpd.sh start
Starting tftpd.

Собственно говоря, на этом все. Проверку работоспособности описывать уже не буду. Единственный совет — не забывайте о файрволе 😉

FreeBSD 8.2 работает

FreeBSD 8.2 работает некорректно

Got ERROR packet: Unsupported option(s) requested
Error code 2048: Unsupported option(s) requested

всякий раз логиниться и набирать mode binary — для PXE это неприемлемо

Источник

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