Zoeken op website

Hoe PAM in Linux te configureren en te gebruiken


Linux-PAM (afkorting van Pluggable Authentication Modules, voortgekomen uit de Unix-PAM-architectuur) is een krachtige suite van gedeelde bibliotheken die worden gebruikt om een gebruiker dynamisch te authenticeren voor applicaties (of services ) in een Linux-systeem.

Het integreert meerdere authenticatiemodules op laag niveau in een API op hoog niveau die dynamische authenticatie-ondersteuning biedt voor applicaties. Hierdoor kunnen ontwikkelaars applicaties schrijven die authenticatie vereisen, onafhankelijk van het onderliggende authenticatiesysteem.

Veel moderne Linux-distributies ondersteunen standaard Linux-PAM (hierna “PAM”). In dit artikel leggen we uit hoe je geavanceerde PAM kunt configureren in Ubuntu- en CentOS-systemen.

Voordat we verder gaan, moet u er rekening mee houden dat:

  • Als systeembeheerder is het belangrijkste om te beheersen hoe PAM-configuratiebestand(en) de verbinding definiëren tussen applicaties (services) en de inplugbare authenticatiemodules (PAM's) die de daadwerkelijke authenticatietaken uitvoeren. U hoeft niet noodzakelijk de interne werking van PAM te begrijpen.
  • PAM heeft het potentieel om de veiligheid van uw Linux-systeem ernstig te veranderen. Een foutieve configuratie kan de toegang tot uw systeem gedeeltelijk of volledig uitschakelen. Als u bijvoorbeeld per ongeluk een of meer configuratiebestanden onder /etc/pam.d/* en/of /etc/pam.conf verwijdert, kunt u uw toegang blokkeren eigen systeem!

Hoe u kunt controleren of een programma PAM-bewust is

Om PAM te gebruiken, moet een applicatie/programma “PAM bewust” zijn; het moet specifiek geschreven en gecompileerd zijn om PAM te kunnen gebruiken. Om erachter te komen of een programma “PAM-bewust” is of niet, controleert u of het is gecompileerd met de PAM-bibliotheek met behulp van het ldd-commando.

Bijvoorbeeld sshd:

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

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

Hoe PAM in Linux te configureren

Het belangrijkste configuratiebestand voor PAM is /etc/pam.conf en de map /etc/pam.d/ bevat de PAM-configuratiebestanden voor elke PAM-bewuste applicatie/service. PAM negeert het bestand als de map bestaat.

De syntaxis voor het hoofdconfiguratiebestand is als volgt. Het bestand bestaat uit een lijst met regels die op één regel zijn geschreven (u kunt regels uitbreiden met het escape-teken “\ ”) en commentaar wordt voorafgegaan door “# ” markeert en breidt uit tot het volgende uiteinde van de lijn.

Het formaat van elke regel is een door spaties gescheiden verzameling tokens (de eerste drie zijn niet hoofdlettergevoelig). We zullen deze tokens in de volgende secties uitleggen.

service type control-flag module module-arguments 

waar :

  • service: daadwerkelijke applicatienaam.
  • type: moduletype/context/interface.
  • control-flag: geeft het gedrag van de PAM-API aan als de module er niet in slaagt zijn authenticatietaak uit te voeren.
  • module: de absolute bestandsnaam of relatieve padnaam van de PAM.
  • module-argumenten: door spaties gescheiden lijst met tokens voor het controleren van het modulegedrag.

De syntaxis van elk bestand in /etc/pam.d/ is vergelijkbaar met die van het hoofdbestand en bestaat uit regels in de volgende vorm:

type control-flag module module-arguments

Dit is een voorbeeld van een regeldefinitie (zonder module-argumenten) gevonden in het bestand /etc/pam.d/sshd, dat niet-root logins niet toestaat wanneer /etc/nologin sterk> bestaat:

account required pam_nologin.so

Inzicht in PAM-beheergroepen en controlevlaggen

PAM-verificatietaken zijn onderverdeeld in vier onafhankelijke beheergroepen. Deze groepen beheren verschillende aspecten van het verzoek van een typische gebruiker voor een beperkte service.

Een module is gekoppeld aan een van deze typen beheergroepen:

  • account: diensten verlenen voor accountverificatie: is het wachtwoord van de gebruiker verlopen?; Heeft deze gebruiker toegang tot de gevraagde dienst?
  • authenticatie: authenticeer een gebruiker en stel gebruikersreferenties in.
  • wachtwoord: zijn verantwoordelijk voor het bijwerken van gebruikerswachtwoorden en werken samen met authenticatiemodules.
  • sessie: beheer acties die worden uitgevoerd aan het begin van een sessie en aan het einde van een sessie.

PAM laadbare objectbestanden (de modules) moeten zich in de volgende map bevinden: /lib/security/ of /lib64/security afhankelijk van de architectuur.

De ondersteunde controlevlaggen zijn:

  • vereiste: een fout geeft onmiddellijk de controle terug aan de applicatie, waarbij de aard van de eerste modulefout wordt aangegeven.
  • vereist: al deze modules zijn vereist om te slagen zodat libpam de applicatie succesvol kan maken.
  • voldoende: aangezien alle voorgaande modules zijn geslaagd, leidt het succes van deze module tot een onmiddellijke en succesvolle terugkeer naar de applicatie (het falen van deze module wordt genegeerd).
  • optioneel: het succes of falen van deze module wordt doorgaans niet vastgelegd.

Naast de bovenstaande trefwoorden zijn er nog twee andere geldige controlevlaggen:

  • include en substack: neem alle regels van een bepaald type op uit het configuratiebestand dat is opgegeven als argument voor dit besturingselement.

Hoe root-toegang tot SSH-service via PAM te beperken

Als voorbeeld zullen we configureren hoe PAM moet worden gebruikt om de toegang van rootgebruikers tot een systeem via SSH en inlogprogramma's uit te schakelen. Hier willen we de rootgebruikerstoegang tot een systeem uitschakelen door de toegang tot login- en sshd-services te beperken.

We kunnen de module /lib/security/pam_listfile.so gebruiken, die grote flexibiliteit biedt bij het beperken van de rechten van specifieke accounts. Open en bewerk het bestand voor de doelservice in de map /etc/pam.d/, zoals weergegeven.

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

Voeg deze regel toe in beide bestanden.

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

Uitleg van de tokens in de bovenstaande regel:

  • auth: is het moduletype (of context).
  • vereist: is een controlevlag die betekent dat als de module wordt gebruikt, deze moet slagen, anders is het algemene resultaat mislukt, ongeacht de status van andere modules.
  • pam_listfile.so: is een module die een manier biedt om services te weigeren of toe te staan op basis van een willekeurig bestand.
  • onerr=succeed: moduleargument.
  • item=user: moduleargument dat specificeert wat er in het bestand staat en waarop moet worden gecontroleerd.
  • sense=deny: moduleargument dat de actie specificeert die moet worden ondernomen als het in het bestand wordt gevonden. Als het item NIET in het bestand wordt gevonden, wordt de tegenovergestelde actie gevraagd.
  • file=/etc/ssh/deniedusers: moduleargument dat een bestand specificeert dat één item per regel bevat.

Vervolgens moeten we het bestand /etc/ssh/denieusers maken en de naam root eraan toevoegen:

sudo vim /etc/ssh/deniedusers

Sla de wijzigingen op, sluit het bestand en stel vervolgens de vereiste machtigingen in:

sudo chmod 600 /etc/ssh/deniedusers

Vanaf nu zal de bovenstaande regel PAM vertellen het bestand /etc/ssh/denieusers te raadplegen en de toegang tot de SSH- en inlogservices voor elke vermelde gebruiker te weigeren.

Hoe geavanceerde PAM in Linux te configureren

Om complexere PAM-regels te schrijven, kunt u geldige controlevlaggen in de volgende vorm gebruiken:

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

Waarbij waardeN overeenkomt met de retourcode van de functie die wordt aangeroepen in de module waarvoor de regel is gedefinieerd. Ondersteunde waarden kunt u vinden in de online PAM Beheerdershandleiding. Een speciale waarde is standaard, wat impliceert dat alle waardeN’s niet expliciet worden vermeld.

De actieN kan een van de volgende vormen aannemen:

  • negeren: als deze actie wordt gebruikt met een stapel modules, zal de retourstatus van de module niet bijdragen aan de retourcode die de applicatie verkrijgt.
  • slecht: geeft aan dat de retourcode moet worden beschouwd als indicatief voor het falen van de module. Als deze module de eerste in de stapel is die faalt, wordt de statuswaarde ervan gebruikt voor die van de hele stapel.
  • die: gelijk aan slecht, maar kan de modulestack beëindigen en PAM onmiddellijk terugkeren naar de applicatie.
  • ok: dit instrueert PAM dat de systeembeheerder vindt dat deze retourcode direct moet bijdragen aan de retourcode van de volledige stapel modules.
  • klaar: gelijk aan ok maar kan de modulestack beëindigen en PAM onmiddellijk terugkeren naar de applicatie.
  • N (een geheel getal zonder teken): gelijk aan ok maar kan over de volgende N modules in de stapel heen springen.
  • Reset: deze actie wist al het geheugen van de status van de modulestapel en start opnieuw met de volgende gestapelde module.

Elk van de vier trefwoorden: vereist; vereiste; voldoende; en optioneel, hebben een equivalente expressie in termen van de syntaxis [...], waarmee u ingewikkelder regels kunt schrijven en deze zijn:

  • vereist: [success=ok new_authtok_reqd=ok negeer=negeer standaard=slecht]
  • vereiste: [success=ok new_authtok_reqd=ok negeer=negeer standaard=die]
  • voldoende: [success=klaar new_authtok_reqd=klaar standaard=ignore]
  • optioneel: [success=ok new_authtok_reqd=ok standaard=ignore]

Het volgende is een voorbeeld van een modern CentOS 7-systeem. Laten we deze regels uit het /etc/pam.d/postlogin PAM-bestand bekijken:

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

Hier is nog een voorbeeldconfiguratie uit het PAM-bestand /etc/pam.d/smartcard-auth:

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

Voor meer informatie, zie de pam.d manpagina:

man pam.d 

Ten slotte is een uitgebreide beschrijving van de syntaxis van het configuratiebestand en alle PAM-modules te vinden in de documentatie voor Linux-PAM.

Samenvatting

PAM is een krachtige API op hoog niveau die programma's mogelijk maakt die afhankelijk zijn van authenticatie van authentieke gebruikers voor applicaties in een Linux-systeem. Het is krachtig, maar zeer uitdagend om te begrijpen en te gebruiken.

In dit artikel hebben we uitgelegd hoe u geavanceerde functies van PAM in Ubuntu en CentOS kunt configureren. Als u vragen of opmerkingen heeft, kunt u het onderstaande feedbackformulier gebruiken.