Gedächtnisstützen IT

Allgemein

tftp, SELinux und firewalld unter Redhat 8

TFTP zum Funktionieren zu bringen ist eine Qual, vor allem auch deshalb, weil teilweise nicht geloggt wird und daher die Infos fehlen …

Nach der Installation mit

$ sudo yum install tftp

funktionierte erst einmal lange Zeit nichts. Es gabe Probleme mit Schreibrechten, denen nicht einmal mit 777 beizukommen waren.
Schließlich konnte unter /var/log/audit/audit.log SELinux als Verursacher des Problems identifiziert werden:

type=AVC msg=audit(1635500788.578:14267): avc:  denied  { write } for  pid=17556 comm="in.tftpd" name="tftpboot" dev="dm-3" ino=132 scontext=system_u:system_r:tftpd_t:s0 tcontext=unconfined_u:object_r:unlabeled_t:s0 tclass=dir permissive=0
type=SYSCALL msg=audit(1635500788.578:14267): arch=c000003e syscall=257 success=no exit=-13 a0=ffffff9c a1=556177fa2442 a2=41 a3=1b6 items=0 ppid=17548 pid=17556 auid=4294967295 uid=65534 gid=65534 euid=65534 suid=65534 fsuid=65534 egid=65534 sgid=65534 fsgid=65534 tty=(none) ses=4294967295 comm="in.tftpd" exe="/usr/sbin/in.tftpd" subj=system_u:system_r:tftpd_t:s0 key=(null)ARCH=x86_64 SYSCALL=openat AUID="unset" UID="nobody" GID="nobody" EUID="nobody" SUID="nobody" FSUID="nobody" EGID="nobody" SGID="nobody" FSGID="nobody"
type=PROCTITLE msg=audit(1635500788.578:14267): proctitle=2F7573722F7362696E2F696E2E7466747064002D63002D73002F646174612F74667470626F6F74

Googeln brachte mich in 2 Schritte zu Beiträgen die mir folgendes empfahlen:

$ sudo setsebool -P tftp_anon_write 1
$ sudo setsebool -P tftp_home_dir 1
$ sudo chcon -t -P tftpdir_rw_t /data/tftpboot/*

Als zusätzliches Problem stellte sich heraus, dass am “Client” die Firewall die Pakete nach der ersten Verbindung blockt, weil sich das Protokoll im high-Port-Bereich die Parameter für die tatsächliche Übertragung vereinbaren. Also muss komplett noch UDP zwischen Server und Client am Client freigeschaltet werden. Man muss eh nicht sagen, dass es dann auf den eigentlichen Clients gar keine Firewall gibt. Allerdings ist der verwendete TFTP-Client etwas komfortabler und aussagekräftiger, als der TFTP-Client auf der Netzwerkkomponente …
Aus Gründen, die ich nicht weiter verfolgt habe, bringt der folgende Befehl nicht das gewünschte Ergebnis:

$ sudo firewall-cmd --add-service=tftp-client --permanent

Ich habe dann ein ganzes Netzwerk für UDP freigeschaltet:

$ sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="a.b.c.d/27" accept' --permanent

firewalld am Server sollte natürlich ebenfalls angepasst sein:

$ sudo firewall-cmd --add-service=tftp --permanent

Noch ein paar NAcharbeiten, nachdem das tftp-Verzeichnis verschoben wurde:

Zuerst allgemeiner das Verzeichnis über SELinux public gemacht:

$ semanage fcontext -a -t public_content_rw_t "/data/tftpboot(/.*)?"
$ restorecon -F -R -v /data/tftpboot/

Dann lieber auf den tftp-daemon beschränkt:

$ semanage fcontext -m -t tftpdir_rw_t "/data/tftpboot(/.*)?"
$ restorecon -F -R -v /data/tftpboot

Das -a setzt neu, und das -m modifiziert!

Schreibe eine Antwort

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.