PAM ist ein sehr flexibler Authentifizierungsmechanismus für Dienste auf UNIX-Rechnern.
Für einzelne Dienste können verschiedene Konfigurationen vorgenommen werden.
Die Dienste werden über Dateien im Verzeichnis /etc/pam.d/
gesteuert.
PAM ist sehr empfindlich. Deshalb sollte man sich bei Einstellungsänderungen immer eine rootkonsole zum Eingreifen offenlassen und alles erstmal ausgiebig testen.
Mit diesem Modul wird die lokale Authentifizierung eines Benutzers durchgeführt.
nullok | kein Passwort nötig,wenn Benutzer keins vergeben hat |
nullok_secure | kein Passwort nötig,wenn Benutzer keins vergeben hat |
use_first_pass | Übernehme das Passwort vom Modul vorher |
use_authtok | ? |
md5 | Benutzer für die Verschlüsselung des Passwort den MD5-Algoritmus |
shadow | Benutze die /etc/shadow(sollte standard sein) |
remember=20 | merke die letzten 20 letzten Passwörter(steht in /etc/security/opasswd) |
Beispiel:
password sufficient pam_unix.so nullok use_authtok md5 shadow remember=20
administratives Festlegen von Variablen:
z.B. das erzwungene Ausloggen nach einer Stunde Untätigkeit:
in der Datei /etc/pam.d/common-auth
muss dazu folgender Eintrag vorhanden sein:
auth required pam_env.so
in der Datei /etc/security/pam_env.conf
muss dazu folgender Eintrag vorhanden sein:
TMOUT DEFAULT=3600
Danach sollte bei Neuanmeldung eines Benutzers die Variable TMOUT
gesetzt sein.
Das Modul stellt bestimmte Limits pro Benutzer ein.
Beispiel: Der Benutzer www-data
soll die maximale Anzahl geöffneter Dateien auf 8128 erhöht bekommen.
Standard ist hier 1024.
Editiere die Datei /etc/pam.d/su
und entkommentiere folgende Zeile:
session required pam_limits.so
dann editiere die Datei /etc/security/limits.conf
und füge folgende Zeilen am Ende ein:
www-data soft nofile 8128 www-data hard nofile 8128
Überprüfe die gemachten Einstellungen mit:
su www-data - ulimit -n ulimit -a exit
Benutzer nach 5 Fehlversuchen für 60 Minuten sperren:
in der Datei /etc/pam.d/common-auth
muss dazu vor der pam_unix.so
folgender Eintrag vorhanden sein:
auth required pam_tally.so onerr=fail deny=5 unlock_time=3600 no_magic_root
onerr=fail | Bei Anmeldefehlern |
deny=5 | Anzahl der Fehler |
unlock_time=3600 | Zeit für das Aussperren in Sekunden |
no_magic_root | keine root-accounts sperren |
file | ziel für die Anmeldelogs z.B. /var/log/faillog |
Benutzer nach 5 Fehlversuchen für 10 Minuten sperren:
in der Datei /etc/pam.d/common-auth
muss dazu vor der pam_unix.so
folgender Eintrag vorhanden sein:
auth required pam_tally2.so deny=5 even_deny_root unlock_time=600
Dadurch werden jeweils alle die es 5 mal versucht haben(auch root) für 10 Minuten lahmgelegt. Das Modul geht übrigens nach der UID nicht nach dem Namen.
deshalb werden alle Benutzer mit der selben UID gesperrt.
ein gespeerter Benutzer kann von root wieder so entsperrt werden:
pam_tally --user meinBenutzer --reset
Bei erstmaliger Anmeldung eines Benutzers wird das HOME-Verzeichnis automatisch angelegt und berechtigt.
pam-auth-update --package mkhomedir
Dabei werden die Einstellungen aus dem Verzeichnis /etc/skel
übernommen.
in der Datei /etc/pam.d/common-session
muss dazu folgender Eintrag vorhanden sein:
session required pam_mkhomedir.so skel=/etc/skel umask=0022
oder auch einfach:
session required pam_mkhomedir.so
Achtung! in debian muss der Eintrag manchmal in die /etc/pam.d/common-account
.(testen)
eventuell auch mal die Datei /etc/security/pam_winbind.conf
ansehen
Verweigere allen Benutzern den Login, die nicht in der Gruppe users
sind:
in der Datei /etc/pam.d/common-account
muss dazu vor der pam_unix.so
folgender Eintrag vorhanden sein:
account required pam_access.so
in der Datei /etc/security/access.conf muss dann dazu folgender Eintrag gemacht werden:
-:ALL EXCEPT users :ALL
Einstellungen für die Vergabe eines neuen Passworts werden wie folgt festgelegt:
in der Datei /etc/pam.d/common-password
muss vor der pam_unix.so
folgender Eintrag vorhanden sein:
password requisite pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1
Die einzelnen Einstellungen sind dabei:
retry=3 | |
minlen=8 | Mindestlänge 8 Zeichen |
lcredit=-1 | Mindestens ein Kleinbuchstabe |
ucredit=-1 | Mindestens ein Großbuchstabe |
dcredit=-1 | Mindestens eine Zahl |
ocredit=-1 | Mindestens ein Sonderzeichen |
difok=2 | In mindestens 2 Zeichen müssen sich das neue und das alte Passwort unterscheiden |
Wenn man mal ein Passwort ändern möchte ohne Komplexitätsregel (z.B. beim root) wurde die obige Zeile deaktiviert. Jedoch trat dann der folgende Fehler auf:
passwd root passwd: Authentication information cannot be recovered passwd: password unchanged
die Lösung war dann das temporäre Löschen von use_authtok
in der Zeile:
password required pam_unix.so use_authtok nullok md5
Nach der erfolgten Passwortänderung habe ich die Zeile und den Wert wieder eingetragen.
Das Modul setzt strenge Regeln für die Passwortvergabe durch.(lästig)
Beispiel:
Erzwinge die Benutzung von Zufallspasswörtern.Die Benutzer können keine eigenen Passwörter mehr vergeben sondern müssen das angezeigte Passwort akzeptieren.(gemein aber sehr sicher)
editiere die Datei /etc/pam.d/common-password
:
password requisite pam_passwdc.so random=50,only
Passwortpolicy entschärfen:
password requisite pam_passwdqc.so retry=3 min=0,0,0,0,0
Erlaube allen Mitgliedern der Gruppe wheel
das ausführen des Befehls su
ohne Passwort!!!:
in der Datei /etc/pam.d/common-auth
muss dazu vor der pam_unix.so
folgender Eintrag vorhanden sein:
auth required /lib/security/pam_wheel.so use_uid group=wheel trust
Winbind erfordert umfangreiche Konfigurationsarbeiten. Deshalb siehe dazu: Winbind
Wichtig ist in jedemfall der Eintrag use_first_pass
.
Dieser Schalter bewirkt,dass ein gecachtes Passwort schon aus einem vorherigen Modul übernommen wird.
Dadurch muss man nur noch einmal sein Passwort angeben.
/etc/pam.d/common-account:
account sufficient pam_winbind.so use_first_pass
/etc/pam.d/common-auth:
auth sufficient pam_winbind.so use_first_pass
/etc/pam.d/common-session:
session sufficient pam_winbind.so use_first_pass mkhomedir
Die Anmeldeeinschränkung auf Mitglieder von ein paar NT-Gruppen ( hier myNTGroup1 und myNTGroup2 ) kann wie folgt festgelegt werden:
auth sufficient pam_winbind.so use_first_pass require_membership_of=myNTGroup1,myNTGroup2
oder ein anderes Beispiel:
auth sufficient pam_winbind.so use_first_pass cached_login warn_pwd_expire
winbind per Programm konfigurieren und anschalten:
#suse: pam-config -a --winbind #debian: pam-auth-update --package winbind --force
winbind per Programm wieder deaktivieren:
pam-config -d --winbind
Zeigt bei erfolgreicher Benutzeranmeldung einen Text an.
Dieser wird in der Datei /etc/motd
festgelegt.
eventuell ist die Datei nur ein Link auf die Datei /etc/motd.tail. Dann werden die Einträge bei jedem Neustart wieder überschrieben.
Dann den gewünschten Text in die Datei /etc/motd.tail
einfügen.
in der Datei /etc/pam.d/common-session
muss vor allen als erstes folgender Eintrag vorhanden sein:
session optional pam_motd.so
wenn man eine andere Messagdatei benutzen will so kann man diese so konfigurieren:
session optional pam_motd.so motd=/etc/motd
Im Gegensatz zeigt die Datei /etc/issue
einen Text vor der Anmeldung an.
Beispiel:
Welcome on \l users currently logged in : \u
Das Modul zeigt bei erfolgreicher Benutzeranmeldung den Text einer Datei an.
Dieser wird in einer Datei z.B. /etc/echo.txt
festgelegt.
in der Datei /etc/pam.d/common-auth
muss vor allen als erstes folgender Eintrag vorhanden sein:
session optional pam_echo.so file=/etc/echo.txt
Das Modul kann verschiedene Variablen auflösen. Beispieldatei /etc/echo.txt
:
Hallo remotehost %H lokaler Host %h servicename %s terminal %t remoteuser %U localuser %u
dieses Modul verhindert bei Vorhandensein der Datei /etc/nologin
die Anmeldung von normalen Benutzern.
root-Benutzer können sich aber weiterhin anmelden.
Bei Aktivierung dieses Module werden aber aktuell angemeldete Benutzer nicht zwangsweise abgemeldet.
in der Datei /etc/pam.d/common-account
muss vor allen erstes folgender Eintrag vorhanden sein:
account required pam_nologin.so
dieses Module überprüft eine vorgegebene Textdatei mit Benutzernamen und erlaubt oder verweigert dann den Zugriff auf einen Dienst oder die Anmeldung.
Beispiel FTP:
die in der Datei ftpd.users.deny
aufgeführten Benutzer dürfen sich nicht über FTP am Server anmelden.
auth required pam_listfile.so item=user sense=deny file=/etc/ftpd.users.deny onerr=succeed
die in der Datei suauth.users.nopass
aufgeführten Benutzer brauchen beim su-Befehl kein Passwort angeben:
auth sufficient pam_listfile.so item=ruser sense=allow file=/etc/suauth.users.nopass onerr=fail
dieses Modul setzt ähnlich wie umask
die Standardrechte von neu erstellten Dateien und Ordnern.
um z.B. auch der Gruppe Schreibrechte zuzuordnen muss folgende Zeile in der Datei /etc/pam.d/common-session
geschrieben werden:
session optional pam_umask.so umask=0002
Das ist nützlich, wenn man mit verschiedenen Accounts an seinem Rechner rumhantiert, stellt jedoch in Firmenumgebungen ein Risiko dar.
Um alle Rechte auszuknipsen und damit seine Dateien vollständig allen Benutzern gegenseitig auszuliefern , hilft ein :
session optional pam_umask.so umask=0000
Wenn man paranoid ist, kann man die Dateien der einzelnen Benutzer so sehr schützen dass sie jeweils nur noch selbst rankommen:
session optional pam_umask.so umask=0077
dieses PAM-Modul wird gern in /etc/profile überschrieben und bleibt dann somit unwirksam.
dieses Modul verbietet das direkte interaktive Anmelden von Root an einem Rechner.
Erst muss sich ein normaler Benutzer anmelden, dann kann dieser mittesl su
eine rootshell öffnen.
Datei /etc/pam.d/common-auth
mit folgender erster Zeile editieren:
auth required pam_securetty.so
Modul für die zeitliche Einschränkung von Benutzern und Diensten
Datei /etc/pam.d/common-account
mit folgender letzter Zeile editieren:
account required pam_time.so
dann Datei /etc/security/time.conf
mit folgender Zeile editieren:
#erlaube dem Benutzer doedel nur am Montag von 08Uhr bis 16Uhr sich per login anzumelden: login ; tty* & !ttyp* ; doedel;Mo0800-1600 #erlaube dem Benutzer pitti NICHT sich am Wochenende per login oder ssh anzumelden: login & ssh ; * ; pitti ; !Wd0000-2400 #erlaube ihm alles nur innerhalb der Woche von täglich 07Uhr bis 20Uhr *;*;pitti;Wk0700-2000 #verhindere alle Anmeldungen von normalen Benutzern außer root immer täglich von 20Uhr abends bis 07Uhr morgens #auch root soll sich nicht mehr von 23Uhr abends bis 06Uhr morgens anmelden dürfen. *;*;!root;!Al2000-0700 *;*;root;!Al2300-0600
Benutzer Paul die Anmeldung verweigern:
auth required pam_succeed_if.so user !=paul quiet_success
Nur Benutzer der Gruppe wheel dürfen sich am Modul anmelden:
auth required pam_succeed_if.so quiet user ingroup wheel
Nur Benutzer mit UID größer 1000 dürfen sich am Modul anmelden:
auth requisite pam_succeed_if.so uid >= 1000 quiet
Modul für die Einmalige Authentifizierung.
Modul zum ausführen eines Skripts
session optional pam_exec.so /usr/local/bin/mailme.sh