Sicherheit unter Linux
16 Schritte zu einem sicheren Linux-System

Walter Selos

Linux findet, vor allem als zuverlässiges Server-Betriebssystem, immer mehr Verbreitung. Die meisten dieser Linux-Installationen sind, insbesondere an der TU, ständig mit dem Internet verbunden. Aus diesem Grund ist es besonders wichtig, über die Sicherheit der Installation Überlegungen anzustellen.

Das Gerücht, Linux sei ein "Hacker-Betriebssystem", geht einerseits auf die große Verbreitung und gute Dokumentation zurück, bewahrheitet sich bezüglich Netzwerksicherheit aber nur dann, wenn das entsprechende Fachwissen, das zum Betrieb eines Servers nötig wäre, fehlt (das gilt nicht nur für Linux). Da die Installation von Linux jetzt schon sehr bequem und menügeführt vonstatten geht, ist dafür ein solches Wissen nicht nötig, um zu einem lauffähigen Linux zu kommen, was sich im Betrieb allerdings rächen kann. Um sich dieses Wissen gezielter aneignen zu können, möchte ich in Form einer Checkliste die mir am wichtigsten erscheinenden Punkte zusammenfassen. So haben Sie einerseits eine grobe Konfigurations-Richtlinie zur Verfügung, andererseits können Sie Ihr Wissen gezielter vertiefen, wenn Sie beim Durchlesen der Checkliste auf Wissenslücken stoßen.

Es ist für ein komplexes Server-Betriebssystem, welches noch dazu in verschiedensten Distributionen und Versionen verfügbar ist, evident, dass diese Liste keinen Anspruch auf Vollständigkeit hat.

Checkliste

Tipp 1

Starten Sie nur die benötigten Services (Daemons)

a

Start über Startupscripts

Top Die folgenden Daemons werden über Startupscripts gestartet, welche sich in einem für den jeweiligen Runlevel relevanten Verzeichnis befinden.

Wie weiß ich den Standard Runlevel ?

grep default /etc/inittab

Als Ergebnis sehen Sie eine Zeile, z.B:

id:3:initdefault:

Die 3 entspricht dem eingestellten Runlevel.

Wenn Sie z.B. den unten angegebenen dhcp-Server deaktivieren wollen, gehen Sie in das dem Runlevel entsprechende Verzeichnis z.B. /etc/rc.d/rc3.d (kann je nach Distribution variieren) und nennen Sie die Datei S35dhcpd auf s35dhcpd um.

Beim nächsten Reboot wird dieser Daemon nicht mehr gestartet.

Die Nummer hinter dem "S" gibt die Startreihenfolge an und kann je nach Distribution variieren.

Einige Beispiele von Startupscripts:

S05apmd       You only need this for laptops
S10xntpd      Network time protocol
S11portmap    Required if you have any rpc services, such as NIS or NFS
S15sound      Saves sound cared settings
S15netfs      This is the nfs client, used for mounting filesystems from a nfs server
S20rstatd     Try to avoid running any r services,
S20rusersd    they provide too much information to remote users
S20rwhod
S20rwalld
S20bootparamd Used for diskless clients, you probably don't need this vulnerable service
S25squid      Proxy server
S34yppasswdd  Required if you are a NIS server, this is an extremely vulnerable service
S35ypserv     Required if you are a NIS server, this is an extremely vulnerable service
S35dhcpd      Starts dhcp server daemon
S40atd        Used for the at service, similar to cron, by not required by the system
S45pcmcia     You only need this script for laptops
S50snmpd      SNMP daemon, can give remote users detailed information about your system
S55named      DNS server. If you are setting up DNS, upgrade to the latest version of BIND
              http://www.isc.org/bind.html
S55routed     RIP, don't run this unless you REALLY need it
S60lpd        Printing services
S60mars-nwe   Netware file and print server
S60nfs        Use for NFS server, do not run unless you absolutely have to
S72amd        AutoMount daemon, used to mount remote file systems
S75gated      used to run other routing protocols, such as OSPF
S80sendmail   You can still send email if you turn this script off, you just will not
              be able to receive or relay
S85httpd      Apache webserver, I recommend you upgrade to the latest version
              http://www.apache.org/
S87ypbind     Required if you are a NIS client
S90xfs        X font server
S95innd       News server
S99linuxconf  Used to remotely configure Linux systems via browser,
              every black-hat's dream :)

 

b Start über inetd.conf -> TCP-Wrapper einbauen
Top Beispiel: Hier ist z.B. nur ftp und swat (Samba Configuration Tool) erlaubt, ftp und swat werden über den TCP-Wrapper (tcpd) umgeleitet. Das System läuft auch noch, wenn man alles auskommentiert, also keine falsche Scheu, besser man dreht ein Service ab, das man nachher wieder aktivieren muss, als man wird Opfer einer Hackerattacke!

#
# inetd.conf    This file describes the services that will be available
#        through the INETD TCP/IP super server.  To re-configure
#        the running INETD process, edit this file, then send the
#        INETD process a SIGHUP signal.
#
# Version:    @(#)/etc/inetd.conf 3.10 05/27/93
#
# Authors:    Original taken from BSD UNIX 4.3/TAHOE.
#        Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
#
# Modified for Debian Linux by Ian A. Murdock <imurdock@shell.portal.com>
#
# Modified for RHS Linux by Marc Ewing <marc@redhat.com>
#
# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
#
# Echo, discard, daytime, and chargen are used primarily for testing.
#
# To re-read this file after changes, just do a 'killall -HUP inetd'
#
#echo       stream    tcp    nowait    root    internal
#echo       dgram     udp    wait      root    internal
#discard    stream    tcp    nowait    root    internal
#discard    dgram     udp    wait      root    internal
#daytime    stream    tcp    nowait    root    internal
#daytime    dgram     udp    wait      root    internal
#chargen    stream    tcp    nowait    root    internal
#chargen    dgram     udp    wait      root    internal
#time       stream    tcp    nowait    root    internal
#time       dgram     udp    wait      root    internal
#
# These are standard services.
#

ftp        stream    tcp    nowait    root    /usr/sbin/tcpd    in.ftpd -l -a

#telnet    stream      tcp     nowait      root        /usr/sbin/tcpd    in.telnetd
#
# Shell, login, exec, comsat and talk are BSD protocols.
#
#shell    stream    tcp    nowait    root    /usr/sbin/tcpd    in.rshd
#login    stream    tcp    nowait    root    /usr/sbin/tcpd    in.rlogind
#exec     stream    tcp    nowait    root    /usr/sbin/tcpd    in.rexecd
#comsat   dgram     udp    wait    root    /usr/sbin/tcpd    in.comsat
#talk     dgram     udp    wait    nobody.tty    /usr/sbin/tcpd    in.talkd
#ntalk    dgram     udp    wait    nobody.tty    /usr/sbin/tcpd    in.ntalkd
#dtalk    stream    tcp    wait    nobody.tty    /usr/sbin/tcpd    in.dtalkd
#
# Pop and imap mail services et al
#
#pop-2    stream    tcp    nowait    root    /usr/sbin/tcpd    ipop2d
#pop-3    stream    tcp    nowait    root    /usr/sbin/tcpd    ipop3d
#imap     stream    tcp    nowait    root    /usr/sbin/tcpd    imapd
#
# The Internet UUCP service.
#
#uucp        stream    tcp    nowait    uucp    /usr/sbin/tcpd    /usr/lib/uucp/uucico -l
#
# Tftp service is provided primarily for booting.  Most sites
# run this only on machines acting as "boot servers.” Do not uncomment
# this unless you *need* it.  
#
#tftp      dgram    udp    wait    root    /usr/sbin/tcpd    in.tftpd
#bootps    dgram    udp    wait    root    /usr/sbin/tcpd    bootpd
#
# Finger, systat and netstat give out user information which may be
# valuable to potential "system crackers.”  Many sites choose to disable
# some or all of these services to improve security.
#
#finger    stream    tcp    nowait    nobody    /usr/sbin/tcpd    in.fingerd
#cfinger   stream    tcp    nowait    root    /usr/sbin/tcpd    in.cfingerd
#systat    stream    tcp    nowait    guest    /usr/sbin/tcpd    /bin/ps -auwwx
#netstat   stream    tcp    nowait    guest    /usr/sbin/tcpd    /bin/netstat -f inet
#
# Authentication
#
#auth        stream    tcp    wait    root    /usr/sbin/in.identd in.identd -e -o
#
# End of inetd.conf
#linuxconf    stream    tcp    wait    root /bin/linuxconf linuxconf —http

swat        stream     tcp    nowait.400 nbsp;   root /usr/sbin/tcpd /usr/sbin/swat swat

Nicht vergessen:

Nach Editieren inetd.conf: killall -HUP inetd (inetd liest das conf-File neu ein!)

Achtung:

Neue Versionen haben oft statt des inetd den xinetd laufen, dann ist die Konfigurationsdatei meist in mehrere, für jedes Service eine, aufgeteilt, die sich in einem eigenen Verzeichnis, meist /etc/xinetd.conf befinden. Dieser neue xinetd hat die TCP-Wrapper-Funktion bereits eingebaut und ist flexibler zu konfigurieren. Die Syntax ist etwas anders, siehe "man xinetd" und "man xinetd.conf".
 

Tipp 2

Zugriffsrechte über TCP-Wrapper einschränken

Top Der TCP-Wrapper wird über 2 config-Dateien konfiguriert. Außerdem müssen die Einträge in /etc/inetd.conf modifiziert werden. Z.B.:

/etc/hosts.deny:
ALL: ALL

/etc/hosts.allow:
ALL EXCEPT swat: .mysubnet.tuwien.ac.at
swat: localhost mycomputer.mysubnet.tuwien.ac.at

Funktion testen !

Das heißt: alle Dienste, die über tcpd gestartet werden, sind für "mysubnet ..." erlaubt, jedoch swat nur für die eine Maschine "mycomputer.mysubnet" und für die lokale Maschine.

Siehe auch: man 5 hosts_access

Auch den Portmapper-Zugriff kann man bei Linux über host.allow/deny konfigurieren.

Achten Sie natürlich auch auf spezielle Services, die Sie selbst gestartet haben: z.B. appletalk, mars-nwe (Novell-Server) etc.
 

Tipp 3

Shadow Password verwenden, auf sinnvolle Passwörter achten

Top Bei RedHat: Wenn Sie die Option "shadow-passwords" beim Installieren vergessen haben, hilft: pwconv
 
Tipp 4

Auf File Permissions achten beim Einrichten von Usern, Gruppen

Top Da kann man nicht viel dazu sagen, hängt von der Struktur ab, die man abbilden will.
Siehe: man chmod, man chgrp, man chown

Bei RedHat: gute graphische Konfigurationshilfe: linuxconf
(damit kann man relativ leicht User und Gruppen verwalten)
 

Tipp 5

Womöglich nur ssh verwenden (oder onetime-passwd)

Top Um sich von Windows oder Mac einzuloggen: Teraterm bzw. nifty-telnet
Teraterm (für Windows): http://hp.vector.co.jp/authors/VA002416/teraterm.html
Nifty-Telnet (für Mac): http://www.lysator.liu.se/~jonasw/freeware/niftyssh/
 
Tipp 6

Wenn User für Samba oder pop u.dgl. eingerichtet werden:

Top keine Shell (/bin/false im /etc/passwd) und eigenes Passwort, welches in keinem Shell-Account verwendet wird.

Auch für ftp-User, dann muss man aber /bin/false in /etc/shells eintragen.

Sollte sich dann jemand das Passwort mittels eines Sniffers aneignen, kann er zwar Dateien transferieren, jedoch keine Kommandos absetzen bzw. Programme starten.
 

Tipp 7

Achten Sie auf offene X-Verbindungen

Top (also remote X-Server: X-Terminal, andere Unix/Linux-Maschine, Windows  mit  X-Server, z. B. HCL-Exceed)

Wenn X-Windows-Sessions nicht über ssh getunnelt werden, kann
a.) im Netz mitgesnifft werden,
b.) eine Verbindung zum X-Server von anderswo hergestellt und jeder Tastendruck abgefragt werden.

Punkt b.) ist nur möglich, wenn der X-Server für alle zugänglich ist.
Mit dem Befehl xhost Einträge überprüfen/ändern !
Zusammengefasst: Vorsicht mit X11 übers Netz !
 

Tipp 8

Samba Server absichern

Top
  • Für Samba: (Fileserver für Windows-Maschinen)
  • Passwort-Encryption verwenden (mit Win98 oder NT SP >= 4)
  • hosts_allow Liste in den Shares verwenden
  • wenn SWAT verwendet wird, nur so verwenden, dass keine Sniffingmöglichkeit vorhanden, womöglich nur für localhost erlauben (/etc/hosts.allow).

 
Tipp 9

Achten auf Netzwerktopologie: große Collisiondomain ?

Top Sind andere schwach gesicherte Maschinen im Netz ? -> Gefahr durch potentielle Passwort-Sniffer !

Abhilfe: Bessere Sicherung der Maschinen durch strukturierte Verkabelung, Switches, Bridges etc.
 

Tipp 10

Eventuell zusätzliche Filterung mit Packetfilter (ipchains)

Top Logging für die Rules aktivieren ? (option -l)
Siehe: http://gd.tuwien.ac.at/opsys/linux/LDP/HOWTO/IPCHAINS-HOWTO.html

Verwenden Sie ipchains und andere Firewall-Lösungen nur, wenn Sie wirklich wissen, was Sie tun, und testen Sie die Konfiguration auf ihre gewünschte Funktion, damit Sie sicher gehen, dass hier nicht nur Sicherheit vorgetäuscht wird.
Im Rahmen der Wartungsabkommen können Sie hier Hilfe vom ZID beanspruchen (sts.tuwien.ac.at/pss/).
 

Tipp 11

Eventuell einfache Firewall-Lösungen

Top mit packetfilter in forward-chain, Masquerading,
siehe http://linux.tuwien.ac.at/firewall.html
 
Tipp 12

Bei Kernel >= 2.2.x -> Spoofing Protection möglich

Top Spoofing Protection verhindert das Vortäuschen falscher IP-Adressen.

echo 1 > /proc/sys/net/ipv4/conf/ethx/rp_filter
 

Tipp 13

Achten Sie auf Veröffentlichungen von Securitybugs, Patches ...

Top Siehe Homepages der diversen Distributionen.
 
Tipp 14

Erkennen von Hackerattacken I

Top evtl. cronscripts, welche potentielle Attacken erkennen, wie z.B.: logcheck ...

Achten Sie in den Logfiles auf "connect from unknown": könnte Portscanner-Aktivitäten anzeigen.
 

Tipp 15

Erkennen von Hackerattacken II

Top Kopieren Sie Programme, die Sie zum Aufspüren von Hackern brauchen, wie ps, ls, ifconfig, top, find, grep, cksum, md5sum usw., unter einem anderen Namen auf ein anderes Verzeichnis.

Machen Sie nach der Erstinstallation von diesen (oder vom ganzen /bin/* /sbin/* ) ein cksum oder md5sum und notieren Sie sich die Checksummen (ausdrucken, auf anderer Maschine speichern).
z.B:  
md5sum /bin/* >md5_datei
md5sum /sbin/* >>md5_datei

Heben Sie jetzt die md5_datei gut auf (z.B. auf einem anderen Computer).

Wenn Sie den Verdacht hegen, dass ein Hacker auf Ihrer Maschine sich versteckt hält, machen Sie den oben beschriebenen Vorgang nochmals in eine andere Datei und vergleichen Sie die beiden Dateien mit "diff". Wenn Unterschiede gemeldet werden, wurde etwas verändert (könnte natürlich auch von Ihnen durch irgendwelche Updates verursacht sein, daher nach einem Update den Vorgang wiederholen.)

So können Sie feststellen, ob ein Eindringling einige Ihrer wichtigen Systemprogramme ausgetauscht hat, um Spuren zu verschleiern.
 

Tipp 16

Allgemeine Hinweise

Top Wenn Sie einfach eine Standardinstallation durchführen, sollten Sie daran denken, dass, je nach Distribution, der Bequemlichkeit halber viele Komponenten und Dienste mitinstalliert werden, die Sie meist nicht brauchen.

Informieren Sie sich bitte, was das für Komponenten sind, die da laufen.

Machen Sie einen Portscan (dieser wird auf Wunsch vom ZID für Sie durchgeführt: E-Mail an security@tuwien.ac.at mit dem Betreff "Systemcheck".)

Tipp 1 soll Ihnen dabei als Anhaltspunkt und Hilfe dienen, allerdings ohne einen Anspruch auf Vollständigkeit.

Vorsicht bei fertig installierten Firmenlösungen: Erfahrungsgemäß sind die Leute, die das System installieren, nicht mit so großen Netzwerken, wie auf der TU vorhanden, konfrontiert. Daher fehlt auch oft eine gewisse Erfahrung; wieder laufen einige nicht benötige Dienste.

Weitere Informationen können Sie durch die "HOWTOs" des LDP (Linux Documentation Project) bekommen, siehe: http://gd.tuwien.ac.at/opsys/Linux/LDP/.
 

Sollte Ihnen das alles zu viel sein, können Sie für Ihren Server auch einen Wartungsvertrag bei uns (Zentraler Informatikdienst, Abteilung Standardsoftware) abschließen, siehe:
sts.tuwien.ac.at/pss/


Zum Inhaltsverzeichnis, ZIDline 5, Juni 2001