Scenoje vėl – tarptautinių konkursų SSH ir sudo nugalėtojai. Vadovauja išskirtinis „Active Directory“ dirigentas

Istoriškai sudo leidimus valdė failų turinys iš /etc/sudoers.d и visado, o rakto autorizacija buvo atlikta naudojant ~/.ssh/authorized_keys. Tačiau augant infrastruktūrai kyla noras šias teises valdyti centralizuotai. Šiandien gali būti keletas sprendimo variantų:

  • Konfigūracijos valdymo sistema – Virėjas, Marionetė, Galimas, Druska
  • "Active Directory" + ssd
  • Įvairūs iškrypimai scenarijų ir rankinio failų redagavimo forma

Mano subjektyvia nuomone, geriausias centralizuoto valdymo variantas vis tiek yra derinys "Active Directory" + ssd. Šio metodo pranašumai yra šie:

  • Tikrai vienas centralizuotas vartotojų katalogas.
  • Teisių paskirstymas : sudo vartotojas turi būti įtrauktas į konkrečią saugos grupę.
  • Įvairių „Linux“ sistemų atveju, naudojant konfigūravimo sistemas, reikia atlikti papildomus patikrinimus, siekiant nustatyti OS.

Šios dienos rinkinys bus skirtas būtent ryšiui "Active Directory" + ssd teisių valdymui : sudo ir saugojimas sSH raktus vienoje saugykloje.
Taigi, salė sustingo įtemptoje tyloje, dirigentas pakėlė lazdelę ir orkestras susiruošė.
Eik.

Dano:
- Active Directory domenas testopf.local „Windows Server 2012 R2“.
— „Linux“ priegloba, kurioje veikia „Centos 7“.
- Sukonfigūruotas autorizavimas naudojant ssd
Abu sprendimai keičia schemą "Active Directory", todėl viską patikriname testinėje aplinkoje ir tik tada atliekame darbo infrastruktūros pakeitimus. Norėčiau pastebėti, kad visi pakeitimai yra tikslingi ir, tiesą sakant, pridedami tik būtini atributai ir klasės.

1 veiksmas: kontrolė : sudo vaidmenis per "Active Directory".

Norėdami išplėsti grandinę "Active Directory" jums reikia atsisiųsti naujausią leidimą : sudo — 1.8.27 nuo šiandien. Išpakuokite ir nukopijuokite failą schema.ActiveDirectory iš ./doc katalogo į domeno valdiklį. Komandinėje eilutėje su administratoriaus teisėmis iš katalogo, kuriame buvo nukopijuotas failas, paleiskite:
ldifde -i -f schema.ActiveDirectory -c dc=X dc=testopf,dc=local
(Nepamirškite pakeisti savo vertybių)
Atidaryti adsiedit.msc ir prisijunkite prie numatytojo konteksto:
Sukurkite padalijimą domeno šaknyje megztiniai. (Buržuazija atkakliai tvirtina, kad būtent šiame padalinyje demonas ssd ieško daikto sudoRole objektų. Tačiau įjungus išsamų derinimą ir ištyrus žurnalus paaiškėjo, kad paieška buvo atlikta visame katalogų medyje.)
Padalinyje sukuriame pirmąjį klasei priklausantį objektą sudoRole. Vardas gali būti pasirinktas visiškai savavališkai, nes jis skirtas tik patogiam identifikavimui.
Tarp galimų atributų iš schemos plėtinio pagrindiniai yra šie:

  • sudoCommand — nustato, kurias komandas leidžiama vykdyti pagrindiniame kompiuteryje.
  • sudoHost – nustato, kuriems priegloboms taikomas šis vaidmuo. Galima nurodyti kaip VISI PAPUOŠALAIo individualiam prieglobos vardu. Taip pat galima naudoti kaukę.
  • sudoUser — nurodyti, kuriems vartotojams leidžiama vykdyti : sudo.
    Jei nurodote saugos grupę, pavadinimo pradžioje pridėkite ženklą „%“. Jei grupės pavadinime yra tarpų, nėra ko jaudintis. Sprendžiant iš rąstų, užduotį ištrūkti iš erdvių perima mechanizmas ssd.

Scenoje vėl – tarptautinių konkursų SSH ir sudo nugalėtojai. Vadovauja išskirtinis „Active Directory“ dirigentas
1 pav. sudoRole objektai sudoers poskyryje katalogo šaknyje

Scenoje vėl – tarptautinių konkursų SSH ir sudo nugalėtojai. Vadovauja išskirtinis „Active Directory“ dirigentas
2 pav. Narystė saugos grupėse, nurodytose sudoRole objektuose.

Ši sąranka atliekama „Linux“ pusėje.
Byloje /etc/nsswitch.conf pridėkite eilutę prie failo pabaigos:

sudoers: files sss

Byloje /etc/sssd/sssd.conf skyriuje [sssd] pridėti prie paslaugų : sudo

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

Po visų operacijų turite išvalyti sssd demono talpyklą. Automatiniai atnaujinimai vyksta kas 6 valandas, bet kodėl turėtume taip ilgai laukti, kai to norime dabar?

sss_cache -E

Dažnai atsitinka, kad talpyklos išvalymas nepadeda. Tada sustabdome paslaugą, išvalome duomenų bazę ir paleidžiame paslaugą.

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

Prisijungiame kaip pirmasis vartotojas ir patikriname, kas jam pasiekiama naudojant sudo:

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

Tą patį darome su antruoju vartotoju:

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

Šis metodas leidžia centralizuotai apibrėžti sudo vaidmenis skirtingoms vartotojų grupėms.

SSH raktų saugojimas ir naudojimas „Active Directory“.

Šiek tiek išplėtus schemą, galima saugoti ssh raktus Active Directory vartotojo atributuose ir naudoti juos autorizuojant Linux pagrindiniuose kompiuteriuose.

Turi būti sukonfigūruotas autorizavimas per sssd.
Pridėkite reikiamą atributą naudodami PowerShell scenarijų.
AddsshPublicKeyAttribute.ps1Funkcija 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])
$oid
}
$schemaPath = (Get-ADRootDSE).schemaNamingContext
$oid = naujas atributoID
$attributes = @{
lDAPDisplayName = 'sshPublicKey';
atributoId = $oid;
oMSyntaksė = 22;
atributoSyntaksė = "2.5.5.5";
isSingleValued = $true;
adminDescription = 'Vartotojo viešasis SSH prisijungimo raktas';
}

Naujas ADOobjektas - Pavadinimas sshPublicKey - Tipo atributasSchema - Kelias $schemapath - KitiAtributai $atributai
$userSchema = get-adobject -SearchBase $schemapath -Filtras 'name -eq "user"'
$userSchema | Set-ADOBject -Add @{mayContain = 'sshPublicKey'}

Pridėję atributą, turite iš naujo paleisti „Active Directory“ domeno paslaugas.
Pereikime prie „Active Directory“ vartotojų. Sugeneruosime ssh ryšio raktų porą bet kokiu jums patogiu būdu.
Paleidžiame „PuttyGen“, paspaudžiame mygtuką „Generuoti“ ir pašėlusiai perkeliame pelę tuščioje srityje.
Baigę procesą galime išsaugoti viešuosius ir privačius raktus, įkelti viešąjį raktą į Active Directory vartotojo atributą ir mėgautis procesu. Tačiau viešasis raktas turi būti naudojamas iš "Viešasis raktas, skirtas įklijuoti į OpenSSH authorised_keys failą:"
Scenoje vėl – tarptautinių konkursų SSH ir sudo nugalėtojai. Vadovauja išskirtinis „Active Directory“ dirigentas
Pridėkite raktą prie vartotojo atributo.
1 parinktis – GUI:
Scenoje vėl – tarptautinių konkursų SSH ir sudo nugalėtojai. Vadovauja išskirtinis „Active Directory“ dirigentas
2 parinktis – „PowerShell“:
get-aduser user1 | set-aduser -add @{sshPublicKey = 'AAAAB...XAVnX9ZRJJ0p/Q=='}
Taigi, šiuo metu turime: vartotoją su užpildytu atributu sshPublicKey, sukonfigūruotą „Putty“ klientą autorizacijai naudojant raktus. Lieka vienas mažas dalykas: kaip priversti sshd demoną iš vartotojo atributų išgauti mums reikalingą viešąjį raktą. Mažas scenarijus, rastas buržuaziniame internete, gali sėkmingai su tuo susidoroti.

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'

Mes nustatėme jo teises į 0500 root.

chmod 0500  /usr/local/bin/fetchSSHKeysFromLDAP

Šiame pavyzdyje administratoriaus paskyra naudojama susieti su katalogu. Kovos sąlygomis turi būti atskira sąskaita su minimaliu teisių rinkiniu.
Mane asmeniškai labai supainiojo gryna slaptažodžio momentas scenarijuje, nepaisant nustatytų teisių.
Sprendimo variantas:

  • Išsaugau slaptažodį atskirame faile:
    echo -n Supersecretpassword > /usr/local/etc/secretpass

  • Aš nustatiau failo teises į 0500 root
    chmod 0500 /usr/local/etc/secretpass

  • Ldapsearch paleidimo parametrų keitimas: parametras -w superSecretPassword Keičiu į -y /usr/local/etc/secretpass

Paskutinis šios dienos rinkinio akordas yra sshd_config redagavimas

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

Dėl to gauname šią seką su rakto įgaliojimu, sukonfigūruotu ssh kliente:

  1. Vartotojas prisijungia prie serverio nurodydamas savo prisijungimo vardą.
  2. Sshd demonas, naudodamas scenarijų, ištraukia viešojo rakto reikšmę iš vartotojo atributo „Active Directory“ ir atlieka autorizaciją naudodamas raktus.
  3. Sssd demonas toliau autentifikuoja vartotoją pagal narystę grupėje. Dėmesio! Jei tai nesukonfigūruota, bet kuris domeno vartotojas turės prieigą prie pagrindinio kompiuterio.
  4. Kai bandote sudo, sssd demonas ieško vaidmenų Active Directory. Jei yra vaidmenų, tikrinami vartotojo atributai ir narystė grupėje (jei sudoRoles sukonfigūruotas naudoti vartotojų grupes)

Santrauka.

Taigi, raktai saugomi „Active Directory“ vartotojo atributuose, sudo leidimuose – panašiai domeno paskyrų prieiga prie „Linux“ kompiuterių atliekama tikrinant narystę „Active Directory“ grupėje.
Paskutinė dirigento lazdos banga – ir salė sustingsta pagarbioje tyloje.

Rašymui naudojami ištekliai:

Sudo per Active Directory
Ssh raktai per Active Directory
Powershell scenarijus, pridedant atributą prie Active Directory schemos
sudo stabilus leidimas

Šaltinis: www.habr.com

Добавить комментарий