Nowe posty

Autor Wątek: in.tftpd: nie mogę udostępnić pliku  (Przeczytany 3046 razy)

arctgx

  • Gość
in.tftpd: nie mogę udostępnić pliku
« dnia: 2008-05-02, 17:03:09 »
Chciałbym przygotować Debiana, bym mógł udostępnić maszynie QEMU wszystko, co potrzebne do rozruchu przez sieć (DHCP+TFTP). Na razie jednak nie mogę dobrze skonfigurować serwera TFTP: za pomocą klienta tftp nie mogę pobrać pliku.

  labul # grep tftp  /etc/inetd.conf 
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftpboot/dsl-3.2"
czyli in.tftpd odpalany jest przez tcpd. Przyglądam się więc następującym plikom:

  labul # grep -vE '^#|^$'  /etc/hosts.allow | grep -Ei 'deny|tftp'
in.tftpd: 172.20.0.6, localhost: ALLOW
ALL: ALL: DENY
Plik /etc/hosts.deny jest zakomentowany w całości.

Zapuszczam polecenie inetd (nie wiem czemu, ale działa tylko uruchomione wprost, a jako usługa już nie).

W QEMU (172.20.0.6) w powłoce tftp po połączeniu z hostem daję "get ih". Dostaję "Error 0: No such file or directory". To samo dostaję, kiedy wpiszę nieistniejącą nazwę.  

Na hoście syslog gada mi tak:

May  2 16:16:05 64studio in.tftpd[5533]: connect from 172.20.0.6 (172.20.0.6)
May  2 16:16:05 64studio tftpd[5534]: tftpd: trying to get file: ih
May  2 16:16:05 64studio tftpd[5534]: tftpd: serving file from /srv/tftpboot/dsl-3.2"
No to jeszcze wylistuję moją pobieralnię - to, co trzeba:

  ~ $ ls -laR /srv/tftpboot/
/srv/tftpboot/:
razem 12
drwxr-xr-x 3 root root 4096 maj  1 21:46 .
drwxr-xr-x 3 root root 4096 maj  1 21:22 ..
drwxrwxrwx 5 root root 4096 maj  1 21:47 dsl-3.2

/srv/tftpboot/dsl-3.2:
razem 28
drwxrwxrwx 5 root root 4096 maj  1 21:47 .
drwxr-xr-x 3 root root 4096 maj  1 21:46 ..
drwxrwxrwx 3 root root 4096 maj  1 21:46 boot
[b]-rwxr-xr-x 1 root root  391 maj  1 21:47 [color=red]ih[/color][/b]
-rwxrwxrwx 1 root root  391 maj  1 21:46 index.html
drwxrwxrwx 2 root root 4096 maj  1 21:46 KNOPPIX
drwxrwxrwx 2 root root 4096 maj  1 21:46 lost+found
Plik ih jest więc w głównym katalogu, który powinien być widoczny z tftp, prawa dostępu chyba też są OK. W czym więc problem?

Ed: może wydruk z iptraf (po "get ih" na kliencie) coś podpowie:
UDP (46 bytes) from 172.20.0.6:38237 to 172.20.0.1:69 on tap0
UDP (58 bytes) from 172.20.0.6:54051 to 172.20.0.1:38237 on tap0
UDP (46 bytes) from  172.20.0.6:41411 to 172.20.0.1:54051 on tap0
ICMP dest unrch (port) (60 bytes) from 172.20.0.1 to 172.20.0.6 on tap0
Dlaczego mój tftpd używa portów innych niż 69?

darko

  • Gość
in.tftpd: nie mogę udostępnić pliku
« Odpowiedź #1 dnia: 2008-05-02, 22:22:13 »
a co dostajesz po wykonaniu
get dsl-3.2/ih

arctgx

  • Gość
in.tftpd: nie mogę udostępnić pliku
« Odpowiedź #2 dnia: 2008-05-03, 01:14:09 »
Cytat: man_tftpd
The options are:

     -n      Suppresses negative acknowledgement of requests for nonexistent relative filenames.

     -s      All absolute filenames are treated as if they were preceded by the first directory argument, or /tftpboot if there is none.
To jedyne możliwe opcje. Dwie opcje = cztery możliwości: zacząłem próbować  trzy pozostałe. Nie wiem, dlaczego opcja -s coś dała.

Rozumiem ją w ten sposób, że jeśli wpisałbym "get /ih", to powinienem pobrać plik /srv/tftpboot/dsl-3.2/ih, a bez opcji -s ten sam efekt powinno dać polecenie "get ih".

Choć Twoja podpowiedź nie była celna, w połączeniu z -s poszedłem jej tropem dalej, do końca, podając ścieżki bezwzględne na serwerze.

To działa, ale nie tego chcę. Tym sposobem pociągnąłem sobie z serwera plik /etc/passwd! A nie chcę, by klient widział mi katalogi powyżej zadanego w parametrze, czyli powyżej /srv/tftpboot/dsl-3.2.

arctgx

  • Gość
in.tftpd: nie mogę udostępnić pliku
« Odpowiedź #3 dnia: 2008-05-03, 01:25:46 »
Ale durny mój błąd...

Cytat: arctgx
  labul # grep tftp  /etc/inetd.conf 
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftpboot/dsl-3.2[color=red][b]"[/b][/color]
Przy nieistniejącej ścieżce in.tftpd wziął sobie główny katalog jako domyślny. Jest więc niebezpiecznie zaprojektowany. Inaczej, wg manuala, byłoby gdybym nie podał żadnego katalogu: wtedy brałby /tftpboot:

Cytat: man_tftpd
Access to files may be controlled by invoking tftpd with a list of directories by including pathnames as server program arguments in /etc/inetd.conf.  In this case access is restricted to files whose names are prefixed by the one of the given directories. If no directories are supplied the default is /tftpboot.  To give out access to the whole filesystem, should this be desired for some reason, supply / as an argument.
Już działa jak trza. Ale dwa dzionki w tył.

Czas teraz na próbę zbootowania systemu. Na początek samo jąderko, potem w planie PXE.