Wéi konfiguréieren a benotzen PAM am Linux


Linux-PAM (kuerz fir Pluggable Authentication Modules déi aus der Unix-PAM Architektur evoluéiert sinn) ass eng mächteg Suite vu gemeinsame Bibliothéike benotzt fir dynamesch e Benotzer op Uwendungen (oder Servicer) an engem Linux System ze authentifizéieren.

Et integréiert verschidde Low-Level Authentifikatiounsmoduler an eng High-Level API déi dynamesch Authentifikatiounsunterstëtzung fir Uwendungen ubitt. Dëst erlaabt d'Entwéckler Uwendungen ze schreiwen déi Authentifikatioun erfuerderen, onofhängeg vum ënnerierdesche Authentifikatiounssystem.

Vill modern Linux Verdeelungen ënnerstëtzen als Standard Linux-PAM (nodréiglech PAM bezeechent).An dësem Artikel erkläre mir wéi een fortgeschratt PAM an Ubuntu an CentOS Systemer konfiguréiert.

Ier mer weidergoen, bemierkt datt:

  • Als Systemadministrator ass dat Wichtegst ze beherrschen wéi PAM Konfiguratiounsdatei(n) d'Verbindung tëscht Uwendungen (Servicer) an de pluggable Authentifikatiounsmoduler (PAMs) definéieren déi déi aktuell Authentifikatiounsaufgaben ausféieren. Dir musst net onbedéngt d'intern Aarbecht vu PAM verstoen.
  • PAM huet d'Potenzial fir d'Sécherheet vun Ärem Linux System eescht ze änneren. Fehlerhafter Konfiguratioun kann den Zougang zu Ärem System deelweis oder komplett ausschalten. Zum Beispill eng zoufälleg Läschung vun enger Konfiguratiounsdatei(n) ënner /etc/pam.d/* an/oder /etc/pam.conf kann Iech aus Ärem eegene System gespaarten!

Wéi kontrolléiert e Programm ass PAM-bewosst

Fir PAM ze benotzen, muss eng Applikatioun/Programm PAM bewosst sinn; et muss speziell geschriwwe a kompiléiert gi fir PAM ze benotzen. Fir erauszefannen ob e Programm PAM-bewosst ass oder net, kontrolléiert ob et mat der PAM-Bibliothéik mat dem ldd Kommando kompiléiert gouf.

Zum Beispill sshd:

$ sudo ldd /usr/sbin/sshd | grep libpam.so

	libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007effddbe2000)

Wéi konfiguréieren PAM am Linux

D'Haaptkonfiguratiounsdatei fir PAM ass /etc/pam.conf an den /etc/pam.d/ Verzeichnis enthält d'PAM Konfiguratiounsdateien fir all PAM-bewosst Applikatioun/Servicer. PAM wäert d'Datei ignoréieren wann de Verzeechnes existéiert.

D'Syntax fir d'Haaptkonfiguratiounsdatei ass wéi follegt. De Fichier besteet aus enger Lëscht vu Reegelen, déi op enger eenzeger Zeil geschriwwe sinn (Dir kënnt d'Regele mat dem \\ Flucht Charakter verlängeren) an d'Kommentaren si mat \# markéiert a verlängeren op den nächsten Enn vun der Linn.

D'Format vun all Regel ass eng Raum getrennt Sammlung vun Tokens (déi éischt dräi sinn case-onsensitiv). Mir wäerten dës Tokens an de folgende Sektiounen erklären.

service type control-flag module module-arguments 

wou:

  • Service: aktuellen Uwendungsnumm.
  • Typ: Modultyp/Context/Interface.
  • Kontroll-Fändel: weist d'Behuele vum PAM-API un, wann de Modul seng Authentifikatiounstask net fäerdeg bréngt.
  • Modul: den absoluten Dateinumm oder de relativen Pathnumm vum PAM.
  • Modul-Argumenter: Raum getrennte Lëscht vun Tokens fir Modulverhalen ze kontrolléieren.

D'Syntax vun all Datei an /etc/pam.d/ ass ähnlech wéi déi vun der Haaptdatei a besteet aus Linnen vun der folgender Form:

type control-flag module module-arguments

Dëst ass e Beispill vun enger Regeldefinitioun (ouni Modul-Argumenter) fonnt an der /etc/pam.d/sshd Datei, déi net-root Login net erlaabt wann /etc/nologin existéiert:

account required pam_nologin.so

PAM Management Groups a Kontroll Fändelen verstoen

PAM Authentifikatioun Aufgaben sinn an véier onofhängeg Gestioun Gruppen getrennt. Dës Gruppe verwalten verschidden Aspekter vun engem typesche Benotzer Ufro fir e limitéierten Service.

E Modul ass mat enger vun dëse Management Gruppentypen verbonnen:

  • Kont: Servicer fir Kontverifizéierung ubidden: ass d'Passwuert vum Benotzer ofgelaf?; ass dëse Benotzer Zougang zum ugefrote Service erlaabt?.
  • Authentifikatioun: authentifizéieren e Benotzer a stellt d'Benotzer Umeldungsinformatiounen op.
  • Passwuert: si verantwortlech fir d'Aktualiséierung vun de Benotzerpasswierder a schaffen zesumme mat Authentifikatiounsmoduler.
  • Sessioun: verwalten Aktiounen déi am Ufank vun enger Sessioun an Enn vun enger Sessioun gemaach goufen.

PAM gelueden Objektdateien (d'Moduler) sollen an de folgende Verzeechnes sinn: /lib/security/ oder /lib64/security ofhängeg vun der Architektur.

Déi ënnerstëtzt Kontrollfändelen sinn:

  • Requisite: Echec bréngt direkt d'Kontroll op d'Applikatioun zréck, wat d'Natur vum éischte Modulausfall ugeet.
  • erfuerderlech: all dës Moduler sinn erfuerderlech fir erfollegräich ze sinn fir libpam fir Erfolleg an d'Applikatioun zréckzekommen.
  • genuch: well all virdrun Moduler gelongen sinn, féiert den Erfolleg vun dësem Modul zu engem direkten an erfollegräiche Retour an d'Applikatioun (Feele vun dësem Modul gëtt ignoréiert).
  • fakultativ: den Erfolleg oder den Echec vun dësem Modul gëtt allgemeng net opgeholl.

Zousätzlech zu den uewe genannte Schlësselwierder, ginn et zwee aner gëlteg Kontrollfändelen:

  • Include and substack: enthält all Zeilen vun engem bestëmmten Typ aus der Konfiguratiounsdatei, déi als Argument fir dës Kontroll uginn ass.

Wéi beschränken ech de Root Zougang zum SSH Service iwwer PAM

Als Beispill wäerte mir konfiguréieren wéi Dir PAM benotzt fir de Root Benotzer Zougang zu engem System iwwer SSH a Loginprogrammer auszeschalten. Hei wëlle mir de Root Benotzer Zougang zu engem System auszeschalten, andeems Dir Zougang zu Login an sshd Servicer beschränkt.

Mir kënnen de /lib/security/pam_listfile.so Modul benotzen deen eng grouss Flexibilitéit bitt fir d'Privilegien vu spezifesche Konten ze limitéieren. Öffnen an änneren d'Datei fir den Zilservice am /etc/pam.d/ Verzeichnis wéi gewisen.

$ sudo vim /etc/pam.d/sshd
OR
$ sudo vim /etc/pam.d/login

Füügt dës Regel a béid Dateien.

auth    required       pam_listfile.so \
        onerr=succeed  item=user  sense=deny  file=/etc/ssh/deniedusers

Erklärt d'Tokens an der uewe genannter Regel:

  • auth: ass de Modultyp (oder Kontext).
  • obligatoresch: ass e Kontroll-Fändel dat heescht datt wann de Modul benotzt gëtt, e muss passéieren oder d'Gesamtresultat falen, onofhängeg vum Status vun anere Moduler.
  • pam_listfile.so: ass e Modul deen e Wee bitt fir Servicer op Basis vun enger arbiträrer Datei ze refuséieren oder z'erméiglechen.
  • onerr=erfollegräich: Modulargument.
  • item=Benotzer: Modulargument dat spezifizéiert wat an der Datei opgezielt ass a gepréift soll ginn.
  • sense=verleegnen: Modulargument dat spezifizéiert Handlung fir ze huelen wann am Fichier fonnt gëtt, wann den Artikel NET an der Datei fonnt gëtt, da gëtt déi entgéintgesate Handlung gefrot.
  • Datei=/etc/ssh/deniedusers: Modulargument dat de Fichier spezifizéiert mat engem Element pro Zeil.

Als nächst musse mir d'Datei /etc/ssh/deniedusers erstellen an den Numm root dran addéieren:

$ sudo vim /etc/ssh/deniedusers

Späichert d'Ännerungen a maach d'Datei zou, setzt dann déi erfuerderlech Permissiounen drop:

$ sudo chmod 600 /etc/ssh/deniedusers

Vun elo un wäert déi uewe genannte Regel PAM soen fir d' /etc/ssh/deniedusers Datei ze konsultéieren an den Zougang zu den SSH a Loginservicer fir all opgelëscht Benotzer ze refuséieren.

Wéi konfiguréieren Advanced PAM am Linux

Fir méi komplex PAM Regelen ze schreiwen, kënnt Dir gëlteg Kontrollfändelen an der folgender Form benotzen:

type [value1=action1 value2=action2 …] module module-arguments

Wou valueN entsprécht dem Retourcode vun der Funktioun, déi am Modul opgeruff gëtt, fir deen d'Linn definéiert ass. Dir kënnt ënnerstëtzt Wäerter vum Online PAM Administrator's Guide fannen. E spezielle Wäert ass Standard, wat implizéiert all valueN net explizit ernimmt.

D'ActionN kann eng vun de folgende Formen huelen:

  • ignoréieren: wann dës Aktioun mat engem Stack vu Moduler benotzt gëtt, dréit de Retourstatus vum Modul net zum Retourcode bäi, deen d'Applikatioun kritt.
  • schlecht: weist datt de Retourcode sollt als indikativ fir de Modul feelen. Wann dëse Modul deen éischten am Stack ass, deen ausfällt, gëtt säi Statuswäert fir dee vum ganze Stack benotzt.
  • stierwen: gläichwäerteg mat schlecht, awer kann de Modulstack ofschléissen an PAM direkt zréck an d'Applikatioun.
  • ok: dëst instruéiert PAM datt de Systemadministrator mengt datt dëse Retourcode direkt zum Retourcode vum ganze Stack vu Moduler bäidroe soll.
  • gemaach: gläichwäerteg mat ok, awer kann de Modulstack ofschléissen an PAM direkt zréck an d'Applikatioun.
  • N (en net ënnerschriwwene Ganzt): gläichwäerteg mat ok, awer kann iwwer déi nächst N Moduler am Stack sprangen.
  • Reset: dës Aktioun läscht all Erënnerung vum Zoustand vum Modulstack a fänkt mam nächste gestapelte Modul nei un.

Jiddereng vun de véier Schlësselwieder: néideg; néideg; genuch; an fakultativ, hunn en gläichwäertegen Ausdrock am Sënn vun der [...] Syntax, déi Iech erlaabt méi komplizéiert Regelen ze schreiwen a si sinn:

  • obligatoresch: [success=ok new_authtok_reqd=ok ignore=ignore default=schlecht]
  • requisite: [erfolleg=ok new_authtok_reqd=ok ignore=ignore default=stierwen]
  • genuch: [erfollegräich = fäerdeg new_authtok_reqd = fäerdeg default = ignoréieren]
  • optional: [success=ok new_authtok_reqd=ok default=ignoréieren]

Déi folgend ass e Beispill vun engem modernen CentOS 7 System. Loosst eis dës Regelen aus der /etc/pam.d/postlogin PAM Datei betruechten:

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
session     [success=1 default=ignore] pam_succeed_if.so service !~ gdm* service !~ su* quiet
session     [default=1]   pam_lastlog.so nowtmp showfailed
session     optional      pam_lastlog.so silent noupdate showfailed

Hei ass eng aner Beispill Konfiguratioun vun der /etc/pam.d/smartcard-auth PAM Datei:

#%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        [success=done ignore=ignore default=die] pam_pkcs11.so nodebug wait_for_card
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so

password    required      pam_pkcs11.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so

Fir méi Informatioun, kuckt d'pam.d Man Säit:

$ man pam.d 

Schlussendlech kann eng ëmfaassend Beschreiwung vun der Konfiguratiounsdatei Syntax an all PAM Moduler an der Dokumentatioun fir Linux-PAM fonnt ginn.

PAM ass e mächtege High-Level API, deen Programmer erlaabt, déi op Authentifikatioun vertrauen fir authentesch Benotzer op Uwendungen an engem Linux System. Et ass mächteg awer ganz Erausfuerderung ze verstoen an ze benotzen.

An dësem Artikel hu mir erkläert wéi Dir fortgeschratt Feature vu PAM an Ubuntu an CentOS konfiguréiert. Wann Dir Froen oder Kommentarer hutt fir ze deelen, benotzt de Feedbackformular hei ënnen.