Установка TFTP сервера под RHEL 7, CentOS 7

TFTP (англ. Trivial File Transfer Protocol — простой протокол передачи файлов) используется главным образом для первоначальной загрузки бездисковых рабочих станций. TFTP, в отличие от FTP, не содержит возможностей аутентификации и основан на транспортном протоколе UDP.

Основное назначение TFTP — обеспечение простоты реализации клиента. В связи с этим он используется для загрузки бездисковых рабочих станций, загрузки обновлений и конфигураций в сетевые устройства, маршрутизаторы, firewall, телефонные аппараты Cisco и т.д.

Устанавливаем TFTP сервер

yum install tftp tftp-server* xinetd*

Редактируем файл конфигурации, расположенный по адресу /etc/xinetd.d/tftp и приводим его к виду

# default: off
# description: The tftp server serves files using the trivial file transfer \
# protocol. The tftp protocol is often used to boot diskless \
# workstations, download configuration files to network-aware printers, \
# and to start the installation process for some operating systems.
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -c -s -v /tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}

В качестве корневой папки TFTP сервера мы используем /tftpboot, которую нужно предварительно создать.

Включаем сервис

systemctl enable xinetd
systemctl enable tftp

Далее произведем настройку SELinux, если конечно Вы его не выключили ранее ;-),  что вообщем-то делать не рекомендуется.  По умолчанию SELinux policy установлен в режим enforcing. Для того чтобы настроить разрешения для TFTP вносим изменения в файл конфигурации SELinux, расположенный /etc/selinux/config и меняем SELinux policy на permissive:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
#SELINUX=enforcing
SELINUX=permissive
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted

Перезагружаем систему и проверяем статус SELinux

[root@localhost]# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: permissive
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28

Проверяем в SELinux разрешения TFTP

[root@localhost]# getsebool -a | grep tftp
tftp_anon_write --> off
tftp_home_dir --> off

Если эти настройки выключены, те имеем статус off, включаем их командой setsebool

[root@localhost]# setsebool -P tftp_anon_write 1
[root@localhost]# setsebool -P tftp_home_dir 1

Теперь они должны выглядеть так

[root@localhost]# getsebool -a | grep tftp
tftp_anon_write --> on
tftp_home_dir --> on

После этого у нас есть работающий TFTP сервер, и нам остается настроить firewall. В RHEL7 или CentOS 7 по умолчанию это firewalld, заменивший iptables.

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

systemctl status firewalld
systemctl enable firewalld
systemctl start firewalld

Для разрешения TFTP воспользуемся командой firewall-cmd с опцией —permanent, которая добавляет в разрешенные UDP 69 порт TFTP

firewall-cmd --zone=public --add-service=tftp --permanent

Для применения изменений перечитываем настройки firewall

firewall-cmd --reload

Теперь у нас есть настроенный и работающий TFTP сервер.