Sådan konfigureres og bruges PAM i Linux


Linux-PAM (forkortelse af Pluggable Authentication Modules, der udviklede sig fra Unix-PAM-arkitekturen) er en kraftfuld pakke af delte biblioteker, der bruges til dynamisk godkendelse af en bruger til applikationer (eller tjenester) i et Linux-system.

Det integrerer flere godkendelsesmoduler på lavt niveau i et API på højt niveau, der giver dynamisk godkendelsesstøtte til applikationer. Dette giver udviklere mulighed for at skrive applikationer, der kræver godkendelse, uafhængigt af det underliggende godkendelsessystem.

Mange moderne Linux-distributioner understøtter som standard Linux-PAM (i det følgende benævnt "PAM"). I denne artikel forklarer vi, hvordan du konfigurerer avanceret PAM i Ubuntu- og CentOS-systemer.

Før vi fortsætter, skal du bemærke, at:

  • Som systemadministrator er det vigtigste at mestre, hvordan PAM-konfigurationsfil (er) definerer forbindelsen mellem applikationer (tjenester) og de tilslutbare godkendelsesmoduler (PAM'er), der udfører de faktiske godkendelsesopgaver. Du behøver ikke nødvendigvis at forstå PAMs interne funktion.
  • PAM har potentialet til alvorligt at ændre sikkerheden i dit Linux-system. Fejlkonfiguration kan deaktivere adgang til dit system helt eller delvist. For eksempel kan en utilsigtet sletning af en eller flere konfigurationsfiler under /etc/pam.d/* og/eller /etc/pam.conf låse dig ud af dit eget system!

Sådan kontrolleres et program er PAM-opmærksom

For at ansætte PAM skal et program/program være "PAM-opmærksom". det skal være skrevet og kompileret specifikt for at bruge PAM. For at finde ud af om et program er “PAM-opmærksom” eller ej, skal du kontrollere, om det er blevet kompileret med PAM-biblioteket ved hjælp af kommandoen ldd.

For eksempel sshd:

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

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

Sådan konfigureres PAM i Linux

Hovedkonfigurationsfilen til PAM er /etc/pam.conf, og mappen /etc/pam.d/ indeholder PAM-konfigurationsfilerne til hver PAM-opmærksom applikation/tjenester. PAM ignorerer filen, hvis mappen findes.

Syntaksen for hovedkonfigurationsfilen er som følger. Filen består af en liste over regler skrevet på en enkelt linje (du kan udvide regler ved hjælp af “\” escape-tegnet), og kommentarer er forud for “#” markerer og strækker sig til næste ende af linjen.

Formatet for hver regel er en rumsepareret samling af tokens (de første tre er ikke store og små). Vi forklarer disse tokens i de efterfølgende afsnit.

service type control-flag module module-arguments 

hvor:

  • tjeneste: faktisk applikationsnavn.
  • type: modul type/kontekst/interface.
  • kontrol-flag: angiver PAM-API's adfærd, hvis modulet ikke lykkes med sin godkendelsesopgave.
  • modul: det absolutte filnavn eller relative sti til PAM.
  • modulargumenter: pladsadskilt liste over tokens til styring af modulopførsel.

Syntaksen for hver fil i /etc/pam.d/ svarer til hovedfilen og består af linjer i følgende form:

type control-flag module module-arguments

Dette er et eksempel på en regeldefinition (uden modulargumenter), der findes i /etc/pam.d/sshd-filen, som ikke tillader ikke-root-login, når/etc/nologin findes:

account required pam_nologin.so

Forståelse af PAM Management Groups og Control-flags

PAM-godkendelsesopgaver er opdelt i fire uafhængige ledelsesgrupper. Disse grupper administrerer forskellige aspekter af en typisk brugers anmodning om en begrænset tjeneste.

Et modul er knyttet til en af disse ledelsesgruppetyper:

  • konto: leverer tjenester til kontoverifikation: er brugerens adgangskode udløbet ?; har denne bruger adgang til den anmodede tjeneste ?.
  • godkendelse: godkender en bruger og konfigurerer brugerlegitimationsoplysninger.
  • adgangskode: er ansvarlig for opdatering af brugeradgangskoder og arbejder sammen med godkendelsesmoduler.
  • session: administrer handlinger, der udføres i begyndelsen af en session og slutningen af en session.

PAM-indlæselige objektfiler (modulerne) skal placeres i følgende bibliotek:/lib/security/eller/lib64/security afhængigt af arkitekturen.

De understøttede kontrolflag er:

  • nødvendig: fejl returnerer øjeblikkeligt kontrol til applikationen, hvilket angiver arten af det første modulfejl.
  • påkrævet: alle disse moduler kræves for at lykkes for libpam at returnere succes til applikationen.
  • tilstrækkelig: i betragtning af at alle foregående moduler er lykkedes, fører succesen med dette modul til en øjeblikkelig og vellykket tilbagevenden til applikationen (fejl i dette modul ignoreres).
  • valgfri: succes eller fiasko for dette modul registreres normalt ikke.

Ud over ovenstående er nøgleordene, der er to andre gyldige kontrolflag:

  • inkluderer: inkluderer alle linjer af en given type fra konfigurationsfilen, der er angivet som et argument til dette kontrolelement.
  • substack: inkluderer alle linjer af en given type fra konfigurationsfilen, der er angivet som et argument til dette kontrolelement.

Sådan begrænses rootadgang til SSH Service via PAM

Som et eksempel konfigurerer vi, hvordan man bruger PAM til at deaktivere root-brugeradgang til et system via SSH og login-programmer. Her ønsker vi at deaktivere rootbrugeradgang til et system ved at begrænse adgangen til login og sshd-tjenester.

Vi kan bruge modulet /lib/security/pam_listfile.so, som giver stor fleksibilitet til at begrænse rettighederne til bestemte konti. Åbn og rediger filen for måltjenesten i /etc/pam.d/ biblioteket som vist.

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

Tilføj denne regel i begge filer.

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

Forklaring af tokens i ovenstående regel:

  • auth: er modultypen (eller konteksten).
  • krævet: er et kontrolflag, der betyder, at hvis modulet bruges, skal det bestå, ellers vil det samlede resultat mislykkes, uanset status for andre moduler.
  • pam_listfile.so: er et modul, der giver en måde at nægte eller tillade tjenester baseret på en vilkårlig fil.
  • onerr = lykkes: modulargument.
  • element = bruger: modulargument, der specificerer, hvad der er angivet i filen og skal kontrolleres for.
  • sense = deny: modulargument, der angiver handling, der skal foretages, hvis den findes i filen, hvis elementet IKKE findes i filen, anmodes den modsatte handling.
  • fil =/etc/ssh/nægtede brugere: modulargument, der specificerer fil, der indeholder et element pr. linje.

Dernæst er vi nødt til at oprette filen/etc/ssh/denused-brugere og tilføje navnet root i den:

$ sudo vim /etc/ssh/deniedusers

Gem ændringerne, og luk filen, og indstil derefter de nødvendige tilladelser til den:

$ sudo chmod 600 /etc/ssh/deniedusers

Fra nu af vil ovenstående regel bede PAM om at konsultere filen/etc/ssh/nægtede brugere og nægte adgang til SSH og login-tjenester for enhver angivet bruger.

Sådan konfigureres avanceret PAM i Linux

For at skrive mere komplekse PAM-regler kan du bruge gyldige kontrolflag i følgende form:

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

Hvor værdi N svarer til returkoden fra den funktion, der påkaldes i det modul, som linjen er defineret for. Du kan finde understøttede værdier fra den online PAM-administratorvejledning. En særlig værdi er standard, hvilket indebærer, at alle værdiN'er ikke nævnes eksplicit.

ActionN kan tage en af følgende former:

  • ignorér: hvis denne handling bruges med en stak moduler, bidrager modulets returstatus ikke til den returkode, som applikationen opnår.
  • dårlig: angiver, at returkoden skal betragtes som en indikation af, at modulet fejler. Hvis dette modul er det første i stakken, der mislykkes, bruges dets statusværdi til hele stakken.
  • die: svarer til dårlig, men kan afslutte modulstakken og PAM straks vender tilbage til applikationen.
  • ok: dette instruerer PAM om, at systemadministratoren mener, at denne returkode skal bidrage direkte til returkoden for hele stakken af moduler.
  • gjort: svarer til ok, men kan afslutte modulstakken og PAM straks vender tilbage til applikationen.
  • N (et usigneret heltal): svarer til ok, men springer måske over de næste N-moduler i stakken.
  • Nulstil: denne handling rydder al hukommelse i tilstanden af modulstakken og genstart med det næste stablede modul.

Hvert af de fire nøgleord: krævet; krævet; tilstrækkelig; og valgfrit, har et ækvivalent udtryk med hensyn til [...] syntaksen, som giver dig mulighed for at skrive mere komplicerede regler, og de er:

  • påkrævet: [succes = ok new_authtok_reqd = ok ignorér = ignorér standard = dårlig]
  • nødvendig: [success = ok new_authtok_reqd = ok ignorere = ignorere standard = die]
  • tilstrækkelig: [success = done new_authtok_reqd = done default = ignore]
  • valgfrit: [success = ok new_authtok_reqd = ok standard = ignorere]

Følgende er et eksempel fra et moderne CentOS 7-system. Lad os overveje disse regler fra /etc/pam.d/postlogin PAM-filen:

#%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

Her er et andet eksempel på konfiguration fra /etc/pam.d/smartcard-auth PAM-filen:

#%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

For mere information, se pam.d man-siden:

$ man pam.d 

Endelig findes en omfattende beskrivelse af konfigurationsfilens syntaks og alle PAM-moduler i dokumentationen til Linux-PAM.

PAM er et kraftigt API på højt niveau, der tillader programmer, der er afhængige af autentificering til autentiske brugere til applikationer i et Linux-system. Det er stærkt, men meget udfordrende at forstå og bruge.

I denne artikel har vi forklaret, hvordan man konfigurerer avancerede funktioner i PAM i Ubuntu og CentOS. Hvis du har spørgsmål eller kommentarer til at dele, skal du bruge feedbackformularen nedenfor.