Ganyan yo nan konpetisyon entènasyonal yo SSH ak sudo yo sou sèn ankò. Ki te dirije pa Distenge Active Directory Conductor

Istorikman, otorizasyon sudo yo te gouvène pa sa ki nan dosye soti nan /etc/sudoers.d и vizi, epi yo te pote otorizasyon kle lè l sèvi avèk ~/.ssh/authorized_keys. Sepandan, kòm enfrastrikti ap grandi, gen yon dezi pou jere dwa sa yo santralman. Jodi a ka gen plizyè opsyon solisyon:

  • Sistèm Jesyon Konfigirasyon - Chef, Mannken, Ansible, Sèl
  • Anyè aktif + ssd
  • Perversion divès kalite nan fòm lan nan scripts ak koreksyon dosye manyèl

Nan opinyon subjectif mwen, opsyon ki pi bon pou jesyon santralize se toujou yon konbinezon Anyè aktif + ssd. Avantaj ki genyen nan apwòch sa a se:

  • Se vre wi: yon sèl anyè itilizatè santralize.
  • Distribisyon dwa yo sudo vini nan ajoute yon itilizatè nan yon gwoup sekirite espesifik.
  • Nan ka divès sistèm Linux, li vin nesesè pou prezante chèk adisyonèl pou detèmine eksplwatasyon an lè w ap itilize sistèm konfigirasyon yo.

Suite jodi a pral dedye espesyalman nan koneksyon an Anyè aktif + ssd pou jesyon dwa sudo ak depo sch kle nan yon sèl depo.
Se konsa, sal la te jele nan silans tansyon, kondiktè a leve baton l ', ak òkès ​​la te pare.
Ann ale.

Etandone:
— Domèn anyè aktif testopf.local sou Windows Server 2012 R2.
- Linux lame kouri Centos 7
— Konfigirasyon otorizasyon lè l sèvi avèk ssd
Tou de solisyon fè chanjman nan chema a Anyè aktif, Se konsa, nou tcheke tout bagay nan yon anviwònman tès ak sèlman Lè sa a, fè chanjman nan enfrastrikti k ap travay la. Mwen ta renmen sonje ke tout chanjman yo vize epi, an reyalite, ajoute sèlman atribi ak klas ki nesesè yo.

Aksyon 1: kontwòl sudo wòl atravè Anyè aktif.

Pou elaji kous la Anyè aktif ou bezwen telechaje dènye lage a sudo — 1.8.27 jodi a. Depake epi kopye fichye a schema.ActiveDirectory soti nan anyè ./doc nan kontwolè domèn nan. Soti nan liy kòmand ki gen dwa administratè nan anyè kote yo te kopye fichye a, kouri:
ldifde -i -f schema.ActiveDirectory -c dc=X dc=testopf,dc=local
(Pa bliye ranplase valè ou yo)
Louvri adsiedit.msc epi konekte ak kontèks default la:
Kreye yon divizyon nan rasin domèn nan chanday. (Boujwazi a fè tèt di di ke se nan inite sa a ki demon an ssd chèche yon atik sudoRole objè yo. Sepandan, apre yo fin vire sou debogaj detaye ak etidye mòso bwa yo, li te revele ke rechèch la te fèt nan tout pyebwa anyè a.)
Nou kreye premye objè ki fè pati klas la nan divizyon an sudoRole. Non an ka chwazi absoliman abitrèman, paske li sèvi sèlman pou idantifikasyon pratik.
Pami atribi posib ki disponib nan ekstansyon chema, prensipal yo se sa ki annapre yo:

  • sudoCommand — detèmine kòmandman ki pèmèt yo egzekite sou lame a.
  • sudoHost — detèmine ki lame wòl sa a aplike a. Èske yo ka espesifye kòm TOUT, ak pou yon lame endividyèl pa non. Li posib tou pou itilize yon mask.
  • sudoUser — endike ki itilizatè yo gen dwa egzekite sudo.
    Si ou presize yon gwoup sekirite, ajoute yon siy "%" nan kòmansman non an. Si gen espas nan non gwoup la, pa gen anyen pou enkyete. Jije pa mòso bwa yo, travay la nan chape espas yo pran sou pa mekanis la ssd.

Ganyan yo nan konpetisyon entènasyonal yo SSH ak sudo yo sou sèn ankò. Ki te dirije pa Distenge Active Directory Conductor
Fig 1. objè sudoRole nan sibdivizyon sudoers nan rasin anyè a

Ganyan yo nan konpetisyon entènasyonal yo SSH ak sudo yo sou sèn ankò. Ki te dirije pa Distenge Active Directory Conductor
Figi 2. Manm nan gwoup sekirite ki espesifye nan objè sudoRole.

Se konfigirasyon sa a fè sou bò Linux.
Nan dosye /etc/nsswitch.conf ajoute liy lan nan fen dosye a:

sudoers: files sss

Nan dosye /etc/sssd/sssd.conf nan seksyon [sssd] ajoute nan sèvis yo sudo

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

Apre tout operasyon yo, ou bezwen netwaye kachèt demon sssd la. Mizajou otomatik yo fèt chak 6 èdtan, men poukisa nou ta dwe tann lontan lè nou vle li kounye a?

sss_cache -E

Li rive souvan ke netwaye kachèt la pa ede. Lè sa a, nou sispann sèvis la, netwaye baz done a, epi kòmanse sèvis la.

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

Nou konekte kòm premye itilizatè a epi tcheke sa ki disponib pou li anba 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

Nou fè menm bagay la ak dezyèm itilizatè nou an:

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

Apwòch sa a pèmèt ou defini santralman wòl sudo pou diferan gwoup itilizatè.

Sere ak itilize kle ssh nan Active Directory

Avèk yon ti ekspansyon nan konplo a, li posib pou estoke kle ssh nan atribi itilizatè Active Directory epi sèvi ak yo lè w otorize sou hôtes Linux.

Otorizasyon via sssd dwe configuré.
Ajoute atribi ki nesesè yo lè l sèvi avèk yon script PowerShell.
AddsshPublicKeyAttribute.ps1Fonksyon Nouvo-Atribi ID {
$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 = Nouvo-AtribiID
$attributes = @{
lDAPDisplayName = 'sshPublicKey';
attributeId = $oid;
oMSentaks = 22;
attributeSyntax = "2.5.5.5";
isSingleValued = $vre;
adminDescription = 'Kle piblik itilizatè pou konekte SSH';
}

Nouvo-ADObject -Non sshPublicKey -Type attributeSchema -Path $schemapath -OtherAttributes $attributes
$userSchema = get-adobject -SearchBase $schemapath -Filter 'non -eq "itilizatè"'
$userSchema | Set-ADObject -Add @{mayContain = 'sshPublicKey'}

Apre ou fin ajoute atribi a, ou dwe rekòmanse Sèvis Domèn Active Directory.
Ann ale nan itilizatè Active Directory. Nou pral jenere yon pè kle pou koneksyon ssh lè l sèvi avèk nenpòt metòd ki bon pou ou.
Nou lanse PuttyGen, peze bouton "Jenere" a epi deplase sourit la nan zòn vid la.
Lè pwosesis la fini, nou ka sove kle piblik ak prive, telechaje kle piblik la nan atribi itilizatè Active Directory epi jwi pwosesis la. Sepandan, kle piblik la dwe itilize nan "Kle piblik pou kole nan dosye OpenSSH authorized_keys:".
Ganyan yo nan konpetisyon entènasyonal yo SSH ak sudo yo sou sèn ankò. Ki te dirije pa Distenge Active Directory Conductor
Ajoute kle a nan atribi itilizatè a.
Opsyon 1 - GUI:
Ganyan yo nan konpetisyon entènasyonal yo SSH ak sudo yo sou sèn ankò. Ki te dirije pa Distenge Active Directory Conductor
Opsyon 2 - PowerShell:
get-aduser user1 | set-aduser -add @{sshPublicKey = 'AAAAB...XAVnX9ZRJJ0p/Q=='}
Se konsa, kounye a nou genyen: yon itilizatè ki gen atribi sshPublicKey ranpli, yon kliyan Putty konfigirasyon pou otorizasyon lè l sèvi avèk kle. Rete yon ti pwen: ki jan yo fòse daemon sshd la ekstrè kle piblik nou bezwen nan atribi itilizatè a. Yon ti script jwenn sou entènèt boujwa a ka fè fas ak sa a avèk siksè.

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'

Nou mete otorizasyon yo sou li a 0500 pou rasin.

chmod 0500  /usr/local/bin/fetchSSHKeysFromLDAP

Nan egzanp sa a, yo itilize yon kont administratè pou konekte ak anyè a. Nan kondisyon konba yo dwe gen yon kont separe ak yon seri minimòm dwa.
Mwen pèsonèlman te trè konfonn nan moman modpas la nan fòm pi li yo nan script la, malgre dwa yo mete.
Opsyon solisyon:

  • Mwen sove modpas la nan yon dosye separe:
    echo -n Supersecretpassword > /usr/local/etc/secretpass

  • Mwen mete otorizasyon dosye a 0500 pou rasin
    chmod 0500 /usr/local/etc/secretpass

  • Chanje paramèt lansman ldapsearch: paramèt -w superSecretPassword Mwen chanje li an -y /usr/local/etc/secretpass

Akò final la nan suite jodi a ap modifye sshd_config

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

Kòm yon rezilta, nou jwenn sekans sa a ak otorizasyon kle configuré nan kliyan ssh la:

  1. Itilizatè a konekte ak sèvè a lè li endike koneksyon li.
  2. Daemon sshd la, atravè yon script, ekstrè valè kle piblik la nan yon atribi itilizatè nan Active Directory epi fè otorizasyon lè l sèvi avèk kle yo.
  3. Daemon sssd la plis otantifye itilizatè a ki baze sou manm gwoup la. Atansyon! Si sa a pa configuré, Lè sa a, nenpòt itilizatè domèn ap gen aksè a lame a.
  4. Lè ou eseye sudo, daemon sssd la ap chèche wòl nan Anyè Aktif la. Si wòl yo prezan, atribi itilizatè a ak manm gwoup yo tcheke (si sudoRoles configuré pou itilize gwoup itilizatè)

Liy anba la.

Kidonk, kle yo estoke nan atribi itilizatè Active Directory, otorizasyon sudo - menm jan an tou, aksè a gen tout pouvwa a Linux pa kont domèn yo te pote soti nan tcheke manm nan gwoup la Active Directory.
Vag final la nan baton kondiktè a - ak sal la jele nan silans reveran.

Resous yo itilize nan ekri:

Sudo atravè Active Directory
Kle Ssh atravè Active Directory
Script Powershell, ajoute yon atribi nan Active Directory Schema
sudo stable release

Sous: www.habr.com

Add nouvo kòmantè