Hvordan konfigurere og bruke PAM i Linux


Linux-PAM (forkortelse for Plugable Authentication Modules som utviklet seg fra Unix-PAM-arkitekturen) er en kraftig pakke med delte biblioteker som brukes til å dynamisk autentisere en bruker til applikasjoner (eller tjenester) ) i et Linux-system.

Den integrerer flere lavnivå-autentiseringsmoduler i en høynivå-API som gir dynamisk autentiseringsstøtte for applikasjoner. Dette lar utviklere skrive applikasjoner som krever autentisering, uavhengig av det underliggende autentiseringssystemet.

Mange moderne Linux-distribusjoner støtter Linux-PAM (heretter referert til som "PAM ") som standard. I denne artikkelen vil vi forklare hvordan du konfigurerer avansert PAM i Ubuntu- og CentOS-systemer.

Før vi går videre, vær oppmerksom på at:

  • Som systemadministrator er det viktigste å mestre hvordan PAM-konfigurasjonsfil(er) definerer forbindelsen mellom applikasjoner (tjenester) og de pluggbare autentiseringsmodulene (PAM-ene) som utfører selve autentiseringsoppgavene. Du trenger ikke nødvendigvis å forstå den interne funksjonen til PAM.
  • PAM har potensial til å alvorlig endre sikkerheten til Linux-systemet ditt. Feil konfigurasjon kan deaktivere tilgangen til systemet ditt delvis eller helt. For eksempel kan en utilsiktet sletting av en(e) konfigurasjonsfil(er) under /etc/pam.d/* og/eller /etc/pam.conf låse deg ute fra eget system!

Hvordan sjekke at et program er PAM-bevisst

For å bruke PAM, må et program/program være «PAM-bevisst»; den må ha blitt skrevet og kompilert spesielt for å bruke PAM. For å finne ut om et program er «PAM-bevisst» eller ikke, sjekk om det har blitt kompilert med PAM-biblioteket ved å bruke ldd-kommandoen.

For eksempel sshd:

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

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

Hvordan konfigurere PAM i Linux

Hovedkonfigurasjonsfilen for PAM er /etc/pam.conf og katalogen /etc/pam.d/ inneholder PAM-konfigurasjonsfilene for hver PAM-bevisste applikasjon/tjenester. PAM vil ignorere filen hvis katalogen eksisterer.

Syntaksen for hovedkonfigurasjonsfilen er som følger. Filen består av en liste over regler skrevet på en enkelt linje (du kan utvide regler ved å bruke “\ ” escape-tegnet) og kommentarer innledes med “# ” merker og forleng til neste ende av linjen.

Formatet til hver regel er en mellomromseparert samling av tokens (de tre første skiller mellom store og små bokstaver). Vi vil forklare disse tokenene i påfølgende avsnitt.

service type control-flag module module-arguments 

hvor :

  • tjeneste: faktisk programnavn.
  • type: modultype/kontekst/grensesnitt.
  • kontroll-flagg: indikerer oppførselen til PAM-API hvis modulen ikke lykkes med autentiseringsoppgaven.
  • modul: det absolutte filnavnet eller det relative banenavnet til PAM.
  • modulargumenter: mellomromsdelt liste over tokens for å kontrollere moduladferd.

Syntaksen til hver fil i /etc/pam.d/ ligner på hovedfilen og består av linjer med følgende form:

type control-flag module module-arguments

Dette er et eksempel på en regeldefinisjon (uten modulargumenter) funnet i /etc/pam.d/sshd-filen, som ikke tillater ikke-root-pålogginger når /etc/nologin sterk> finnes:

account required pam_nologin.so

Forstå PAM Management Groups og Control-flagg

PAM-autentiseringsoppgaver er delt inn i fire uavhengige administrasjonsgrupper. Disse gruppene administrerer ulike aspekter av en typisk brukers forespørsel om en begrenset tjeneste.

En modul er knyttet til en av disse ledergruppetypene:

  • konto: tilbyr tjenester for kontoverifisering: har brukerens passord utløpt?; har denne brukeren tilgang til den forespurte tjenesten?.
  • autentisering: autentiser en bruker og konfigurer brukerlegitimasjon.
  • passord: er ansvarlige for å oppdatere brukerpassord og fungerer sammen med autentiseringsmoduler.
  • økt: administrer handlinger som utføres i begynnelsen av en økt og slutten av en økt.

PAM lastbare objektfiler (modulene) skal ligge i følgende katalog: /lib/security/ eller /lib64/security avhengig av arkitekturen.

De støttede kontrollflaggene er:

  • påkrevd: feil returnerer umiddelbart kontrollen til applikasjonen som indikerer arten av den første modulfeilen.
  • påkrevd: alle disse modulene kreves for å lykkes for at libpam skal returnere suksess til applikasjonen.
  • tilstrekkelig: gitt at alle foregående moduler har lykkes, fører suksessen til denne modulen til en umiddelbar og vellykket retur til applikasjonen (feil i denne modulen ignoreres).
  • valgfritt: suksessen eller fiaskoen til denne modulen blir vanligvis ikke registrert.

I tillegg til de ovennevnte er nøkkelordene, det er to andre gyldige kontrollflagg:

  • inkluder og understabel: inkluderer alle linjer av gitt type fra konfigurasjonsfilen som er spesifisert som et argument for denne kontrollen.

Hvordan begrense root-tilgang til SSH-tjeneste via PAM

Som et eksempel vil vi konfigurere hvordan du bruker PAM for å deaktivere root-brukertilgang til et system via SSH og påloggingsprogrammer. Her ønsker vi å deaktivere root-brukertilgang til et system, ved å begrense tilgangen til pålogging og sshd-tjenester.

Vi kan bruke modulen /lib/security/pam_listfile.so som tilbyr stor fleksibilitet når det gjelder å begrense rettighetene til spesifikke kontoer. Åpne og rediger filen for måltjenesten i katalogen /etc/pam.d/ som vist.

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

Legg til denne regelen i begge filene.

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

Forklaring av tokens i regelen ovenfor:

  • auth: er modultypen (eller konteksten).
  • påkrevd: er et kontrollflagg som betyr at hvis modulen brukes, må den bestå ellers vil det totale resultatet mislykkes, uavhengig av statusen til andre moduler.
  • pam_listfile.so: er en modul som gir en måte å nekte eller tillate tjenester basert på en vilkårlig fil.
  • onerr=succes: modulargument.
  • item=bruker: modulargument som spesifiserer hva som er oppført i filen og bør sjekkes for.
  • sense=nekte: modulargument som spesifiserer handling som skal utføres hvis den finnes i filen, hvis elementet IKKE finnes i filen, blir den motsatte handlingen forespurt.
  • file=/etc/ssh/deniedusers: modulargument som spesifiserer fil som inneholder ett element per linje.

Deretter må vi opprette filen /etc/ssh/deniedusers og legge til navnet root i den:

sudo vim /etc/ssh/deniedusers

Lagre endringene og lukk filen, og sett deretter de nødvendige tillatelsene på den:

sudo chmod 600 /etc/ssh/deniedusers

Fra nå av vil regelen ovenfor fortelle PAM å konsultere /etc/ssh/deniedusers-filen og nekte tilgang til SSH- og påloggingstjenestene for alle oppførte brukere.

Hvordan konfigurere avansert PAM i Linux

For å skrive mer komplekse PAM-regler kan du bruke gyldige kontrollflagg i følgende form:

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

Hvor verdiN tilsvarer returkoden fra funksjonen som påkalles i modulen som linjen er definert for. Du kan finne støttede verdier fra den elektroniske PAM Administrator's Guide. En spesiell verdi er standard, noe som innebærer at alle verdiN ikke er nevnt eksplisitt.

actionN kan ha en av følgende former:

  • ignorer: hvis denne handlingen brukes med en stabel med moduler, vil ikke modulens returstatus bidra til returkoden applikasjonen får.
  • dårlig: indikerer at returkoden skal betraktes som en indikasjon på at modulen mislykkes. Hvis denne modulen er den første i stabelen som mislykkes, vil dens statusverdi bli brukt for hele stabelen.
  • død: tilsvarer dårlig, men kan avslutte modulstakken og PAM umiddelbart returnere til applikasjonen.
  • ok: dette instruerer PAM om at systemadministratoren mener denne returkoden skal bidra direkte til returkoden til hele stabelen med moduler.
  • ferdig: tilsvarer ok, men kan avslutte modulstakken og PAM umiddelbart tilbake til applikasjonen.
  • N (et usignert heltall): tilsvarer ok, men kan hoppe over de neste N modulene i stabelen.
  • Tilbakestill: denne handlingen sletter alt minne for modulstabelens tilstand og start på nytt med neste stablede modul.

Hvert av de fire nøkkelordene: obligatorisk; nødvendig; tilstrekkelig; og valgfritt, har et ekvivalent uttrykk når det gjelder [...]-syntaksen, som lar deg skrive mer kompliserte regler og de er:

  • obligatorisk: [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
  • påkrevd: [success=ok new_authtok_reqd=ok ignore=ignore default=die]
  • tilstrekkelig: [success=done new_authtok_reqd=done default=ignore]
  • valgfritt: [success=ok new_authtok_reqd=ok default=ignore]

Følgende er et eksempel fra et moderne CentOS 7-system. La oss vurdere disse reglene 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 annet eksempel på konfigurasjon 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 mer informasjon, se man-siden for pam.d:

man pam.d 

Til slutt, en omfattende beskrivelse av konfigurasjonsfilens syntaks og alle PAM-moduler finnes i dokumentasjonen for Linux-PAM.

Sammendrag

PAM er et kraftig API på høyt nivå som tillater programmer som er avhengige av autentisering til autentiske brukere til applikasjoner i et Linux-system. Det er kraftig, men veldig utfordrende å forstå og bruke.

I denne artikkelen har vi forklart hvordan du konfigurerer avanserte funksjoner i PAM i Ubuntu og CentOS. Hvis du har spørsmål eller kommentarer å dele, bruk tilbakemeldingsskjemaet nedenfor.