Uz skatuves atkal ir starptautisko konkursu SSH un sudo uzvarētāji. Vada izcilais Active Directory diriģents

Vēsturiski sudo atļaujas regulēja failu saturs no /etc/sudoers.d и Visudo, un atslēgas autorizācija tika veikta, izmantojot ~/.ssh/authorized_keys. Taču, infrastruktūrai augot, rodas vēlme šīs tiesības pārvaldīt centralizēti. Šodien var būt vairākas risinājuma iespējas:

  • Konfigurācijas pārvaldības sistēma - Šefpavārs, marionete, Iespējams, sāls
  • Active Directory + ssd
  • Dažādas perversijas skriptu un manuālas failu rediģēšanas veidā

Manuprāt, vislabākais centralizētās pārvaldības variants joprojām ir kombinācija Active Directory + ssd. Šīs pieejas priekšrocības ir:

  • Patiešām viens centralizēts lietotāju direktorijs.
  • Tiesību sadale sudo Tas ir saistīts ar lietotāja pievienošanu noteiktai drošības grupai.
  • Dažādu Linux sistēmu gadījumā, izmantojot konfigurācijas sistēmas, kļūst nepieciešams ieviest papildu pārbaudes, lai noteiktu OS.

Šodienas komplekts būs īpaši veltīts savienojumam Active Directory + ssd tiesību pārvaldībai sudo un uzglabāšana ssh atslēgas vienā repozitorijā.
Tā zāle sastinga saspringtā klusumā, diriģents pacēla zizli, un orķestris gatavojās.
Iesim.

Ņemot vērā:
— Active Directory domēns testopf.local operētājsistēmā Windows Server 2012 R2.
— Linux resursdators, kurā darbojas Centos 7
— Konfigurēta autorizācija, izmantojot ssd
Abi risinājumi veic izmaiņas shēmā Active Directory, tāpēc mēs visu pārbaudām testa vidē un tikai pēc tam veicam izmaiņas darba infrastruktūrā. Es vēlos atzīmēt, ka visas izmaiņas ir mērķtiecīgas un faktiski pievieno tikai nepieciešamos atribūtus un klases.

1. darbība: kontrole sudo lomas cauri Active Directory.

Lai paplašinātu ķēdi Active Directory jums ir nepieciešams lejupielādēt jaunāko versiju sudo — 1.8.27 no šodienas. Izpakojiet un kopējiet failu schema.ActiveDirectory no direktorija ./doc uz domēna kontrolleri. Komandrindā ar administratora tiesībām no direktorija, kurā fails tika kopēts, palaidiet:
ldifde -i -f schema.ActiveDirectory -c dc=X dc=testopf,dc=local
(Neaizmirstiet aizstāt savas vērtības)
Atvērt adsiedit.msc un izveidojiet savienojumu ar noklusējuma kontekstu:
Izveidojiet sadalījumu domēna saknē sudoers. (Buržuāzija spītīgi apgalvo, ka tieši šajā vienībā dēmons ssd meklē preci sudoRole objektus. Tomēr pēc detalizētas atkļūdošanas ieslēgšanas un žurnālu izpētes atklājās, ka meklēšana tika veikta visā direktoriju kokā.)
Mēs izveidojam pirmo objektu, kas pieder klasei sadalījumā sudoRole. Vārdu var izvēlēties absolūti patvaļīgi, jo tas kalpo tikai ērtai identifikācijai.
Starp iespējamiem shēmas paplašinājuma pieejamajiem atribūtiem galvenie ir šādi:

  • sudoCommand — nosaka, kuras komandas ir atļauts izpildīt resursdatorā.
  • sudoHost — nosaka, uz kuriem saimniekiem šī loma attiecas. Var norādīt kā VISS, un individuālam saimniekdatoram pēc nosaukuma. Ir iespējams arī izmantot masku.
  • sudoUser — norāda, kuriem lietotājiem ir atļauts izpildīt sudo.
    Ja norādāt drošības grupu, nosaukuma sākumā pievienojiet zīmi “%”. Ja grupas nosaukumā ir atstarpes, nav par ko uztraukties. Spriežot pēc baļķiem, uzdevumu izbēgt no telpām pārņem mehānisms ssd.

Uz skatuves atkal ir starptautisko konkursu SSH un sudo uzvarētāji. Vada izcilais Active Directory diriģents
1. att. sudoRole objekti sudoers apakšnodaļā direktorija saknē

Uz skatuves atkal ir starptautisko konkursu SSH un sudo uzvarētāji. Vada izcilais Active Directory diriģents
2. attēls. Dalība drošības grupās, kas norādītas sudoRole objektos.

Tālāk norādītā iestatīšana tiek veikta Linux pusē.
Failā /etc/nsswitch.conf pievienojiet rindiņu faila beigās:

sudoers: files sss

Failā /etc/sssd/sssd.conf sadaļā [sssd] pievienot pakalpojumiem sudo

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

Pēc visām darbībām jums ir jāiztīra sssd dēmona kešatmiņa. Automātiski atjauninājumi notiek ik pēc 6 stundām, bet kāpēc mums būtu jāgaida tik ilgi, ja mēs to vēlamies tagad?

sss_cache -E

Bieži gadās, ka kešatmiņas notīrīšana nepalīdz. Pēc tam mēs pārtraucam pakalpojumu, iztīrām datu bāzi un sākam pakalpojumu.

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

Mēs izveidojam savienojumu kā pirmais lietotājs un pārbaudām, kas viņam ir pieejams zem 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

Mēs darām to pašu ar savu otro lietotāju:

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

Šī pieeja ļauj centralizēti definēt sudo lomas dažādām lietotāju grupām.

Ssh atslēgu glabāšana un izmantošana Active Directory

Nedaudz paplašinot shēmu, ir iespējams glabāt ssh atslēgas Active Directory lietotāja atribūtos un izmantot tos, veicot autorizāciju Linux resursdatoros.

Jākonfigurē autorizācija, izmantojot sssd.
Pievienojiet nepieciešamo atribūtu, izmantojot PowerShell skriptu.
AddsshPublicKeyAttribute.ps1Funkcija New-AttributeID {
$Prefix="1.2.840.113556.1.8000.2554"
$GUID=[System.Guid]::NewGuid().ToString()
$Parts=@()
$Parts+=[UInt64]::Parsēt($guid.SubString(0,4),“AllowHexSpecifier”)
$Parts+=[UInt64]::Parsēt($guid.SubString(4,4),“AllowHexSpecifier”)
$Parts+=[UInt64]::Parsēt($guid.SubString(9,4),“AllowHexSpecifier”)
$Parts+=[UInt64]::Parsēt($guid.SubString(14,4),“AllowHexSpecifier”)
$Parts+=[UInt64]::Parsēt($guid.SubString(19,4),“AllowHexSpecifier”)
$Parts+=[UInt64]::Parsēt($guid.SubString(24,6),“AllowHexSpecifier”)
$Parts+=[UInt64]::Parsēt($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 = jauns atribūta ID
$attributes = @{
lDAPDisplayName = 'sshPublicKey';
atribūtiId = $oid;
oMSintakse = 22;
atribūtiSyntax = "2.5.5.5";
isSingleValued = $true;
adminDescription = 'Lietotāja publiskā atslēga SSH pieteikšanai';
}

Jauns-ADObject -Nosaukums sshPublicKey -Type atribūtiSchema -Ceļš $schemapath -Citi atribūti $atribūti
$userSchema = get-adobject - SearchBase $schemapath - Filtrs 'name -eq "user"'
$userSchema | Set-ADObject -Add @{mayContain = 'sshPublicKey'}

Pēc atribūta pievienošanas jums ir jārestartē Active Directory domēna pakalpojumi.
Pāriesim pie Active Directory lietotājiem. Mēs ģenerēsim atslēgu pāri ssh savienojumam, izmantojot jebkuru jums ērtu metodi.
Mēs palaižam PuttyGen, nospiežam pogu “Ģenerēt” un izmisīgi pārvietojam peli tukšajā apgabalā.
Pēc procesa pabeigšanas mēs varam saglabāt publisko un privāto atslēgu, augšupielādēt publisko atslēgu Active Directory lietotāja atribūtā un izbaudīt procesu. Tomēr publiskā atslēga ir jāizmanto no "Publiskā atslēga ielīmēšanai OpenSSH authorised_keys failā:".
Uz skatuves atkal ir starptautisko konkursu SSH un sudo uzvarētāji. Vada izcilais Active Directory diriģents
Pievienojiet atslēgu lietotāja atribūtam.
1. iespēja — GUI:
Uz skatuves atkal ir starptautisko konkursu SSH un sudo uzvarētāji. Vada izcilais Active Directory diriģents
2. iespēja — PowerShell:
get-aduser user1 | set-aduser -add @{sshPublicKey = 'AAAAB...XAVnX9ZRJJ0p/Q=='}
Tātad pašlaik mums ir: lietotājs ar aizpildītu atribūtu sshPublicKey, konfigurēts Putty klients autorizācijai, izmantojot atslēgas. Joprojām ir viens mazs jautājums: kā piespiest sshd dēmonu iegūt mums nepieciešamo publisko atslēgu no lietotāja atribūtiem. Neliels buržuāziskajā internetā atrasts skripts ar to var veiksmīgi tikt galā.

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'

Mēs iestatījām tā atļaujas uz 0500 root.

chmod 0500  /usr/local/bin/fetchSSHKeysFromLDAP

Šajā piemērā, lai izveidotu saiti ar direktoriju, tiek izmantots administratora konts. Cīņas apstākļos ir jābūt atsevišķam kontam ar minimālu tiesību kopumu.
Mani personīgi ļoti mulsināja paroles mirklis tīrā veidā skriptā, neskatoties uz noteiktajām tiesībām.
Risinājuma variants:

  • Es saglabāju paroli atsevišķā failā:
    echo -n Supersecretpassword > /usr/local/etc/secretpass

  • Es iestatīju faila atļaujas uz 0500 root
    chmod 0500 /usr/local/etc/secretpass

  • Ldapsearch palaišanas parametru maiņa: parametrs -w superSecretPassword Es to mainu uz -y /usr/local/etc/secretpass

Pēdējais akords šodienas komplektā ir sshd_config rediģēšana

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

Rezultātā mēs iegūstam šādu secību ar atslēgas autorizāciju, kas konfigurēta ssh klientā:

  1. Lietotājs izveido savienojumu ar serveri, norādot savu pieteikšanos.
  2. Sshd dēmons, izmantojot skriptu, izvelk publiskās atslēgas vērtību no Active Directory lietotāja atribūta un veic autorizāciju, izmantojot atslēgas.
  3. Sssd dēmons tālāk autentificē lietotāju, pamatojoties uz dalību grupā. Uzmanību! Ja tas nav konfigurēts, jebkuram domēna lietotājam būs piekļuve resursdatoram.
  4. Mēģinot veikt sudo, sssd dēmons Active Directory meklē lomas. Ja lomas ir klāt, tiek pārbaudīti lietotāja atribūti un dalība grupā (ja sudoRoles ir konfigurēts lietotāju grupu lietošanai)

Kopsavilkums.

Tādējādi atslēgas tiek glabātas Active Directory lietotāju atribūtos, sudo atļaujās - līdzīgi domēna kontu piekļuve Linux saimniekiem tiek veikta, pārbaudot dalību Active Directory grupā.
Pēdējais diriģenta pulciņa vilnis – un zāle sastingst godbijīgā klusumā.

Rakstniecībā izmantotie resursi:

Sudo, izmantojot Active Directory
Ssh atslēgas, izmantojot Active Directory
Powershell skripts, pievienojot atribūtu Active Directory shēmai
sudo stabila izlaišana

Avots: www.habr.com

Pievieno komentāru