2019. február 8., péntek

TFTP-szerver Debian 9 Strech-en atftpd-vel

Kezdjük a szerver és a kliens telepítésével:
root@debian9:~# apt-get install atftpd atftp

Egyesek szerint nem haszontalan, ha az ember olvas. Megragadja figyelmünket a vastaggal kiemelt rész:
The following additional packages will be installed:
  libevent-2.0-5 libfile-copy-recursive-perl openbsd-inetd update-inetd

Ezek szerint az atftpd inetd-t használ. Na, majd leszoktatjuk róla:)

A telepedés után nézzük csak meg a
root@debian9:~# netstat -tulpn
parancs kimenetét, látni fogjuk, hogy az inetd az udp 69-es porton lóg.

Nézzük meg az /etc/inetd.conf fájl tartalmát, ebből kiderül például, hogy a szerverünk gyökérmappája az /srv/tftp, úgyhogy tegyünk ide egy fájlt, aztán próbáljuk megszerezni. Az alábbiak szerint valami nem oké...
root@debian9:~# touch /srv/tftp/egy.txt
root@debian9:~# atftp localhost
tftp> get egy.txt
timeout: retrying...
timeout: retrying...
timeout: retrying...
timeout: retrying...
timeout: retrying...
^Ctftp: unknown error.
tftp: aborting
tftp> quit
root@debian9:~# 

Ha utánanézünk, hogy ez meg mi (javaslom a ping localhost parancsot), akkor látjuk, hogy a localhost nem 127.0.0.1, hanem ::1. Ugyanezt erősíti meg a következő parancs kimenete:
root@debian9:~# getent hosts localhost
::1             localhost ip6-localhost ip6-loopback

Azaz a gethostbyname() hívás az IPv6 címet adja vissza, ha van ilyen. Az aftpd jelen verziója pedig olyat nem tud, úgyhogy bukó, megyünk sírni. Ja nem, használjuk az atftp 127.0.0.1 parancsot :) Ha azt akarjuk, hogy az alábbi példák menjenek, kell még egy
root@debian9:~# chown nobody:nogroup /srv/tftp/egy.txt
parancs is. Nélküle megy majd a get, de a put nem.
root@debian9:~# atftp 127.0.0.1
tftp> get egy.txt
tftp> put egy.txt
tftp> put .bashrc
tftp> quit
root@debian9:~# ls -A /srv/tftp/
.bashrc  egy.txt

Akkor eddig megvagyunk, de legyen az atftpd önálló, ne szoruljon az inetd gyámkodására! Jó érzékkel megnézzük, mi van /usr/share/doc/atftpd -ben, és találunk README.Debian-t, amit mindig tiszta haszon elolvasni (majdnem). Felfedezzük, hogy van /etc/default/atftpd, és ebben az USE_INETD=false lesz, ami szent célunkhoz elvezet.

A
root@debian9:~# systemctl start atftpd
kevés az üdvösséghez, még a
root@debian9:~# systemctl status atftpd
sem hazudik, hiszen Active: active (exited) -et mond, és itt az exited a lényeg. A fenti netstat parancsot újra kiadva látjuk, hogy még mindig az ined fogja a 69-es udp-portot.

Na akkor:
root@debian9:~# systemctl disable inetd
Removed /etc/systemd/system/multi-user.target.wants/inetd.service.
root@debian9:~# systemctl stop inetd
root@debian9:~# systemctl restart atftpd
root@debian9:~# systemctl status atftpd
<vágva>
 Active: active (running)
<vágva>
root@debian9:~# systemctl enable atftpd
atftpd.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable atftpd
  • az első paranccsal leállítjuk az inetd-t (ha kellene még valami miatt, akkor alakítsuk megjegyzéssé az /etc/inetd.conf atftpd-vel foglalkozó sorát, és indítsuk újra az inetd-t).
  • a másodikkal elértük, hogy rebootkor nem indul el újra.
  • a harmadikkal elindítjuk az atftpd-t
  • a negyedikkel meggyőződünk róla, hogy megy (running),
  • az utolsóval meg elértük, hogy rebootkor újra elindul.

Jó:)

Irodalom:
https://unix.stackexchange.com/questions/50365/getent-hosts-prints-ipv6-getent-ahosts-prints-ipv4

Nincsenek megjegyzések: