Hardening CentOS 5 / RedHat Enterprise Linux 5

Dies ist eine Anleitung zum Absichern (Hardning) von CENTOS5 bzw. RedHat Enterprise Linux 5.

Worum geht es hier? Dies soll eine Anleitung sein, wie man möglichst sicher einen [[CentOS|CentOS 5] ] / [[Red_Hat_Enterprise_Linux|RHEL] ]5 Linux Server installiert. Aber, es gibt keine  Garantien!!

Bitte auf jeden Fall die Hinweise zu Linuxanleitungen auf Basis von CentOS und RedHat Enterprise Linux lesen.

Sicher kann man auch einiges im Nachgang auf bestehende Systeme anwenden, aber direkt von Anfang an ein Paar Dinge zu Beachten ist nicht verkehrt. Also das wichtigste zu erst…

die Installation

Als Installationsmöglichkeit bietet sich DVD oder die Netzwerkinstallation an, das ist jedem selbst überlassen. Wichtig ist, das die Installation schon im Textmodus mit dem Befehl “linux text” im Bootmenu gestartet wird.

Installiert wird nur das Basesystem, die andere Software wird nach installiert. Bei der Partitionierung sollten wir direkt ein paar Dinge beachten. Bestimmte Teile des Filesystems sollten eigene Partitionen erstellt werden.  Das schütz vor bei einer Überfüllung eines Teiles den Rest des Systems, abgesehen davon können wir bestimmte Partitionen dann auch als “ReadOnly” mounten.  Gute Kandidaten für die Vereinzelung sind:

/boot – Die Boot Partition (Sollte die erste Partition sein, kein Logisches Volume, 200 MB sollten hier auch reichen)

Der Rest kann als Logisches Volume eingerichtet werden (Siehe Screenshots).  Es sollte nur der Benötigte Speicherplatz vergeben werden. Ungenutzte Größe kann mit [[Logical_Volume_Manager|LVM] ] bei Logischen Volumens noch nachträglich zu gewiesen werden.

/home – Das Homelaufwerk der Benutzer
/tmp – Das Tempverzeichnis
/usr
/var
/var/www – Das Standartverzeichnis vom [[Apache_HTTP_Server|Apache] ] (Wenn es mal ein Webserver werden soll)
/var/log – Logfiles

Als root Kennwort etwas sicheres auswählen.

[slideshow]

Nach der Installation – Basics

Als ersten Schritt nach der Installation führen wir ein Update durch, bei CentOS einfach mit dem Befehl “yum update”. Für RHEL bitte einmal nachschauen wie das System erst mal in das RHN eingebunden werden kann.

Der nächste Schritt ist optional und je nach bedarf: Die Installation der Kernelheader und der Compiler. Für manche ist die eine Sicherheitslücke, für andere eine unvermeidliche Notwendigkeit. Wer Software installieren möchte, die kompiliert werden muss, der braucht ein eigenes Buildsystem, oder kann die benötigte Software auch auf dem eigentliche Zielsystem kompilieren. Diese Entscheidung muss jeder selber treffen. Um das wichtigste nach zu installieren reicht es einfach die Pakete  gcc und kernel-headers (“yum install gcc kernel-headers”) mit ihren Abhängigkeiten nach zu installieren.  Damit können dann schon Kernelmodule, wie zum Beispiel die VMware Tools (Sollte die Version neu genug sein, sind vorkompilierte Module enthalten und man braucht den Compiler nicht) erstellt werden.

Unnötige Dienste

Folgende Dienste werden für die meisten Anwendungsbeispiele nicht benötigt und können Abgeschaltet werden:

  • [[Anacron|anacron] ] – Cron Alternative wenn der Server nicht 24/7 läuft
  • [[Advanced_Power_Management|apmd] ] – Advanced Power Managment daemon, macht bei Servern meistens keinen Sinn
  • [[Avahi_(Software)|avahi-daemon] ] – Stellt eine Apple ZeroConf Schnittstelle zur Verfügung
  • [[Bluetooth|bluetooth] ] – Dürfe in den meisten Servern die Hardware (und auch der Sinn) fehlen
  • [[Common_Unix_Printing_System|cups] ] – Die Linux Druckumgebung
  • firstboot – Ist nach der Installation überflüssig
  • gpm – Mausserver für Virtuelle Consolen (naja… wers braucht…)
  • isdn – Stellt ISDN Unterstützung zur Verfügung
  • Messagebus – Stellt einen Kommunikationsbus für dbus zur Verfügung
  • pcscd – PC Smart Card Daemon
  • readahead_early – Läd einige Programme schon im Vorfeld in den Arbeitsspeicher, damit diese schneller starten nach dem Boot
  • readahead_later – Läd einige Programme schon im Vorfeld in den Arbeitsspeicher, damit diese schneller starten nach dem Boot
  • ip6tables – IPv6 Packet Filter
  • [[Sendmail|sendmail] ] – Maildaemon
  • haldaemon – Echtzeit Devicemanagment für neu installierte Geräte

Am einfachsten geht das mit dem Befehl “chkconfig DIENSTNAME off”.

Entfernen von unnötigen SUID-Bits (Link Wiki für SUID)

Mit dem folgenden Befehl (ja, das ist ein Befehl, bitte am Stück eingeben oder einfügen) werden unnötige SuperUserID-Bits gelöscht:

chmod -s /bin/ping6 /sbin/mount.nfs /sbin/mount.nfs4 /sbin/netreport /sbin/umount.nfs /sbin/umount.nfs4 /usr/bin/chage /usr/bin/chfn /usr/bin/chsh /usr/bin/crontab /usr/bin/lockfile /usr/bin/rcp /usr/bin/rlogin /usr/bin/rsh /usr/bin/wall /usr/bin/write /usr/kerberos/bin/ksu /usr/libexec/openssh/ssh-keysign  /usr/sbin/ccreds_validate /usr/sbin/userisdnctl /usr/sbin/usernetctl

Anpassen der IPv4 Settings

Um die IPv4 Einstellungen anzupassen fügen wir in die Datei /etc/sysctl.conf folgende Zeilen ein:

net.ipv4.icmp_ignore_bogus_error_messages=1
kernel.exec-shield=1
kernel.randomize_va_space=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.all.accept_source_route=0
net.ipv4.icmp_echo_ignore_broadcasts=1

Entfernen von unnötigen Benutzern

Die folgenden Benutzerkonten können ohne Probleme mit dem Befehl “userdel USERNAME” entfernt werden:

  • avahi
  • avahi-autoipd
  • news
  • games
  • gopher
  • ftp

Abschalten des Reboot bei  STRG + ALT + ENTF

Wer kennt es nicht von Windows, “Drücken Sie STRG + ALT + ENTF zum Anmelden”, das löst unter Linux normalerweise einen Neustart aus, und ist sehr unerwünscht. Damit der Server auch Sicher in der Nähe von Windows Administratoren ist, wird in der Datei /etc/inittab die Zeile “ca::ctrlaltdel:/sbin/shutdown -t3 -r now” gelöscht.

Anpassen der FSTAB

Nun werden die Parameter in der Datei /etc/fstab noch angepasst, das sie so aussieht (WICHTIG: nur die Parameter “defaults” modifizieren, auf keinen Fall etwas mit “/” ändern oder die Zahlen. Zeilen in denen nichts geändert werden muss, lasse ich hier weg!!!)

/dev/VolGroup00/LV_tmp  /tmp                    ext3    defaults,nosuid,noexec,nodev 1 2
/dev/VolGroup00/LV_var  /var                    ext3    defaults,nosuid 1 2
/dev/VolGroup00/LV_www  /var/www                ext3    defaults,nosuid,noexec,nodev 1 2
/dev/VolGroup00/LV_log  /var/log                ext3    defaults,nosuid,noexec,nodev 1 2
/dev/VolGroup00/LV_home /home                   ext3    defaults,nosuid,nodev        1 2
/dev/VolGroup00/LV_usr  /usr                    ext3    defaults,nosuid,nodev        1 2
LABEL=/boot             /boot                   ext3    defaults,nosuid,noexec,nodev 1 2

Ändern das Password Hash von MD5 aud SHA512

MD5 als Passwort Hashalgorithmus ist schon etwas in die Jahre gekommen, also möchten wir den Nachfolger SHA512 nutzen. Mit dem Befehl  “authconfig –passalgo=sha512 –update” wird der Standart Algorythmus geändert und die Passwordhashes aktualisiert.

Password Authentification Managment (PAM)

Damit nicht jeder der auf das System Zugriff hat, wird der Zugriff auf den  SuperUser root begrenzt auf Mitglieder der Guppe “wheel”. Dazu wird in der Datei /etc/pam.d/su das “#” aus der Zeile

“#auth           required        pam_wheel.so use_uid”

entfernt. Wer nicht möchte das die Admins das root Kennwort benötigen kann auch das “#” aus der Zeile

“#auth           sufficient      pam_wheel.so trust use_uid”

entfernen.

Zum Schutz vor Brute Force Angriffen auf die Benutzerkonten wird PAM_Tally genutzt. Als erstes wird die leere Logdatei angelegt: “touch /var/log/tallylog”.  Als nächstes wird die Datei /etc/pam.d/system-auth angepasst, so dass sie den folgenden Inhalt hat:

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        required      pam_deny.so
account     required      pam_unix.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
account     required      pam_permit.so
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    required      pam_deny.so
session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so

Automatisches Abmelden nach 15 Minuten Inaktivität (Auto-Logout)

Hierzu wird eine neue Datei ” /etc/profile.d/autologout.sh” angelegt. In diese Datei wird die Zeile: “readonly TMOUT=900”  eingefügt. Anschließend wird die Datei noch mit dem Befehl: “chmod +x /etc/profile.d/autologout.sh” ausführbar gemacht.

Anlegen des persönlichen Adminusers

Bevor wir den SSH Dienst richtig absichern können, wird erst einmal ein persönlicher Benutzer benötigt. Der wird angelegt mit dem Befehl useradd, die Syntax ist einfach: useradd -c “KOMMENTAR” -G wheel -m USERNAME

KOMMENTAR und USERNAME müssen entsprechend ersetzt werden. Bei Kommentar können auch Leerzeichen, Klein- und Großbuchstaben und auch Zahlen verwendet werden. Der Username darf nur aus Kleinbuchstaben und Zahlen bestehen.

Für diesen Benutzer muss noch ein Kennwort mit “passwd USERNAME” erstellt werden.

Anschliessen legen wir für den User einen SSH Key an.

>>>!!! Dieser Schritt sollte nicht übersprungen werden,
sonst kann sich nach der nächsten Änderung nicht mehr über SSH anmeldet werden !!!<<<

Absichern von SSH

Um SSH abzusichern wird die Konfigurationsdatei /etc/ssh/sshd_config geöffnet und folgende Zeilen geändert:

Alter Zeileninhalt Neuer Zeileninhalt
#PermitRootLogin yes PermitRootLogin no
PasswordAuthentication yes PasswordAuthentication no
#MaxAuthTries 6 MaxAuthTries 3

Jetzt darf sich der Benutzer “Root” nicht mehr anmelden, aber der persönliche Adminuser kann sich mit seinem SSH-Zertifikat anmelden und ein “su -” machen um “Root” zu werden. Anschließend muss der SSH Dienst einmal mit “service sshd restart” neugestartet werden.

Abschalten von USB-Sticks

Wer gerne verhindern möchte das USB-Sticks genutzt werden können, der kann eine neue Datei /etc/modprobe.d/blacklist-usbstorage mit dem Inhalt: “blacklist usb-storage” erstellen.

RootKennwort für den Single-User Modus

In die Datei /etc/inittab sollte die Zeile “~~:S:wait:/sbin/sulogin” einfügt werden. Dadurch wird das root-Kennwort auch für den SingleUser Mode notwendig.

Das Root Kennwort darf auf keinen Fall vergessen werden oder auf dem Server dokumentiert werden!

Die Sicherheit der Physik

Neben den üblichen Hinweisen zu sicheren Serverräumen gibt es noch etwas anderes, was oft Vergessen wird. Nach der Installation im BIOS des Computers einstellen das nur von Festplatte gebootet wird, und das BIOS mit einem Kennwort sichern. Bitte auch keine Post-IT mit Kennwörten auf die Server kleben!

Abschliessende Worte

Natürlich sollte man noch viele weitere Dinge beachten, aber ich denke die würden hier den Rahmen sprengen. Ich empfehle auf jeden Fall die Leküre der weiteren Quellen. Auch sollte man schauen wie man die Anwendungen auf dem System möglichst sicher bekommt. Auch denkbar wäre bei einem Webserver zum Beispiel  /var/www im nur lesenden Zugriff zu mounten. Ihr seht, es gibt noch viele Möglichkeiten.

Weitere Quellen

Es empfiehlt sich einen Blick in andere Dokumente zu dem Thema zu werfen, zum Beispiel:

Hardening Guide der National Security Agency der Vereinigten Staaten von Amerika zu RedHat Enterprise Linux 5 http://people.redhat.com/sgrubb/files/hardening-rhel5.pdf

Der Kurzzusammenfassung des NSA Guide http://www.nsa.gov/ia/_files/factsheets/rhel5-pamphlet-i731.pdf

Anleitung aus dem CentOS Wiki: http://wiki.centos.org/HowTos/OS_Protection

Please wait...

Autor: Fabian Niesen

Fabian Niesen ist seit Jahren beruflich als IT-Consultant unterwegs und arbeitet bei der steep GmbH in Bonn. Unter anderem ist er Zertifiziert als MCSA Windows Server 2008 / 2012, MCSA Office 365, MCSE Messaging, MCT und Novell Certified Linux Administrator. Seine Hobby’s sind Social Media, Bloggen, Mittelaltermärkte und Historische Lieder.

Ein Gedanke zu „Hardening CentOS 5 / RedHat Enterprise Linux 5“

  1. Usually I don’t learn post on blogs, but I wish to say that this write-up very forced me to try and do it! Your writing style has been surprised me. Thanks, very nice post.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.