Ir-rebbieħa tal-kompetizzjonijiet internazzjonali SSH u sudo reġgħu qegħdin fuq il-palk. Immexxi minn Distinguished Active Directory Conduttur

Storikament, il-permessi sudo kienu rregolati mill-kontenut tal-fajls minn /etc/sudoers.d и visado, u l-awtorizzazzjoni ewlenija twettqet bl-użu ~/.ssh/authorized_keys. Madankollu, hekk kif l-infrastruttura tikber, hemm ix-xewqa li dawn id-drittijiet jiġu mmaniġġjati b’mod ċentrali. Illum jista 'jkun hemm diversi għażliet ta' soluzzjoni:

  • Sistema ta' Ġestjoni tal-Konfigurazzjoni - Chef, Pupazz, Ansible, Melħ
  • Active Directory + ssd
  • Diversi perverżjonijiet fil-forma ta 'skripts u editjar manwali tal-fajls

Fl-opinjoni suġġettiva tiegħi, l-aħjar għażla għal ġestjoni ċentralizzata għadha kombinazzjoni Active Directory + ssd. Il-vantaġġi ta 'dan l-approċċ huma:

  • Tassew direttorju wieħed ċentralizzat għall-utent.
  • Tqassim ta' drittijiet sudo jaqa' biex iżżid utent ma' grupp ta' sigurtà speċifiku.
  • Fil-każ ta 'diversi sistemi Linux, isir meħtieġ li jiġu introdotti kontrolli addizzjonali biex jiġi ddeterminat l-OS meta jintużaw sistemi ta' konfigurazzjoni.

Is-suite tal-lum se tkun iddedikata speċifikament għall-konnessjoni Active Directory + ssd għall-ġestjoni tad-drittijiet sudo u l-ħażna ssh ċwievet f'repożitorju wieħed.
Allura, is-sala ffriżat fis-silenzju ta’ tensjoni, id-direttur għolla l-bakkatura tiegħu, u l-orkestra lest.
Mur.

Mogħti:
— Dominju ta' Active Directory testopf.local fuq Windows Server 2012 R2.
— Host Linux li jħaddem Centos 7
— Awtorizzazzjoni kkonfigurata bl-użu ssd
Iż-żewġ soluzzjonijiet jagħmlu bidliet fl-iskema Active Directory, għalhekk aħna niċċekkjaw kollox f'ambjent tat-test u mbagħad biss nagħmlu bidliet fl-infrastruttura tax-xogħol. Nixtieq ninnota li l-bidliet kollha huma mmirati u, fil-fatt, żid biss l-attributi u l-klassijiet meħtieġa.

Azzjoni 1: kontroll sudo rwoli permezz Active Directory.

Biex tespandi ċ-ċirkwit Active Directory għandek bżonn tniżżel l-aħħar rilaxx sudo — 1.8.27 mil-lum. Spakkja u kkopja l-fajl schema.ActiveDirectory mid-direttorju ./doc għall-kontrollur tad-dominju. Mil-linja tal-kmand bi drittijiet tal-amministratur mid-direttorju fejn ġie kkupjat il-fajl, mexxi:
ldifde -i -f schema.ActiveDirectory -c dc=X dc=testopf,dc=local
(Tinsiex li tissostitwixxi l-valuri tiegħek)
Miftuħ adsiedit.msc u qabbad mal-kuntest default:
Oħloq diviżjoni fl-għerq tad-dominju għaraq. (Il-bourgeoisie jsostnu b'mod iebsa li huwa f'din l-unità li d-dimonju ssd tfittxijiet għal oġġett sudoRole oġġetti. Madankollu, wara li ddawwar id-debugging dettaljat u studjat ir-zkuk, ġie żvelat li t-tfittxija saret matul is-siġra tad-direttorju kollha.)
Noħolqu l-ewwel oġġett li jappartjeni għall-klassi fid-diviżjoni sudoRole. L-isem jista' jintgħażel b'mod assolutament arbitrarju, peress li jservi biss għal identifikazzjoni konvenjenti.
Fost l-attributi disponibbli possibbli mill-estensjoni tal-iskema, dawk ewlenin huma dawn li ġejjin:

  • sudoCommand — tiddetermina liema kmandi jitħallew jiġu eżegwiti fuq il-host.
  • sudoHost — jiddetermina għal liema hosts japplika dan ir-rwol. Jista 'jiġi speċifikat bħala KOLLHA, u għal ospitanti individwali b'isem. Huwa wkoll possibbli li tuża maskra.
  • sudoUser — indika liema utenti huma permessi jeżegwixxu sudo.
    Jekk tispeċifika grupp tas-sigurtà, żid sinjal “%” fil-bidu tal-isem. Jekk hemm spazji fl-isem tal-grupp, m'hemm xejn għalfejn tinkwieta. Ġġudikati mill-zkuk, il-kompitu li jaħarbu l-ispazji huwa meħud mill-mekkaniżmu ssd.

Ir-rebbieħa tal-kompetizzjonijiet internazzjonali SSH u sudo reġgħu qegħdin fuq il-palk. Immexxi minn Distinguished Active Directory Conduttur
Fig 1. oġġetti sudoRole fis-sudoers subdiviżjoni fl-għerq tad-direttorju

Ir-rebbieħa tal-kompetizzjonijiet internazzjonali SSH u sudo reġgħu qegħdin fuq il-palk. Immexxi minn Distinguished Active Directory Conduttur
Figura 2. Sħubija fi gruppi ta' sigurtà speċifikati f'oġġetti sudoRole.

Is-setup li ġej isir fuq in-naħa tal-Linux.
Fil-fajl /etc/nsswitch.conf żid il-linja fl-aħħar tal-fajl:

sudoers: files sss

Fil-fajl /etc/sssd/sssd.conf fit-taqsima [sssd] żid mas-servizzi sudo

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

Wara l-operazzjonijiet kollha, trid tnaddaf il-cache tad-daemon sssd. Aġġornamenti awtomatiċi jseħħu kull 6 sigħat, imma għaliex għandna nistennew daqshekk meta nixtiequ issa?

sss_cache -E

Ħafna drabi jiġri li l-ikklerjar tal-cache ma jgħinx. Imbagħad nieqfu s-servizz, naddaf id-database, u nibdew is-servizz.

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

Aħna nikkonnettjaw bħala l-ewwel utent u niċċekkjaw x'inhu disponibbli għalih taħt 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

Aħna nagħmlu l-istess mat-tieni utent tagħna:

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

Dan l-approċċ jippermettilek tiddefinixxi b'mod ċentrali r-rwoli sudo għal gruppi ta 'utenti differenti.

Taħżen u tuża ċwievet ssh fl-Active Directory

B'espansjoni żgħira tal-iskema, huwa possibbli li taħżen ċwievet ssh fl-attributi tal-utent ta 'Active Directory u tużahom meta tawtorizza fuq hosts Linux.

L-awtorizzazzjoni permezz ta' sssd trid tiġi kkonfigurata.
Żid l-attribut meħtieġ billi tuża script PowerShell.
AddsshPublicKeyAttribute.ps1Funzjoni 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 = New-AttributeID
$attributi = @{
lDAPDisplayName = 'sshPublicKey';
attributeId = $oid;
oMSyntax = 22;
attributeSyntax = "2.5.5.5";
isSingleValued = $veru;
adminDescription = 'Ċavetta Pubblika tal-Utent għal login SSH';
}

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

Wara li żżid l-attribut, trid terġa 'tibda Active Directory Domain Services.
Ejja ngħaddu għall-utenti tal-Active Directory. Aħna se niġġeneraw par ewlieni għal konnessjoni ssh billi tuża kwalunkwe metodu konvenjenti għalik.
Inniedu PuttyGen, agħfas il-buttuna "Iġġenera" u b'mod frenetiku nimxu l-maws fiż-żona vojta.
Mat-tlestija tal-proċess, nistgħu niffrankaw iċ-ċwievet pubbliċi u privati, intellgħu ċ-ċavetta pubblika fl-attribut tal-utent ta 'Active Directory u ngawdu l-proċess. Madankollu, iċ-ċavetta pubblika għandha tintuża mill-"Ċavetta pubblika biex titwaħħal fil-fajl authorized_keys OpenSSH:".
Ir-rebbieħa tal-kompetizzjonijiet internazzjonali SSH u sudo reġgħu qegħdin fuq il-palk. Immexxi minn Distinguished Active Directory Conduttur
Żid iċ-ċavetta għall-attribut tal-utent.
Għażla 1 - GUI:
Ir-rebbieħa tal-kompetizzjonijiet internazzjonali SSH u sudo reġgħu qegħdin fuq il-palk. Immexxi minn Distinguished Active Directory Conduttur
Għażla 2 - PowerShell:
get-aduser user1 | set-aduser -add @{sshPublicKey = 'AAAAB...XAVnX9ZRJJ0p/Q=='}
Għalhekk, bħalissa għandna: utent bl-attribut sshPublicKey mimli, klijent Putty konfigurat għall-awtorizzazzjoni bl-użu taċ-ċwievet. Għad hemm punt żgħir: kif iġiegħel lid-daemon sshd estratt iċ-ċavetta pubblika li neħtieġu mill-attributi tal-utent. Skript żgħir li jinsab fuq l-Internet bourgeois jista 'jlaħħaq ma' dan b'suċċess.

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'

Aħna nissettjaw il-permessi fuqha għal 0500 għall-għeruq.

chmod 0500  /usr/local/bin/fetchSSHKeysFromLDAP

F'dan l-eżempju, kont amministratur jintuża biex jorbot mad-direttorju. Fil-kundizzjonijiet tal-ġlieda għandu jkun hemm kont separat b'sett minimu ta 'drittijiet.
Jien personalment kont konfuż ħafna mill-mument tal-password fil-forma pura tagħha fl-iskrittura, minkejja d-drittijiet stabbiliti.
Għażla ta 'soluzzjoni:

  • Insalva l-password f'fajl separat:
    echo -n Supersecretpassword > /usr/local/etc/secretpass

  • Issettja l-permessi tal-fajl għal 0500 għall-għeruq
    chmod 0500 /usr/local/etc/secretpass

  • Nibdlu l-parametri tat-tnedija ldapsearch: parametru -w superSecretPassword Nibdelha għal -y /usr/local/etc/secretpass

Il-korda finali fis-suite tal-lum hija l-editjar ta' sshd_config

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

Bħala riżultat, niksbu s-sekwenza li ġejja bl-awtorizzazzjoni ewlenija kkonfigurata fil-klijent ssh:

  1. L-utent jgħaqqad mas-server billi jindika l-login tiegħu.
  2. Id-daemon sshd, permezz ta' skript, jiġbed il-valur taċ-ċavetta pubblika minn attribut tal-utent f'Active Directory u jwettaq awtorizzazzjoni billi juża ċ-ċwievet.
  3. Id-daemon sssd jawtentika aktar lill-utent ibbażat fuq is-sħubija fil-grupp. Attenzjoni! Jekk dan ma jkunx ikkonfigurat, allura kwalunkwe utent tad-dominju jkollu aċċess għall-host.
  4. Meta tipprova tagħmel sudo, id-daemon sssd ifittex l-Active Directory għal rwoli. Jekk ir-rwoli huma preżenti, l-attributi tal-utent u s-sħubija fil-grupp jiġu ċċekkjati (jekk sudoRoles huwa kkonfigurat biex juża gruppi tal-utenti)

It-total.

Għalhekk, iċ-ċwievet huma maħżuna fl-attributi tal-utent ta 'Active Directory, permessi sudo - bl-istess mod, l-aċċess għal hosts Linux minn kontijiet ta' dominju jitwettaq billi tiċċekkja s-sħubija fil-grupp ta 'Active Directory.
L-aħħar mewġa tal-basket tal-konduttur - u s-sala tiffriża fis-skiet riverent.

Riżorsi użati bil-miktub:

Sudo permezz ta' Active Directory
Ċwievet Ssh permezz ta 'Active Directory
Script Powershell, li żżid attribut ma' Active Directory Schema
sudo rilaxx stabbli

Sors: www.habr.com

Żid kumment