Worum geht es hier? Dies soll eine Anleitung sein, wie man möglichst sicher einenCentOS 5 / RHEL5 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
Kommentare
Eine Antwort zu „Hardening CentOS 5 / RedHat Enterprise Linux 5“
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.