Mae enillwyr y cystadlaethau rhyngwladol SSH a sudo ar y llwyfan eto. Dan arweiniad yr Arweinydd Cyfeiriadur Gweithredol Nodedig

Yn hanesyddol, roedd caniatâd sudo yn cael ei reoli gan gynnwys ffeiliau o /etc/sudoers.d и fideo, a gwnaed awdurdodiad allweddol gan ddefnyddio ~/.ssh/authorized_keys. Fodd bynnag, wrth i seilwaith dyfu, mae awydd i reoli’r hawliau hyn yn ganolog. Heddiw efallai y bydd sawl opsiwn datrysiad:

  • System Rheoli Cyfluniad - cogydd, pyped, Ateb, Halen
  • Active Directory + ssd
  • Gwyrdroadau amrywiol ar ffurf sgriptiau a golygu ffeiliau â llaw

Yn fy marn oddrychol, mae'r opsiwn gorau ar gyfer rheolaeth ganolog yn dal i fod yn gyfuniad Active Directory + ssd. Mae manteision y dull hwn fel a ganlyn:

  • Yn wir, un cyfeiriadur defnyddiwr canolog.
  • Dosbarthu hawliau sudo yn dod i lawr i ychwanegu defnyddiwr at grŵp diogelwch penodol.
  • Yn achos systemau Linux amrywiol, mae'n dod yn angenrheidiol i gyflwyno gwiriadau ychwanegol i bennu'r OS wrth ddefnyddio systemau ffurfweddu.

Bydd swît heddiw yn cael ei neilltuo'n benodol i'r cysylltiad Active Directory + ssd ar gyfer rheoli hawliau sudo a storio ssh allweddi mewn un ystorfa.
Felly, rhewodd y neuadd mewn distawrwydd tyn, cododd yr arweinydd ei faton, a pharatoodd y gerddorfa.
Ewch.

Wedi'i roi:
— Parth Active Directory testopf.lleol ar Windows Server 2012 R2.
— Gwesteiwr Linux yn rhedeg Centos 7
— Awdurdodiad wedi'i ffurfweddu gan ddefnyddio ssd
Mae'r ddau ddatrysiad yn gwneud newidiadau i'r sgema Active Directory, felly rydym yn gwirio popeth mewn amgylchedd prawf a dim ond wedyn yn gwneud newidiadau i'r seilwaith gweithio. Hoffwn nodi bod yr holl newidiadau wedi’u targedu ac, mewn gwirionedd, yn ychwanegu dim ond y priodoleddau a’r dosbarthiadau angenrheidiol.

Gweithred 1: rheoli sudo rolau drwodd Active Directory.

I ehangu'r gylched Active Directory mae angen i chi lawrlwytho'r datganiad diweddaraf sudo — 1.8.27 hyd heddyw. Dadbacio a chopïo'r ffeil sgema.ActiveDirectory o'r cyfeiriadur ./doc i'r rheolydd parth. O'r llinell orchymyn gyda hawliau gweinyddwr o'r cyfeiriadur lle copïwyd y ffeil, rhedwch:
ldifde -i -f schema.ActiveDirectory -c dc=X dc=testopf,dc=local
(Peidiwch ag anghofio amnewid eich gwerthoedd)
Ar agor adsiedit.msc a chysylltu â'r cyd-destun diofyn:
Creu rhaniad wrth wraidd y parth sudoers. (Mae'r bourgeoisie yn ystyfnig yn honni mai yn yr uned hon y mae'r cythraul ssd yn chwilio am eitem sudoRole gwrthrychau. Fodd bynnag, ar ôl troi dadfygio manwl ymlaen ac astudio'r boncyffion, datgelwyd bod y chwiliad wedi'i wneud trwy'r goeden cyfeiriadur gyfan.)
Rydyn ni'n creu'r gwrthrych cyntaf sy'n perthyn i'r dosbarth yn y rhaniad sudoRole. Gellir dewis yr enw yn hollol fympwyol, gan ei fod yn gwasanaethu ar gyfer adnabod cyfleus yn unig.
Ymhlith y priodoleddau posibl sydd ar gael o'r estyniad sgema, y ​​prif rai yw'r canlynol:

  • sudoCommand - yn pennu pa orchmynion y caniateir eu gweithredu ar y gwesteiwr.
  • sudoHost — yn pennu i ba westeion y mae'r rôl hon yn berthnasol. Gellir ei nodi fel POB, ac ar gyfer gwesteiwr unigol wrth ei enw. Mae hefyd yn bosibl defnyddio mwgwd.
  • sudoUser — nodwch pa ddefnyddwyr y caniateir iddynt weithredu sudo.
    Os ydych yn nodi grŵp diogelwch, ychwanegwch arwydd “%” ar ddechrau'r enw. Os oes bylchau yn enw'r grŵp, does dim byd i boeni amdano. A barnu yn ôl y boncyffion, mae'r dasg o ddianc o ofodau yn cael ei gymryd drosodd gan y mecanwaith ssd.

Mae enillwyr y cystadlaethau rhyngwladol SSH a sudo ar y llwyfan eto. Dan arweiniad yr Arweinydd Cyfeiriadur Gweithredol Nodedig
Ffig 1. gwrthrychau sudoRole yn yr israniad sudoers yng ngwraidd y cyfeiriadur

Mae enillwyr y cystadlaethau rhyngwladol SSH a sudo ar y llwyfan eto. Dan arweiniad yr Arweinydd Cyfeiriadur Gweithredol Nodedig
Ffigur 2. Aelodaeth mewn grwpiau diogelwch a nodir mewn gwrthrychau sudoRole.

Gwneir y gosodiad canlynol ar ochr Linux.
Mewn ffeil /etc/nsswitch.conf ychwanegwch y llinell at ddiwedd y ffeil:

sudoers: files sss

Mewn ffeil /etc/sssd/sssd.conf yn adran [ssd] ychwanegu at wasanaethau sudo

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

Ar ôl yr holl weithrediadau, mae angen i chi glirio'r storfa daemon sssd. Mae diweddariadau awtomatig yn digwydd bob 6 awr, ond pam ddylem ni aros cyhyd pan rydyn ni ei eisiau nawr?

sss_cache -E

Mae'n aml yn digwydd nad yw clirio'r storfa yn helpu. Yna rydyn ni'n atal y gwasanaeth, yn glanhau'r gronfa ddata, ac yn dechrau'r gwasanaeth.

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

Rydym yn cysylltu fel y defnyddiwr cyntaf ac yn gwirio beth sydd ar gael iddo o dan 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

Rydyn ni'n gwneud yr un peth gyda'n hail ddefnyddiwr:

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

Mae'r dull hwn yn caniatáu ichi ddiffinio rolau sudo yn ganolog ar gyfer gwahanol grwpiau defnyddwyr.

Storio a defnyddio bysellau ssh yn Active Directory

Gydag ehangiad bach o'r cynllun, mae'n bosibl storio bysellau ssh mewn priodoleddau defnyddiwr Active Directory a'u defnyddio wrth awdurdodi ar westeion Linux.

Rhaid ffurfweddu awdurdodiad trwy sssd.
Ychwanegwch y priodoledd gofynnol gan ddefnyddio sgript PowerShell.
AddsshPublicKeyAttribute.ps1Swyddogaeth New-PritributeID {
$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 = ID Priodoledd Newydd
$attributes = @{
lDAPDisplayName = 'sshPublicKey';
attributeId = $oid;
oMSyntax = 22;
attributeSyntax = "2.5.5.5";
isSingleValued = $true;
adminDescription = 'Allwedd Gyhoeddus Defnyddiwr ar gyfer mewngofnodi SSH';
}

Newydd-ADObject -Enw sshPublicKey -Type attributeSchema -Path $schemapath -OtherAttributes $attributes
$userSchema = get-adobject -SearchBase $schemapath -Filter 'name -eq "user"'
$userSchema | Set-ADObject -Add @{mayContain = 'sshPublicKey'}

Ar ôl ychwanegu'r priodoledd, rhaid i chi ailgychwyn Active Directory Domain Services.
Gadewch i ni symud ymlaen i ddefnyddwyr Active Directory. Byddwn yn cynhyrchu pâr allweddol ar gyfer cysylltiad ssh gan ddefnyddio unrhyw ddull sy'n gyfleus i chi.
Rydym yn lansio PuttyGen, pwyswch y botwm “Cynhyrchu” a symud y llygoden yn wyllt o fewn yr ardal wag.
Ar ôl cwblhau'r broses, gallwn arbed yr allweddi cyhoeddus a phreifat, llwytho'r allwedd gyhoeddus i briodwedd defnyddiwr Active Directory a mwynhau'r broses. Fodd bynnag, rhaid defnyddio'r allwedd gyhoeddus o'r "Allwedd gyhoeddus ar gyfer ei gludo i ffeil OpenSSH awdurdodedig_keys:".
Mae enillwyr y cystadlaethau rhyngwladol SSH a sudo ar y llwyfan eto. Dan arweiniad yr Arweinydd Cyfeiriadur Gweithredol Nodedig
Ychwanegwch yr allwedd i briodwedd y defnyddiwr.
Opsiwn 1 - GUI:
Mae enillwyr y cystadlaethau rhyngwladol SSH a sudo ar y llwyfan eto. Dan arweiniad yr Arweinydd Cyfeiriadur Gweithredol Nodedig
Opsiwn 2 - PowerShell:
get-aduser user1 | set-aduser -add @{sshPublicKey = 'AAAAB...XAVnX9ZRJJ0p/Q=='}
Felly, ar hyn o bryd mae gennym: ddefnyddiwr gyda'r priodoledd sshPublicKey wedi'i lenwi, cleient Putty wedi'i ffurfweddu i'w awdurdodi gan ddefnyddio allweddi. Erys un pwynt bach: sut i orfodi'r ellyll sshd i dynnu'r allwedd gyhoeddus sydd ei hangen arnom o briodoleddau'r defnyddiwr. Gall sgript fach a geir ar y Rhyngrwyd bourgeois ymdopi'n llwyddiannus â hyn.

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'

Rydym yn gosod y caniatâd arno i 0500 ar gyfer gwraidd.

chmod 0500  /usr/local/bin/fetchSSHKeysFromLDAP

Yn yr enghraifft hon, defnyddir cyfrif gweinyddwr i rwymo i'r cyfeiriadur. Mewn amodau ymladd rhaid cael cyfrif ar wahân gydag isafswm set o hawliau.
Roeddwn i'n bersonol wedi fy nrysu'n fawr gan eiliad y cyfrinair yn ei ffurf pur yn y sgript, er gwaethaf yr hawliau a osodwyd.
Opsiwn datrysiad:

  • Rwy'n cadw'r cyfrinair mewn ffeil ar wahân:
    echo -n Supersecretpassword > /usr/local/etc/secretpass

  • Gosodais ganiatadau ffeil i 0500 ar gyfer gwraidd
    chmod 0500 /usr/local/etc/secretpass

  • Newid paramedrau lansio ldapsearch: paramedr -w superSecretPassword Rwy'n ei newid i -y /usr/local/etc/secretpass

Y cord olaf yn y gyfres heddiw yw golygu sshd_config

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

O ganlyniad, rydym yn cael y dilyniant canlynol gydag awdurdodiad allweddol wedi'i ffurfweddu yn y cleient ssh:

  1. Mae'r defnyddiwr yn cysylltu â'r gweinydd trwy nodi ei fewngofnodi.
  2. Mae'r daemon sshd, trwy sgript, yn tynnu'r gwerth allwedd cyhoeddus o briodwedd defnyddiwr yn Active Directory ac yn perfformio awdurdodiad gan ddefnyddio'r bysellau.
  3. Mae'r daemon sssd yn dilysu'r defnyddiwr ymhellach yn seiliedig ar aelodaeth grŵp. Sylw! Os nad yw hyn wedi'i ffurfweddu, yna bydd gan unrhyw ddefnyddiwr parth fynediad i'r gwesteiwr.
  4. Pan geisiwch sudo, mae'r daemon sssd yn chwilio'r Active Directory am rolau. Os oes rolau yn bresennol, mae priodoleddau'r defnyddiwr ac aelodaeth grŵp yn cael eu gwirio (os yw sudoRoles wedi'i ffurfweddu i ddefnyddio grwpiau defnyddwyr)

Y canlyniad.

Felly, mae'r allweddi'n cael eu storio mewn priodoleddau defnyddwyr Active Directory, caniatâd sudo - yn yr un modd, mae mynediad i westeion Linux trwy gyfrifon parth yn cael ei wneud trwy wirio aelodaeth yn y grŵp Active Directory.
Y don olaf o faton yr arweinydd - a'r neuadd yn rhewi mewn tawelwch parchedig.

Adnoddau a ddefnyddir yn ysgrifenedig:

Sudo trwy Active Directory
Allweddi Ssh trwy Active Directory
Sgript Powershell, gan ychwanegu priodoledd at Sgema Active Directory
rhyddhau sefydlog sudo

Ffynhonnell: hab.com

Ychwanegu sylw