cykes
Goto Top

Kurzanleitung (HowTo) zur Konfiguration des Linux PAM Moduls pam tally am Beispiel des SSH Daemons

Benutzer-Authentifizierung des SSH Daemons mittels PAM und Zählen der fehlgeschlagenen Login Versuche mit dem Modul pam-tally
unter SuSE Linux 10.0

Kurzanleitung (HowTo) zur Konfiguration des Linux Paket PAM Modul pam_tally

Stand: 04. Februar 2006 Version 0.1

(1) Verwendetes System

(Novell) SuSE Linux 10.0 Eval ISO
- PAM Version 0.80-6 (gilt auch für alle folgenden Versionen bis zur aktuellen 0.99-x)
Die installierte PAM Version kann man als root mit dem Befehl "rpm -q pam" feststellen.
- openssh 4.1p1-10

(2) Einleitung

Das Modul pam-tally.so (und die zugehörige Binary /usr/sbin/pam_tally) wird
zum Zählen der Login-Versuche eines Benutzers über den den PAMD vewendet.
Der Linux (open)ssh Deamon verwendet beispielsweise PAM zur Authentifizierung
von (Remote) Benutzern. Es soll hier realisiert werden, dass ein Benutzer,
der sich per ssh anmelden will, nach 5 fehlgeschlagenen Anmeldeversuchen,
also richtiger Benutzername und falsches Passwort, automatich gesperrt wird,
bis er sich wieder mit dem richtigen Benutzernamen und seinem passwort anmeldet.
Da sich im PAM Paket und im speziellen im Modul pam_tally.so einiges seit Version
0.76 geändert hat, und man dazu keine bzw. nur sehr umständlich Informationen im
Internet findet, schreibe ich dieses kleine HowTo face-wink
ich habe mich in den letzten 3-4 Tagen intensiv mit der Abwehr von Script-Attacken
auf den SSH Server beschäftigt und ein paar Tage/Nächte gebraucht, bis ich die korrekte
Konfiguration hinbekommen habe. (Anmerkung: Scriptkiddies nerven wirklich! *g*)
Das "wie" soll auch anderen zugänglich sein, da mich allein die Suche nach Informationen
2 Tage gedauert hat.


(3) Dokumente, auf die sich dieses Howto bezieht

[URL1] http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/pam.html (Linux-PAM System Administrators Guide [engl.])
[URL2] http://fedoranews.org/contributors/sonny_nguyen/pam/ (Fedora News - Security with pam_tally [engl.]
[URL3] http://portal.suse.com/sdb/de/2005/02/schweigi_pam_tally.html (SuSE Support Datenbank - Benutzerzugang nach
fehlgeschlagenem Anmeldevorgang sperren [deu.])
[URL4] http://jroller.com/page/maximdim?entry=security_paranoia_disabling_user ... (MaximDim - Security Paranoia
by Dmitri Maximovich's [engl.]
[URL5] http://docs.hp.com/en/T1471-90011/ch01s11.html (recht gute Anleitung der sshd_config Optionen von HP [engl.])

[IX1] Der Artikel von Thomas Kaiser in der IX Ausgabe Februar 2006 S 141-143, Heise Verlag.
[MAN1] Manual Pages zum sshd und der sshd_config
[DOC1] README Dateien zu pam_tally, sowie Source Code von pam_tally.so
(zu finden unter: http://www.kernel.org/pub/linux/libs/pam/pre/library/)

(4) Für die Konfiguration wichtige Dateien

(alle hier genannten Dateien beziehen sich mit ihrem Pfad auf SuSE Linux, bei anderen Distributionen können
sie an anderer Stelle im Dateisystem zu finden sein)

/etc/pam.d/sshd - Konfigurationsdatei für die Login Konfiguration über PAM des SSH Servers (sshd) [Textdatei]
/etc/ssh/sshd_config - Konfigurationsdatei für den SSH-Server (sshd)
/var/log/faillog - Standard Logdatei von pam_tally, in der die Anzahl der Loginversuche gezählt wird

(5) Begriffe

ssh(d) - Secure Shell, verschlüsselter Shell-Zugang (ssh - Client / sshd - Server)
PAM - Pluggable Authentication Modules, Module für zusätzliche Funktionen der Benutzeruathentifizierung
pam_tally - PAM Modul, um (fehlgeschlagene) Benutzeranmeldungen zu zählen

(6) So geht es...

Die erste Sicherheitsrichtlinie ist, vernünftige Passwörter, die nicht durch verschiedene Angriffsmethoden
zu erraten sind, zu wählen. Die Passwörter sollten nicht zu kurz sein (absolutes Minimum 6 Zeichen),
und keine Namen oder Wörter aus einem Wörterbuch (insbesondere nicht den Benutzernamen oder Teile davon) enthalten.
Eine Mischung als Zahlen, Buchstaben und Sonderzeichen hat sich bewährt.
Zunächst sollte man die /etc/ssh/sshd_config entsprechend der minimalen Sicherheitsanforderungen anpassen.
Wichtige Optionen sind dafür:

Option # Erkärung

UsePAM yes # Damit der sshd überhaupt die PAM Authentifizierung benutzt, und somit der Einsatz von pam_tally
MaxAuthTries 5 # Maximale Versuche, die der Benutzer hat, sich anzumelden
IgnoreRhosts yes # /home/<Username>/.rhosts Datei nicht einlesen
MaxStartups 10 # Maximale Anzahl von gleichzeitigen (noch) nicht authentifiziert sshd Sessions (10 Standard)
PasswordAuthentication no # "no" verhindert eine getunneltes Klartext-Passwort
PermitEmptyPasswords no # keine leeren Passwörter zulassen (wer das braucht, muss es halt einschalten *g*)
LoginGraceTime 2m # maximal 2 Minuten hat der Benutzer Zeit, sich einzuloggen, danch wird die Session beendet
PermitRootLogin no # root nicht erlauben, sich direkt einzuloggen, nur "normale" User sind erlaubt, die dann ein "su" machen können
DenyUsers [Username1],[Username2]... # Username(n) die sich nicht über ssh einloggen dürfen (wenn benötigt)

Im IX Artikel [IX1] sind noch weitaus mehr Möglichkeiten zur Absicherung beschrieben, auf die ich aber hier nicht weiter
eingehen will. Am sichersten ist es bestinmmt, nur RSA Sessions zu erlauben udn kein interaktives Login.
Vielleicht ergänze ich dieses HowTo später noch entsprechend.

Nun zum eigentlichen Teil, es soll ja (bei manuellen und) bei Script-Attacken, die automatisch aus einem Wörterbuch
Usernamen ausprobieren, um darauffolgend bei gültigen Usernamen per Brute Force oder mit anderen Methoden das Passwort
zu knacken, verhindert werden, dass sich der "Hacker" mehr als 5 mal versuchen kann, sich einzuloggen.

Dazu müssen die Login-versuche in einer Datei gezählt werden, und entsprechend sollte der Zähler, je nach eigenen
Anforderungen bei, bei einem erfolgreichen auf 0 Login zurückgesetzt oder zumindest nicht erhöht werden.

Diese Einstellunge werden über PAM realisiert, die Konfigurationsdatei für PAM in Bezug auf den sshd befindet sich
bei SuSE Linux 10.0 in /etc/pam.d/sshd

Diese Datei muss um folgende Einträge ergänzt werden, zu beachten ist, dass alle oben erwähnten Dokumente und URLs zu
Beschreibungen/Anleitungen sich auf die PAM Versionen bis Version 0.76 beziehen, in den neueren Modulen hat sich viel
geändert, so dass die angebenen Methoden nicht oder nicht vollständig funktionieren, was auch ein
Grund für dieses HowTo war (hat micht mehrere graue Haare gekostet und bin um mindestens 5 Jahre gealtert! *g*)

Also nun zu den Optionen, die in /etc/pam.d/sshd eingefügt werden müssen:

Möglichkeit (a): User kann sich nach 5 fehlgeschlagenen Anmeldeversuchen nicht mehr anmelden,
der Admin muss den Account wieder freischalten, mit Zählerrücksetzung

--cut---
auth required pam_tally.so onerr=fail deny=5 no_reset
auth required pam_unix2.so # set_secrpc
auth required pam_nologin.so
auth required pam_env.so
account required pam_unix2.so
account required pam_nologin.so
account required pam_tally.so
---cut---

Um den Account nach den 5 (hier kann auch ein anderer Wert genommen werden, siehe erste Zeile oben unter "deny=5")
fehlgeschlagenen Anmeldeversuchen wieder freizuschalten, muss man als Benutzer root folgendes auf der Kommandozeile
eingebn "pam_tally --user [username] --reset". Damit wird der Zähler in der /var/log/faillog auf 0 zurückgesetzt.
Wenn man den Zähler in /var/log/faillog auf einen bestimmten Wert N setzen will, geht das so:
"pam_tally --user [username] --reset=N".
Wenn man sich (als root) die Einträge in der /var/log/faillog anzeigen lassen will, gibt man entweder "pam_tally" ein
oder alternativ "faillog", wobei die Informationen mittels "faillog" etwas auführlicher sind.
Wenn der User beispielsweise weniger als 5 mal sein Passwort falsch eingibt und sich dann aber korrekt
einloggt, wird in diesem Beispiel der Zähler auf 0 zurückgesetzt.


Möglichkeit (b): User kann sich nach 5 fehlgeschlagenen Anmeldeversuchen nicht mehr anmelden,
der Admin muss den Account wieder freischalten, ohne Zählerrücksezung

---cut---
auth required pam_tally.so onerr=fail deny=5 no_reset
auth required pam_unix2.so # set_secrpc
auth required pam_nologin.so
auth required pam_env.so
account required pam_unix2.so
account required pam_nologin.so
account required pam_tally.so no_reset
---cut---

Wie man den Account nach den 5 fehlgeschlagenen Versuchen wieder freischaltet, hab ich in Möglichkeit (a) bereits beschrieben.
Der einzige Unterschied in diesem Beispiel ist, dass der Zähler der fehlgeschlagenen Loginversuche hierbei durch
die Option "no_reset" nicht zurückgesetzt wird, soll heissen, PAM merkt sich die Anzahl der fehlgeschlagenen Loginversuche,
erhöht den Zähler aber bei korrektem Login nicht.

Das war es vorerst. Die PAM Module sind sehr mächtig, damit lässt sich bezüglich der Authentifizierung bzw. deren Überwachung
(fast) alles realisieren. Leider ist die Dokumentation, wie oben bereits erwähnt, nicht wirklich auf dem aktuellsten Stand,
so dass man häufig, um die aktuelle Funktionsweise der Optionen herauszufinden, entweder im Source Code oder in den READMEs
zu den Modulen nachlesen muss.

Gruss

cykes

Content-ID: 25200

Url: https://administrator.de/tutorial/kurzanleitung-howto-zur-konfiguration-des-linux-pam-moduls-pam-tally-am-beispiel-des-ssh-daemons-25200.html

Ausgedruckt am: 24.12.2024 um 14:12 Uhr

23866
23866 04.02.2006 um 14:48:29 Uhr
Goto Top
Super Tutorial,
sehr übersichtlich und informativ.

Ich nehme mir ein Beispiel daran.

Gruss Mike
cykes
cykes 04.02.2006 um 14:54:10 Uhr
Goto Top
Naja ok, ich hätte das "Kurz" vielleicht im Titel weglassen können face-wink

Falls jemand noch Anregungen oder Ergänzungen hat, immer her damit,
am besten per PM, dann ergänze ich das oben....

Gruss

cykes
Maik87
Maik87 14.12.2006 um 08:25:14 Uhr
Goto Top
Es soll hier
realisiert werden, dass ein Benutzer,
der sich per ssh anmelden will, nach 5
fehlgeschlagenen Anmeldeversuchen,
also richtiger Benutzername und falsches
Passwort, automatich gesperrt wird,
bis er sich wieder mit dem richtigen
Benutzernamen und seinem passwort anmeldet.


Häääää?? Ich bin gesperrt, bis ich mich richtig anmelde? Wie soll ich mich anmelden, wenn ich gesperrt bin? *grübel*
cykes
cykes 15.12.2006 um 08:22:38 Uhr
Goto Top
Hi,

hast Du Dir mal die Beschriebung zu PAM durchgelesen? PAM ist allen Diensten, in denen es aktiviert ist, vorgeschaltet, d.h. beim Einloggen werden zunächst die im PAM konfigurierten
Regeln überprüft und dann das Login an den entsprechenden Dienst weitergeleitet.

Gruß

cykes