4. december

Inetd

Dagens kalendergave inetd er ikke en kommando, men en "daemon". Inetd lytter på en række forskellige porte i stedet for at man skal have en masse forskellige daemons kørende. Tilbyder man f.eks ftp, telnet og finger service, er det inetd der lytter på både ftp porten, telnet porten og finger porten i stedet for at der skulle køre en daemon forhver af de tre. Hvis en ftp klient prøver at forbinde sig til maskinen, starter inetd ftp serveren - som altså kun startes efter behov.

Hvis dette gøres for en lang række services, sparer man system ressourcer ved kun at have inetd-daemon'en og de nødvendige (anvendte) services til at køre på systemet, i stedet for at have alle mulige daemons kørende. Man opnår også en mere central adgangskontrol - se lidt senere om tcp-wrappers.

Inetd er dog ved at være lidt forældet af to grunde: For det første er den i de fleste distributioner afløst af xinetd, som i store træk gør det sammme. Xinetd er beskrevet lidt længere nede. For det andet fordi de fleste af de services den som standard tilbyder at styre, ikke længere er nogen man bør anvende. Herunder kan nævnes telnet, rlogin, rsh og rexec. Enkelte services som time og i visse tilfælde ftp, kan dog stadig være relevante. Desuden kan services som ikke normalt køres af inetd, f.eks. mail service, ofte med lidt anstrengelser fås til det. Det kommer vi dog ikke ind på her.

Konfiguration

Inetd styres af konfigurationsfilen /etc/inetd.conf. Hver linie består af en række felter: Service navn, socket type, protokol, wait|nowait, bruger, server program, argumenter.

De services hvor linien starter med et kommentartegn, er slået fra. Skal man slå en service fra eller til i inetd, editerer man altså blot konfigurationsfilen /etc/inetd.conf, hvor man indsætter eller fjerner et kommentartegn i begyndelsen af linien for den pågældende service. Derefter genstarter man inetd daemonen:

# killall -1 inetd.

Eks: Udsnit af /etc/inetd.conf

time		stream	tcp	nowait	root	internal
#login		stream	tcp	nowait	root	/usr/sbin/tcpd	/usr/sbin/in.rlogind
#exec		stream	tcp	nowait	root	/usr/sbin/tcpd	/usr/sbin/in.rexecd

Time er slået til imens rlogin og rexec er slået fra.

TCP wrappers

Adgangen til de services, der styres af inetd, kan på en nem måde konfigureres, så der er kontrol over hvem, der har adgang til at bruge de forskellige services, maskinen tilbyder. Adgangskontrollen sker via filerne /etc/hosts.allow og /etc/hosts.deny. Når tcpd skal finde ud af, om der er adgang til en service, checker den først /etc/hosts.allow. Hvis der her er givet explicit adgang, godkendes forsøget, og servicen bliver startet. Hvis der ikke står noget om den pågældende service i /etc/hosts.allow, læses nu /etc/hosts.deny. Hvis /etc/hosts.deny ikke indeholder noget, der forbyder den forsøgte adgang, vil forsøget blive godkendt. Derfor sætter man sin /etc/hosts.deny op til at slutte med at afvise alt.

Eks: /etc/hosts.allow

in.ftpd: 0.0.0.0/0.0.0.0
ALL: 192.168.0.2

Denne /etc/hosts.allow vil tillade hele verden adgang til ftp, og giver host 192.168.0.2 lov til alt.

Eks. /etc/hosts.deny

ALL: 0.0.0.0/0.0.0.0

Denne linie nægter alle adgang til alt, medmindre der specifikt er givet lov i filen /etc/hosts.allow.

Xinetd

I nyere versioner af f.eks. Red Hat er inetd erstattet af xinetd. Xinetd har forskellige sikkerhedsmæssige fortrin: Den kan kompileres med libwrap som er lidt mere avanceret end tcp-wrappers. Den kan sætte begrænsninger på antallet af connections, og har nogle avancerede log faciliteter. Desuden yder den nogen beskyttelse mod denial of service angreb.

Konfigurationsfilen til xinetd hedder /etc/xinetd.conf. I stedet for at services slås til og fra i /etc/xinetd.conf, er der på nogle distributioner et directory, /etc/xinetd.d, hvor hver service har en fil. Dette directory er inkluderet i /etc/xinetd.conf filen med linien "includedir /etc/xinetd.d".

Eks: /etc/xinetd.d/wu-ftpd

service ftp
{
        disable = no
        socket_type             = stream
        wait                    = no
        user                    = root
        server                  = /usr/sbin/in.ftpd
        server_args             = -I -l -a
#       log_on_success          += DURATION USERID
#       log_on_failure          += USERID
        nice                    = 10
}

"disable" feltet kan sættes til yes eller no, hvis det er sat til yes, er servicen slået fra. Hvis det er sat til "no" er servicen slået til.

Xinetd genindlæser sin konfigurationsfil ved kommandoen

# killall -USR1 xinetd

Vil man have at de nye regler kommer til at gælde for alle eksisterende forbindelser øjblikkelig, skal man bruge

# killall -USR2 xinetd

For mere information om dagens emne kan man læse flg. manualsider: Man inetd, man inetd.conf, man xinetd, man xinetd.conf, man tcpd, og man hosts.allow eller man hosts.deny (de to sidste er samme fil).