Sigurvegarar alþjóðlegu keppnanna SSH og sudo eru aftur á svið. Stýrt af Distinguished Active Directory Conductor

Sögulega séð var sudo heimildum stjórnað af innihaldi skráa frá /etc/sudoers.d и visado, og lykilheimild var framkvæmd með því að nota ~/.ssh/authorized_keys. Hins vegar, eftir því sem innviðir stækka, er vilji til að stjórna þessum réttindum miðlægt. Í dag geta verið nokkrir lausnarmöguleikar:

  • Stillingarstjórnunarkerfi - Chef, puppet, Ansible, Salt
  • Active Directory + ssd
  • Ýmsar rangfærslur í formi skrifta og handvirkrar skráargerðar

Að mínu huglægu mati er besti kosturinn fyrir miðstýrða stjórnun samt sambland Active Directory + ssd. Kostir þessarar aðferðar eru:

  • Sannarlega ein miðlæg notendaskrá.
  • Dreifing réttinda sudo kemur niður á að bæta notanda við ákveðinn öryggishóp.
  • Þegar um er að ræða ýmis Linux kerfi, verður nauðsynlegt að taka upp frekari athuganir til að ákvarða stýrikerfið þegar stillingarkerfi eru notuð.

Svítan í dag verður tileinkuð tengingunni sérstaklega Active Directory + ssd til réttindagæslu sudo og geymsla SSH lykla í einni geymslu.
Svo fraus salurinn í spennuþrunginni þögn, hljómsveitarstjórinn lyfti kylfunni og hljómsveitin gerði sig klára.
Farðu.

Gefið:
— Active Directory lén testopf.local á Windows Server 2012 R2.
- Linux gestgjafi sem keyrir Centos 7
— Stillt heimild með því að nota ssd
Báðar lausnirnar gera breytingar á stefinu Active Directory, svo við athugum allt í prófunarumhverfi og gerum aðeins breytingar á vinnuinnviðum. Ég vil taka fram að allar breytingar eru markvissar og í raun bæta við aðeins nauðsynlegum eiginleikum og flokkum.

Aðgerð 1: stjórn sudo hlutverk í gegn Active Directory.

Til að stækka hringrásina Active Directory þú þarft að hlaða niður nýjustu útgáfunni sudo — 1.8.27 frá og með deginum í dag. Taktu upp og afritaðu skrána schema.ActiveDirectory úr ./doc skránni yfir í lénsstýringuna. Frá skipanalínunni með stjórnandaréttindi úr möppunni þar sem skráin var afrituð skaltu keyra:
ldifde -i -f schema.ActiveDirectory -c dc=X dc=testopf,dc=local
(Ekki gleyma að skipta út gildum þínum)
Opið adsiedit.msc og tengdu við sjálfgefið samhengi:
Búðu til skiptingu í rót lénsins sviti. (Borgarstéttin heldur því þrjósklega fram að það sé í þessari einingu sem púkinn ssd leitar að hlut sudoHlutverk hlutir. Hins vegar, eftir að hafa kveikt á ítarlegri villuleit og rannsakað annálana, kom í ljós að leitin var framkvæmd í öllu skráartrénu.)
Við búum til fyrsta hlutinn sem tilheyrir bekknum í skiptingunni sudoHlutverk. Nafnið er hægt að velja algerlega handahófskennt, þar sem það þjónar eingöngu til þægilegrar auðkenningar.
Meðal mögulegra tiltækra eiginleika frá skemaviðbótinni eru þeir helstu eftirfarandi:

  • sudoCommand — ákvarðar hvaða skipanir má framkvæma á hýsilinn.
  • sudoHost — ákvarðar hvaða gestgjafa þetta hlutverk á við. Hægt að tilgreina sem ALLT, og fyrir einstaka gestgjafa með nafni. Það er líka hægt að nota grímu.
  • sudoNotandi — tilgreina hvaða notendur hafa leyfi til að framkvæma sudo.
    Ef þú tilgreinir öryggishóp skaltu bæta við „%“ tákni í upphafi nafnsins. Ef það eru bil í hópnafninu er ekkert að hafa áhyggjur af. Af stokkunum að dæma er verkefnið að flýja rými tekið yfir af vélbúnaðinum ssd.

Sigurvegarar alþjóðlegu keppnanna SSH og sudo eru aftur á svið. Stýrt af Distinguished Active Directory Conductor
Mynd 1. sudoRole hlutir í sudoers undirdeild í rót möppunnar

Sigurvegarar alþjóðlegu keppnanna SSH og sudo eru aftur á svið. Stýrt af Distinguished Active Directory Conductor
Mynd 2. Aðild að öryggishópum sem tilgreindir eru í sudoRole hlutum.

Eftirfarandi uppsetning er gerð á Linux hliðinni.
Í skrá /etc/nsswitch.conf bættu línunni í lok skráarinnar:

sudoers: files sss

Í skrá /etc/sssd/sssd.conf í kafla [sssd] bæta við þjónustu sudo

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

Eftir allar aðgerðir þarftu að hreinsa sssd púka skyndiminni. Sjálfvirkar uppfærslur eiga sér stað á 6 klukkustunda fresti, en hvers vegna ættum við að bíða svona lengi þegar við viljum það núna?

sss_cache -E

Það kemur oft fyrir að það hjálpar ekki að hreinsa skyndiminni. Síðan hættum við þjónustunni, hreinsum gagnagrunninn og byrjum þjónustuna.

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

Við tengjumst sem fyrsti notandinn og athugum hvað er í boði fyrir hann undir 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

Við gerum það sama með annan notandann okkar:

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

Þessi nálgun gerir þér kleift að skilgreina sudo hlutverk miðlægt fyrir mismunandi notendahópa.

Geymsla og notkun ssh lykla í Active Directory

Með örlítilli stækkun á kerfinu er hægt að geyma ssh lykla í Active Directory notendaeiginleikum og nota þá þegar heimild er veitt á Linux vélum.

Heimild í gegnum sssd verður að vera stillt.
Bættu við nauðsynlegri eigindinni með því að nota PowerShell skriftu.
AddsshPublicKeyAttribute.ps1Aðgerð 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 = Nýtt eigindkenni
$eiginleikar = @{
lDAPDisplayName = 'sshPublicKey';
attributeId = $oid;
oMSyntax = 22;
attributeSyntax = "2.5.5.5";
isSingleValued = $true;
adminDescription = 'Opinn notandi lykill fyrir SSH innskráningu';
}

New-ADObject -Name sshPublicKey -Type attributeSchema -Path $schemapath -OtherEigenindi $attributes
$userSchema = get-adobject -SearchBase $schemapath -Sía 'nafn -eq "notandi"'
$userSchema | Set-ADObject -Add @{mayContain = 'sshPublicKey'}

Eftir að eigindinni hefur verið bætt við verður þú að endurræsa Active Directory Domain Services.
Við skulum halda áfram að Active Directory notendum. Við munum búa til lykilpar fyrir ssh tengingu með því að nota hvaða aðferð sem hentar þér.
Við ræsum PuttyGen, ýtum á „Búa til“ hnappinn og færum músina í ofvæni innan tóma svæðisins.
Þegar ferlinu er lokið getum við vistað almenna og einkalyklana, hlaðið upp opinbera lyklinum á Active Directory notendaeiginleikann og notið ferlisins. Hins vegar verður að nota almenningslykilinn frá "Opinn lykill til að líma inn í OpenSSH authorized_keys skrá:".
Sigurvegarar alþjóðlegu keppnanna SSH og sudo eru aftur á svið. Stýrt af Distinguished Active Directory Conductor
Bættu lyklinum við notendaeiginleikann.
Valkostur 1 - GUI:
Sigurvegarar alþjóðlegu keppnanna SSH og sudo eru aftur á svið. Stýrt af Distinguished Active Directory Conductor
Valkostur 2 - PowerShell:
get-aduser user1 | set-aduser -add @{sshPublicKey = 'AAAAB...XAVnX9ZRJJ0p/Q=='}
Svo, við höfum eins og er: notanda með sshPublicKey eigindina útfyllta, stilltan Putty viðskiptavin fyrir heimild með lyklum. Það er enn einn lítill punktur: hvernig á að þvinga sshd púkann til að draga út opinbera lykilinn sem við þurfum úr eiginleikum notandans. Lítið handrit sem finnst á hinu borgaralega interneti getur tekist á við þetta.

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'

Við stillum heimildirnar á því á 0500 fyrir rót.

chmod 0500  /usr/local/bin/fetchSSHKeysFromLDAP

Í þessu dæmi er stjórnandareikningur notaður til að bindast við möppuna. Í bardagaaðstæðum verður að vera sérstakur reikningur með lágmarksréttindum.
Ég persónulega var mjög ruglaður með augnablik lykilorðsins í hreinu formi í handritinu, þrátt fyrir réttindin sem sett voru.
Lausnarmöguleiki:

  • Ég vista lykilorðið í sérstakri skrá:
    echo -n Supersecretpassword > /usr/local/etc/secretpass

  • Ég stillti skráarheimildir á 0500 fyrir rót
    chmod 0500 /usr/local/etc/secretpass

  • Breyting á ræsingarbreytum ldapsearch: færibreyta -w superSecretPassword Ég breyti því í -y /usr/local/etc/secretpass

Lokahljómurinn í föruneytinu í dag er klipping sshd_config

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

Fyrir vikið fáum við eftirfarandi röð með lykilheimild stillt í ssh biðlaranum:

  1. Notandinn tengist þjóninum með því að tilgreina innskráningu sína.
  2. Sshd púkinn, í gegnum handrit, dregur út gildi almenningslykilsins úr notendaeiginleika í Active Directory og framkvæmir heimild með því að nota lyklana.
  3. sssd púkinn sannvotir notandann frekar út frá hópaðild. Athugið! Ef þetta er ekki stillt mun hvaða lénsnotandi sem er hafa aðgang að hýsingaraðilanum.
  4. Þegar þú reynir að sudo leitar sssd púkinn í Active Directory að hlutverkum. Ef hlutverk eru til staðar eru eiginleikar notandans og hópaðild merkt (ef sudoRoles er stillt til að nota notendahópa)

Samantekt.

Þannig eru lyklarnir geymdir í Active Directory notendaeiginleikum, sudo heimildum - á sama hátt er aðgangur að Linux gestgjöfum með lénsreikningum framkvæmdur með því að athuga aðild að Active Directory hópnum.
Lokabylgja hljómsveitarstjórans - og salurinn frýs í lotningarþögn.

Tilföng sem notuð eru skriflega:

Sudo í gegnum Active Directory
Ssh lyklar í gegnum Active Directory
Powershell forskrift, bætir eigind við Active Directory Schema
sudo stöðug losun

Heimild: www.habr.com

Bæta við athugasemd