ABSTRACT: inetd wird vorgestellt. tcpd wird kurz erklaert AUDIENCE: junior admin SYSTEM: any unix SECTION: basic unix commands AUTHOR: mond COPYRIGHT: GNU Free Documentation Licence http://www.gnu.org/licenses/fdl.txt normalerweise braeuchte man fuer jedes service das man auf einer kiste laufen hat einen eigenen daemon. also z.b. den apache fuer http, einen ftpd fuer ftp einen telnetd fuer telnet, etc, etc.. d.h. man haette sehr viele programme die einen grossteil der zeit nur herumhaengen und resourcen verbrauchen (da sie eh nur auf verbindungen warten praktisch kaum CPU zeit und der speicher den sie belegen wird im notfall auch in den swap bereich ausgelagert...) trozdem startet man solche dienste i.a. am besten ueber ein programm namends "inetd". inetd ist ein daemon programm dass sich auf viele ports gleichzeitig bindet und falls eine verbindung auf dem port hereinkommt startet es dann erst ein programm das ueber STDIN und STDOUT mit auf der verbindung kommunizieren kann. das configfile file von inetd ist /etc/inetd.conf ein eintrag dort koennte etwa so aussehen: telnet stream tcp nowait telnetd.telnetd /usr/sbin/in.telnetd in.telnetd der erste teil gibt das port an auf dem inetd zuhoeren soll. hier das telnet port (siehe /etc/services). man koennte auch die portnummer angeben. danach die art der verbinung. fuer tcp verbindungen nimmt man hier i.a "stream". danach das protokoll. danach wait oder nowait. meist nowait. die option "wait" wird nur fuer manche UDP server benoetigt die man aber i.a. eh nicht ueber inetd laufen lassen will. danach kommt user (und optional .gruppe) unter der das programm gestartet werden soll. (hier user telnetd und gruppe telnetd). als letztes argument das programm das gestartet werden soll. hier in.telnetd die inetd-ifizierte version von telnetd. danach kommen argumente die an das programm uebergeben werden sollen beginned mit dem 0ten argument: dem namen des programms (hier also in.telnetd) will man ein ganzes service abschalten setzt man am besten ein # als kommntarzeichen an den anfang der zeile. um dem inetd zu sagen dass er sein config file neu lesen soll schickt man dem inet ein HUP signal: killall -HUP inetd erst danach werden eventuelle aenderungen im inetd.conf wirksam. mit folgender zeile wuerde man z.b. ein port oeffnen auf dem man fortunes abfragen kann: 2345 stream tcp nowait telnetd /usr/games/fortune fortune macht man nun telnet localhost 2345 bekommt man die ausgabe des fortune programmes. analog: 2345 stream tcp nowait telnetd /bin/echo echo hallo du da schreibt ein "hallo du da" raus sobald man connected. will man einschraenken wer auf das service zugreifen darf kann man das mit einem programm namens tcpd machen (oder natuerlich mit firewall regeln. oder am besten mit beiden mechanismen) tcpd hat 2 files namens /etc/hosts.allow und /etc/hosts.deny mit denen man regeln kann wer das service beanspruchen darf. um tcpd zu aktiviern schreibt man: telnet stream tcp nowait telnetd.telnetd /usr/sbin/tcpd /usr/sbin/in.telnetd der inetd ruft jetzt als programm fuer diese verbindung tcpd auf und ueberigt als 0tes argument den echten service der zu starten ist. tcpd ueberprueft von wo die verbindung kommt und erlaubt die verbindung je nach einstellungen im file /etc/hosts.allow bzw /etc/hosts.deny z.b. eintrag in /etc/hosts.deny in.telnetd: ALL EXCEPT 123.45.67.89,192.168.0.0/255.255.255.0 das wuerde den zugriff von der einen IP 123.45.67.89 und vom netz 192.168.0.xxx erlauben. hat man ein ALL: PARANOID im /etc/hosts.deny dann schaut der tcpd auch auf DNS namen und das macht meist verzoegerungen beim connecten. EXERCISES: * durchforste dein inetd.conf und drehe nicht benoetigte service ab. * mache probehalber ein service das das aktuelle datum ausgiebt. * sperre obiges service so dass es nur von der IP addresse 127.0.0.1 (localhost) erreichbar ist. teste ob dem auch wirklich so ist in dem du von aussen zu connecten versuchst. * drehe obiges service wieder ab. REFERENCES: man inetd man tcpd man hosts_access