Skip to content

FreeBSD tftpd и tftp-hpa

FreeBSD v13 9.1-RELEASE

Исправили параметры при запуске и перестартовали сервис inetd:

cat /etc/inetd.conf | grep tftp
tftp    dgram   udp     wait    root    /usr/libexec/tftpd      tftpd -ldw -s /var/tftp

Пробуем от клиента 192.168.112.36 отправить файл 888.cfg:

tail -f /var/log/xferlog
Oct  6 14:42:50 v13 tftpd[5533]: Filename: '888.cfg'
Oct  6 14:42:50 v13 tftpd[5533]: Mode: 'octet'
Oct  6 14:42:50 v13 tftpd[5533]: 192.168.112.36: write request for 888.cfg: error 102
Oct  6 14:42:55 v13 tftpd[5533]: Timeout #0 on DATA block 1

Не заработало! По сообщениям об ошибке ничего толкового найти не смог.

Ставлю /usr/ports/ftp/tftp-hpa Далее конфигурим по инструкции из интернета.

[root@v13 /]# pw groupadd tftpd
[root@v13 /]# pw useradd tftpd -c tftp_manager -d /nonexistent -g tftpd -s /usr/sbin/nologin
[root@v13 /]# chown tftpd:tftpd /var/tftp
[root@v13 /]# chmod 750 /var/tftp
[root@v13 /]# touch /usr/local/etc/tftpd-remap.conf
[root@v13 /]# chmod 440 /usr/local/etc/tftpd-remap.conf
[root@v13 /]# chown tftpd:tftpd /usr/local/etc/tftpd-remap.conf

Скрипт запуска /usr/local/etc/rc.d/tftpd (.sh) после make install уже был. По инструкции его раньше делали с нуля:

[root@v13 /] touch /usr/local/etc/rc.d/tftpd
[root@v13 /] chmod +x /usr/local/etc/rc.d/tftpd
[root@v13 /]# cat /usr/local/etc/tftpd-remap.conf
# Rename all files
# If WRQ: filename -> IP-filename
# If RRQ: IP-filename -> filename

# Полученные файлы будут переименовываться в -<имя файла>
r .* \i-\0
[root@v13 /]# cat /usr/local/etc/rc.d/tftpd
#!/bin/sh
#
# tftp-hpa init script
# Copyright ╘ 2006 by Alexey Tsvetnov, [email protected]
#
# 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 14682"
#

. /etc/rc.subr

name="tftpd"
rcvar=tftd_enable

load_rc_config $name

# DO NOT CHANGE THESE DEFAULT VALUES HERE

: ${tftpd_enable="NO"}
: ${tftpd_pidfile="/var/run/tftpd.pid"}
: ${tftpd_remapfile="/usr/local/etc/tftpd-remap.conf"}
: ${tftpd_datadir="/var/tftp"}
: ${tftpd_flags="-vcps -u tftpd -U 037 -B 1468"}

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 '{print $1}' > $tftpd_pidfile
      /bin/echo "."
}

tftpd_poststop() {
    /bin/rm -f $tftpd_pidfile
}

tftpd_reload() {
    /bin/kill -1 `cat $tftpd_pidfile`
}

run_rc_command "$1"
[root@v13 /]# cat /etc/rc.conf | grep tftp
tftpd_enable="YES"
tftpd_flags="--ipv4 -vcps -u tftpd -U 037 -B 1468"

Стартуем:

[root@v13 /]# /usr/local/etc//rc.d/tftpd start
Starting tftpd.

Проверяем:

[root@v13 /]# ps -ax | grep tftpd
 8641 ??  Is       0:00.00 /usr/local/libexec/in.tftpd --ipv4 -vcps -u tftpd -U 037 -B 1468 -l -m /usr/local/etc/tftpd-remap.conf /var/tftp
 8649  0  S+       0:00.00 grep tftpd

[root@v13 /]# sockstat | grep 69
root     in.tftpd   8641  4  udp4   *:69                  *:*

Загрузаем файл 555.cfg c хоста 192.168.112.36:

[root@v13 /]# tail -f /var/log/xferlog
Oct  6 16:56:40 v13 in.tftpd[8676]: WRQ from 192.168.112.36 filename 555.cfg remapped to 192.168.112.36-555.cfg

После этого заккоментарил строку /usr/local/etc/tftpd-remap.conf Загрузаем файл 555.cfg c хоста 192.168.112.36 повторно:

[root@v13 /]# tail -f /var/log/xferlog
Oct  6 17:22:38 v13 in.tftpd[8937]: WRQ from 192.168.112.36 filename 555.cfg

Теперь так как нужно. Вопрос закрыт.