Serketiyên pêşbirkên navneteweyî yên SSH û sudo dîsa li ser dikê ne. Bi rêberiya Distinguished Active Directory Conductor

Di dîrokê de, destûrên sudo ji hêla naveroka pelan ve têne rêve kirin /etc/sudoers.d и visado, û destûrnameya sereke bi kar anîn ~/.ssh/authorized_keys. Lêbelê, her ku binesaziyek mezin dibe, xwestek heye ku van mafan bi navendî were rêvebirin. Îro dibe ku çend vebijarkên çareseriyê hebin:

  • Pergala Rêvebiriya Vesazkirinê - ser, Kejal, Ansible, Xwê
  • Dîra Active Active + ssd
  • Cûrbecûr guheztinên di forma nivîsar û guherandina pelê bi destan de

Bi dîtina min a subjektîf, vebijarka çêtirîn ji bo rêveberiya navendî hîn jî tevliheviyek e Dîra Active Active + ssd. Avantajên vê rêbazê ev in:

  • Bi rastî pelrêçek bikarhênerek navendîkirî ya yekane.
  • Belavkirina mafan sudo tê xwarê ku bikarhênerek li komek ewlehiyê ya taybetî zêde bike.
  • Di warê pergalên cihêreng ên Linux de, pêdivî ye ku meriv kontrolên din jî destnîşan bike da ku OS-ê dema ku pergalên mîhengê bikar tîne destnîşan bike.

Suite ya îro dê bi taybetî ji girêdanê re were veqetandin Dîra Active Active + ssd ji bo birêvebirina mafên sudo û depo ssh kilît di depoyek yekane de.
Ji ber vê yekê, salon di nav bêdengiyek teng de cemidî, konduktor batona xwe rakir, û orkestra amade bû.
Çûyin.

Dayîn:
- Domainê Active Directory testopf.local li ser Windows Server 2012 R2.
- Mêvandarê Linuxê ku Centos 7 dimeşîne
- Destûra mîhengkirî bi kar tîne ssd
Her du çareserî di şemayê de guhertinan dikin Dîra Active Active, ji ber vê yekê em her tiştî di hawîrdorek ceribandinê de kontrol dikin û tenê hingê di binesaziya xebatê de guhertinan çêdikin. Ez dixwazim bibînim ku hemî guhertin têne armanc kirin û, bi rastî, tenê taybetmendî û çînên pêwîst lê zêde dikin.

Çalakî 1: kontrol sudo rolên bi rêya Dîra Active Active.

Ji bo berfirehkirina dorpêçê Dîra Active Active divê hûn serbestberdana herî dawî dakêşin sudo - 1.8.27 wek îro. Pelê vekin û kopî bikin schema.ActiveDirectory ji pelrêça ./doc bigire heya kontrola domainê. Ji rêzika fermanê bi mafên rêveberê ji pelrêça ku pel lê hatî kopî kirin, bişopînin:
ldifde -i -f schema.ActiveDirectory -c dc=X dc=testopf,dc=local
(Ji bîr nekin ku nirxên xwe biguhezînin)
Vekirî adsiedit.msc û bi çarçoveya xwerû ve girêdin:
Di koka domainê de dabeşek çêbikin qeşmer. (Burjûwazî bi serhişkî îdîa dike ku di vê yekîneyê de cin e ssd li tiştekî digere sudoRole objects. Lêbelê, piştî vekirina debugkirina hûrgulî û xwendina tomaran, hate eşkere kirin ku lêgerîn li seranserê dara pelrêçê hate kirin.)
Em di dabeşkirinê de yekem tiştê ku aîdî pola ye diafirînin sudoRole. Nav dikare bêkêmasî bêkêmasî were bijartin, ji ber ku ew tenê ji bo nasnameya hêsan xizmet dike.
Di nav taybetmendiyên berdest ên gengaz ên ji dirêjkirina schema de, yên sereke ev in:

  • sudoCommand - destnîşan dike ka kîjan ferman têne destûr kirin ku li ser mêvandar bêne darve kirin.
  • sudoHost - destnîşan dike ku ev rol ji kîjan mêvandaran re derbas dibe. Dikare wekî were destnîşan kirin GIŞT, û ji bo mêvandarek kesane bi navê. Her weha gengaz e ku meriv maskek bikar bîne.
  • sudoUser - destnîşan bikin ka kîjan bikarhêner destûr didin ku bicîh bikin sudo.
    Ger hûn komek ewlehiyê diyar bikin, di destpêka nav de nîşanek "%" zêde bikin. Ger di nav navê komê de cîh hebin, tiştek ku meriv xemgîn bike tune. Li gorî têketin dadbar kirin, peywira revîna cîhan ji hêla mekanîzmayê ve tê girtin ssd.

Serketiyên pêşbirkên navneteweyî yên SSH û sudo dîsa li ser dikê ne. Bi rêberiya Distinguished Active Directory Conductor
Hêjîrê 1. tiştên sudoRole di binbeşa sudoers de di koka pelrêça de

Serketiyên pêşbirkên navneteweyî yên SSH û sudo dîsa li ser dikê ne. Bi rêberiya Distinguished Active Directory Conductor
Figure 2. Endambûna di komên ewlehiyê de ku di hêmanên sudoRole de hatine destnîşan kirin.

Sazkirina jêrîn li alîyê Linux-ê tête kirin.
Di pelê de /etc/nsswitch.conf rêzê li dawiya pelê zêde bike:

sudoers: files sss

Di pelê de /etc/sssd/ssd.conf. di beşa [sssd] xizmetên zêde bike sudo

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

Piştî hemî operasyonan, hûn hewce ne ku cache sssd daemon paqij bikin. Nûvekirinên otomatîkî her 6 demjimêran carekê çêdibin, lê dema ku em nuha dixwazin divê em çima ewqas dirêj bisekinin?

sss_cache -E

Pir caran diqewime ku paqijkirina cache ne alîkar e. Dûv re em karûbarê rawestînin, databasê paqij bikin û karûbarê dest pê bikin.

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

Em wekî bikarhênerê yekem girêdidin û kontrol dikin ka di binê sudo de çi ji wî re heye:

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

Em bi bikarhênerê xweya duyemîn re heman tiştî dikin:

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

Ev nêzîkatî dihêle hûn ji bo komên bikarhêner ên cihêreng rola sudo-ya navendî diyar bikin.

Di Active Directory de hilanîn û karanîna bişkokên ssh

Bi berfirehbûnek piçûk a nexşeyê, gengaz e ku bişkokên ssh di taybetmendiyên bikarhênerê Active Directory de hilînin û dema ku destûr didin ser mêvandarên Linux-ê wan bikar bînin.

Destûrdana bi sssd divê were mîheng kirin.
Taybetmendiya pêwîst bi karanîna skrîptek PowerShell zêde bikin.
AddsshPublicKeyAttribute.ps1Fonksiyona Nû-Taybetmendiya ID {
$Prefiks="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û-Taybetmendiya ID
$attributes = @{
lDAPDisplayName = 'sshPublicKey';
taybetmendîId = $oid;
oMSyntax = 22;
featureSyntax = "2.5.5.5";
isSingleValued = $true;
adminDescription = 'Bikarhêner Mifteya Giştî ya ji bo têketina SSH';
}

Nû-ADObject -Navê sshPublicKey -Type featuresSchema -Rê $schemapath -OtherAttributes $attributes
$userSchema = get-adobject -SearchBase $schemapath - Parzûna 'nav -eq "bikarhêner"'
$userSchema | Set-ADObject -Add @{mayContain = 'sshPublicKey'}

Piştî lê zêdekirina taybetmendiyê, divê hûn Karûbarên Domainê ya Active Directory ji nû ve bidin destpêkirin.
Ka em biçin bikarhênerên Active Directory. Em ê ji bo girêdana ssh-ê bi karanîna her rêbazek ji bo we rehet, cotek sereke çêbikin.
Em PuttyGen dest pê dikin, pêl bişkoka "Çêkirin" bikin û bi dilşikestî mişkê li qada vala digerînin.
Piştî bidawîbûna pêvajoyê, em dikarin mifteyên gelemperî û taybet hilînin, mifteya gelemperî li taybetmendiya bikarhênerê ya Active Directory bar bikin û pêvajoyê xweş bikin. Lêbelê, mifteya giştî divê ji "Mifteya gelemperî ji bo lêxistina pelê OpenSSH authorized_keys:".
Serketiyên pêşbirkên navneteweyî yên SSH û sudo dîsa li ser dikê ne. Bi rêberiya Distinguished Active Directory Conductor
Mifteyê li taybetmendiya bikarhênerê zêde bikin.
Vebijêrk 1 - GUI:
Serketiyên pêşbirkên navneteweyî yên SSH û sudo dîsa li ser dikê ne. Bi rêberiya Distinguished Active Directory Conductor
Vebijêrk 2 - PowerShell:
get-aduser user1 | set-aduser -add @{sshPublicKey = 'AAAAB...XAVnX9ZRJJ0p/Q=='}
Ji ber vê yekê, me niha heye: bikarhênerek bi taybetmendiya sshPublicKey dagirtî, xerîdarek Putty ya mîhengkirî ji bo destûrnameyê bi karanîna bişkojan. Xalek piçûk dimîne: meriv çawa zorê dide sshd daemon ku mifteya gelemperî ya ku em hewce ne ji taybetmendiyên bikarhêner derxe. Nivîsarek piçûk a ku li ser Înterneta bûrjûwazî tê dîtin dikare bi serfirazî bi vê yekê re mijûl bibe.

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'

Me destûrên li ser wê ji bo root 0500 danîn.

chmod 0500  /usr/local/bin/fetchSSHKeysFromLDAP

Di vê nimûneyê de, hesabek rêveberê tête bikar anîn ku bi pelrêçê ve girêdayî ye. Di şert û mercên şer de pêdivî ye ku hesabek veqetandî bi komek mafan re hebe.
Ez bi xwe ji dema şîfreyê di forma xweya paqij a di skrîptê de, digel ku maf hatine danîn, pir tevlihev bûm.
Vebijêrka Çareseriyê:

  • Ez şîfreyê di pelek cuda de hilînim:
    echo -n Supersecretpassword > /usr/local/etc/secretpass

  • Min ji bo root destûrên pelê 0500 danî
    chmod 0500 /usr/local/etc/secretpass

  • Guhertina pîvanên destpêkirina ldapsearch: Parametre -w superSecretPassword Ez wê biguherim -y /usr/local/etc/secretpass

Akorda dawî ya di suite ya îro de guherandina sshd_config e

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

Wekî encamek, em rêzika jêrîn bi destûrnameya sereke ya ku di muwekîlê ssh-ê de hatî mîheng kirin digirin:

  1. Bikarhêner bi nîşankirina têketina xwe bi serverê ve girêdide.
  2. Daemon sshd, bi navgîniya skrîptê de, nirxa mifteya giştî ji taybetmendiyek bikarhêner a li Pelrêça Active derdixe û bi karanîna bişkokan destûrnameyê pêk tîne.
  3. Daemon sssd bêtir bikarhêner li ser bingeha endametiya komê rast dike. Baldarî! Ger ev neyê mîheng kirin, wê hingê her bikarhênerek domainê dê bigihîje mêvandar.
  4. Dema ku hûn hewl didin ku sudo bikin, sssd daemon li Pelrêça Active ji bo rolan digere. Ger rol hebin, taybetmendiyên bikarhêner û endametiya komê têne kontrol kirin (heke sudoRoles ji bo karanîna komên bikarhêner hatî mîheng kirin)

Encam

Bi vî rengî, bişkok di taybetmendiyên bikarhênerê Active Directory, destûrên sudo de têne hilanîn - bi heman rengî, gihîştina mêvandarên Linux-ê ji hêla hesabên domainê ve bi kontrolkirina endametiya koma Active Directory ve tête kirin.
Pêla dawî ya batona konduktorê - û salon di bêdengiyek bi rûmet de dicemide.

Çavkaniyên ku di nivîsandinê de têne bikar anîn:

Sudo bi rêya Active Directory
Bişkojkên Ssh bi Active Directory
Skrîpta Powershell, taybetmendiyek li Schema Pelrêça Active zêde dike
serbestberdana stabîl sudo

Source: www.habr.com

Add a comment