D'Gewënner vun den internationale Concoursen SSH an Sudo stinn erëm op der Bühn. Leed vun Distinguished Active Directory Dirigent

Historesch goufen sudo Permissiounen duerch den Inhalt vun de Dateien regéiert /etc/sudoers.d и visado, a Schlëssel Autorisatioun gouf duerchgefouert benotzt ~/.ssh/authorized_keys. Wéi och ëmmer, wéi d'Infrastruktur wiisst, gëtt et e Wonsch dës Rechter zentral ze geréieren. Haut kënne verschidde Léisungsoptioune sinn:

  • Configuration Management System - Kapp, Puppelchen, Sicht, Salt
  • Active Directory + ssd
  • Verschidde Perversiounen a Form vu Scripten a manueller Dateieditatioun

Menger subjektiv Meenung ass déi bescht Optioun fir zentraliséiert Gestioun nach ëmmer eng Kombinatioun Active Directory + ssd. D'Virdeeler vun dëser Approche sinn:

  • Wierklech en eenzegen zentraliséierte Benotzerverzeechnes.
  • Verdeelung vun Rechter sudo kënnt erof fir e Benotzer an eng spezifesch Sécherheetsgrupp ze addéieren.
  • Am Fall vu verschiddene Linux Systemer ass et néideg zousätzlech Kontrollen aféieren fir d'OS ze bestëmmen wann Dir Konfiguratiounssystemer benotzt.

D'Suite vun haut gëtt speziell fir d'Verbindung gewidmet Active Directory + ssd fir Rechter Gestioun sudo an Stockage ssh Schlësselen an engem eenzege Repository.
Also, d'Hal ass an ugespaanter Rou gefruer, den Dirigent huet säi Knuewelek opgehuewen, an den Orchester huet sech fäerdeg gemaach.
Gitt.

Färdeg:
- Active Directory Domain testopf.local op Windows Server 2012 R2.
- Linux Host Lafen Centos 7
- Konfiguréiert Autorisatioun benotzt ssd
Béid Léisunge maachen Ännerungen am Schema Active Directory, also iwwerpréift mir alles an engem Testëmfeld a maachen nëmmen dann Ännerungen un der Aarbechtsinfrastruktur. Ech wëll bemierken datt all d'Ännerunge gezielt sinn an tatsächlech nëmmen déi néideg Attributer a Klassen derbäi ginn.

Aktioun 1: Kontroll sudo Rollen duerch Active Directory.

Fir de Circuit ze vergréisseren Active Directory Dir musst déi lescht Verëffentlechung eroflueden sudo - 1.8.27 vun haut. Unpack a kopéiert d'Datei schema.ActiveDirectory vum ./doc Verzeichnis an den Domain Controller. Vun der Kommandozeil mat Administratorrechter aus dem Verzeichnis wou d'Datei kopéiert gouf, lafen:
ldifde -i -f schema.ActiveDirectory -c dc=X dc=testopf,dc=local
(Vergiesst net Är Wäerter z'ersetzen)
Mir maachen op adsiedit.msc a verbënnt mam Standardkontext:
Erstellt eng Divisioun an der Wuerzel vum Domain Pulloveren. (D'Bourgeoisie behaapt haartnäckeg datt et an dëser Eenheet ass den Dämon ssd sicht no engem Artikel sudoRole Objeten. Wéi och ëmmer, nodeems Dir detailléiert Debugging ageschalt huet an d'Logbicher studéiert, gouf opgedeckt datt d'Sich am ganze Verzeechnesbaum duerchgefouert gouf.)
Mir kreéieren den éischten Objet deen zu der Klass an der Divisioun gehéiert sudoRole. Den Numm kann absolut arbiträr gewielt ginn, well et eleng fir bequem Identifikatioun déngt.
Ënnert de méigleche verfügbaren Attributer vun der Schemaverlängerung sinn déi Haapt déi folgend:

  • sudoCommand - bestëmmt wéi eng Befehle erlaabt sinn um Host auszeféieren.
  • sudoHost - bestëmmt op wéi eng Hosten dës Roll gëllt. Kann als spezifizéiert ginn ALLEGUER, a fir en individuellen Host mam Numm. Et ass och méiglech eng Mask ze benotzen.
  • sudoUser - uginn wéi eng Benotzer erlaabt sinn auszeféieren sudo.
    Wann Dir eng Sécherheetsgrupp spezifizéiert, füügt e "%" Zeechen um Ufank vum Numm un. Wann et Plazen am Gruppnumm sinn, gëtt et näischt ze fäerten. No de Logbicher beurteelen, gëtt d'Aufgab fir Plazen ze flüchten vum Mechanismus iwwerholl ssd.

D'Gewënner vun den internationale Concoursen SSH an Sudo stinn erëm op der Bühn. Leed vun Distinguished Active Directory Dirigent
Figebam 1. sudoRole Objete am sudoers Ënnerdeelung an der Wuerzel vun der directory

D'Gewënner vun den internationale Concoursen SSH an Sudo stinn erëm op der Bühn. Leed vun Distinguished Active Directory Dirigent
Figur 2. Memberschaft an Sécherheet Gruppen uginn an sudoRole Objete.

Déi folgend Setup gëtt op der Linux Säit gemaach.
Am Dossier /etc/nsswitch.conf füügt d'Linn un d'Enn vun der Datei:

sudoers: files sss

Am Dossier /etc/sssd/sssd.conf an der Rubrik [sssd] op Servicer addéieren sudo

cat /etc/sssd/sssd.conf | grep services
services = nss, pam, sudo

No all Operatiounen musst Dir den sssd Daemon Cache läschen. Automatesch Updates geschéien all 6 Stonnen, awer firwat solle mir sou laang waarden wa mir et elo wëllen?

sss_cache -E

Et geschitt dacks datt de Cache läschen net hëlleft. Da stoppen mir de Service, botzen d'Datebank a starten de Service.

service sssd stop
rm -rf /var/lib/sss/db/*
service sssd start

Mir verbannen als den éischte Benotzer a kontrolléieren wat him ënner sudo verfügbar ass:

su user1
[user1@testsshad log]$ id
uid=1109801141(user1) gid=1109800513(domain users) groups=1109800513(domain users),1109801132(admins_)
[user1@testsshad log]$ sudo -l
[sudo] password for user1:
Matching Defaults entries for user1 on testsshad:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
    env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
    env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin:/bin:/usr/sbin:/usr/bin

User user1 may run the following commands on testsshad:
    (root) /usr/bin/ls, /usr/bin/cat

Mir maachen datselwecht mat eisem zweete Benotzer:

su user2
[user2@testsshad log]$ id
uid=1109801142(user2) gid=1109800513(domain users) groups=1109800513(domain users),1109801138(sudo_root)
[user2@testsshad log]$ sudo -l
Matching Defaults entries for user2 on testsshad:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
    env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
    env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin:/bin:/usr/sbin:/usr/bin

User user2 may run the following commands on testsshad:
    (root) ALL

Dës Approche erlaabt Iech zentral Sudo Rollen fir verschidde Benotzergruppen ze definéieren.

Späicheren a benotzen ssh Schlësselen am Active Directory

Mat enger liichter Expansioun vum Schema ass et méiglech ssh Schlësselen an Active Directory Benotzer Attributer ze späicheren a se ze benotzen wann Dir op Linux Hosten autoriséiert.

Autorisatioun iwwer sssd muss konfiguréiert sinn.
Füügt dat erfuerderlecht Attribut mat engem PowerShell Skript derbäi.
AddsshPublicKeyAttribute.ps1Funktioun New-AttributeID {
$Prefix="1.2.840.113556.1.8000.2554"
$GUID=[System.Guid]::NewGuid().ToString()
$Parts=@()
$Parts+=[UInt64]::Parse($guid.SubString(0,4),"AllowHexSpecifier")
$Parts+=[UInt64]::Parse($guid.SubString(4,4),"AllowHexSpecifier")
$Parts+=[UInt64]::Parse($guid.SubString(9,4),"AllowHexSpecifier")
$Parts+=[UInt64]::Parse($guid.SubString(14,4),"AllowHexSpecifier")
$Parts+=[UInt64]::Parse($guid.SubString(19,4),"AllowHexSpecifier")
$Parts+=[UInt64]::Parse($guid.SubString(24,6),"AllowHexSpecifier")
$Parts+=[UInt64]::Parse($guid.SubString(30,6),"AllowHexSpecifier")
$oid=[String]::Format(«{0}.{1}.{2}.{3}.{4}.{5}.{6}.{7}»,$prefix,$Parts[0],
$Parts[1],$Parts[2],$Parts[3],$Parts[4],$Parts[5],$Parts[6])
$oidd
}
$schemaPath = (Get-ADRootDSE).schemaNamingContext
$oid = New-AttributeID
$attributes = @{
lDAPDisplayName = 'sshPublicKey';
attributeId = $id;
oMSyntax = 22;
attributeSyntax = "2.5.5.5";
isSingleValued = $true;
adminDescription = 'Benotzer ëffentleche Schlëssel fir SSH Login';
}

New-ADObject -Name sshPublicKey -Type attributeSchema -Path $schemapath -OtherAttributes $attributes
$userSchema = get-adobject -SearchBase $schemapath -Filter 'name -eq "user"'
$userSchema | Set-ADObject -Add @{mayContain = 'sshPublicKey'}

Nodeems Dir den Attribut bäigefüügt hutt, musst Dir Active Directory Domain Services nei starten.
Loosst eis op Active Directory Benotzer weidergoen. Mir generéieren e Schlësselpaar fir ssh Verbindung mat enger Method déi Iech bequem ass.
Mir starten PuttyGen, dréckt op de "Generéieren" Knäppchen a bewegt d'Maus frantesch an der eidel Géigend.
Nom Ofschloss vum Prozess kënne mir déi ëffentlech a privat Schlësselen späicheren, den ëffentleche Schlëssel op den Active Directory Benotzer Attribut eroplueden an de Prozess genéissen. Wéi och ëmmer, den ëffentleche Schlëssel muss vum "Ëffentlech Schlëssel fir an OpenSSH autoriséiert_keys Datei ze pechen:".
D'Gewënner vun den internationale Concoursen SSH an Sudo stinn erëm op der Bühn. Leed vun Distinguished Active Directory Dirigent
Füügt de Schlëssel zum Benotzerattribut.
Optioun 1 - GUI:
D'Gewënner vun den internationale Concoursen SSH an Sudo stinn erëm op der Bühn. Leed vun Distinguished Active Directory Dirigent
Optioun 2 - PowerShell:
get-aduser user1 | set-aduser -add @{sshPublicKey = 'AAAAB...XAVnX9ZRJJ0p/Q=='}
Also, mir hunn de Moment: e Benotzer mat dem sshPublicKey Attribut ausgefëllt, e konfiguréierte Putty Client fir Autorisatioun mat Schlësselen. Et bleift e klenge Punkt: wéi een den sshd Daemon forcéiere fir den ëffentleche Schlëssel ze extrahieren, dee mir brauchen aus den Attributer vum Benotzer. E klenge Skript, deen um bourgeois Internet fonnt gëtt, kann dat mat Erfolleg ausgoen.

cat /usr/local/bin/fetchSSHKeysFromLDAP
#!/bin/sh
ldapsearch -h testmdt.testopf.local -xb "dc=testopf,dc=local" '(sAMAccountName='"${1%@*}"')' -D [email protected] -w superSecretPassword 'sshPublicKey' | sed -n '/^ /{H;d};/sshPublicKey:/x;$g;s/n *//g;s/sshPublicKey: //gp'

Mir setzen d'Permissiounen op et op 0500 fir root.

chmod 0500  /usr/local/bin/fetchSSHKeysFromLDAP

An dësem Beispill gëtt en Administratorkonto benotzt fir un de Verzeichnis ze binden. A Kampfbedéngungen muss et e separaten Kont mat engem Minimum Set vu Rechter sinn.
Ech perséinlech war ganz duercherneen duerch de Moment vum Passwuert a senger reng Form am Skript, trotz de Rechter gesat.
Léisungsoptioun:

  • Ech späicheren d'Passwuert an enger separater Datei:
    echo -n Supersecretpassword > /usr/local/etc/secretpass

  • Ech setzen Fichier Permissiounen op 0500 fir root
    chmod 0500 /usr/local/etc/secretpass

  • Änneren ldapsearch Startparameter: Parameter -w superSecretPassword Ech änneren et zu -y /usr/local/etc/secretpass

De leschte Akkord an der Suite vun haut ass d'Editioun sshd_config

cat /etc/ssh/sshd_config | egrep -v -E "#|^$" | grep -E "AuthorizedKeysCommand|PubkeyAuthe"
PubkeyAuthentication yes
AuthorizedKeysCommand /usr/local/bin/fetchSSHKeysFromLDAP
AuthorizedKeysCommandUser root

Als Resultat kréien mir déi folgend Sequenz mat Schlësselautorisatioun konfiguréiert am ssh Client:

  1. De Benotzer verbënnt mam Server andeems hien säi Login uginn.
  2. Den sshd Daemon, duerch e Skript, extrahéiert den ëffentleche Schlësselwäert vun engem Benotzerattribut am Active Directory a mécht Autorisatioun mat de Schlësselen.
  3. Den sssd Daemon authentifizéiert de Benotzer weider op Basis vun der Gruppememberschaft. Opgepasst! Wann dëst net konfiguréiert ass, da wäert all Domain Benotzer Zougang zum Host hunn.
  4. Wann Dir probéiert Sudo ze maachen, sicht den sssd Daemon den Active Directory fir Rollen. Wann Rollen präsent sinn, ginn d'Attributer vum Benotzer an d'Grupp Memberschaft iwwerpréift (wann sudoRoles konfiguréiert ass fir Benotzergruppen ze benotzen)

D 'Resultat.

Also sinn d'Schlësselen an Active Directory Benotzer Attributer gespäichert, sudo Permissiounen - ähnlech gëtt den Zougang zu Linux Hosten duerch Domainkonten duerchgefouert andeems Dir Memberschaft an der Active Directory Grupp iwwerpréift.
Déi lescht Welle vum Dirigent-Baton - an d'Hal freet an éierleche Stille.

schrëftlech benotzt Ressourcen:

Sudo iwwer Active Directory
Ssh Schlësselen iwwer Active Directory
Powershell Skript, en Attribut un Active Directory Schema derbäi
sudo stabil Verëffentlechung

Source: will.com

Setzt e Commentaire