I vincitori di i cuncorsi internaziunali SSH è sudo sò torna in scena. Cunducendu da un Distinguished Active Directory Conductor

Stòricamente, i permessi sudo sò stati guvernati da u cuntenutu di i schedari da /etc/sudoers.d и visu, è l'autorizazione chjave hè stata realizata usendu ~/.ssh/authorized_keys. Tuttavia, cum'è l'infrastruttura cresce, ci hè un desideriu di gestisce questi diritti in u centru. Oghje pò esse parechje scelte di suluzione:

  • Sistema di gestione di cunfigurazione - testa, Puppet, Ansible, Salt
  • Active Directory + ssd
  • Diverse perversioni in forma di scripts è editazione manuale di schedari

In a mo opinione subjectiva, a megliu opzione per a gestione centralizata hè sempre una cumminazione Active Directory + ssd. I vantaghji di stu approcciu sò:

  • Veramente un unicu repertoriu d'utilizatori centralizatu.
  • Distribuzione di diritti sudo vene à aghjunghje un utilizatore à un gruppu di sicurità specificu.
  • In u casu di diversi sistemi Linux, hè necessariu di introduci cuntrolli supplementari per determinà u SO quandu si usanu sistemi di cunfigurazione.

A suite d'oghje serà dedicata specificamente à a cunnessione Active Directory + ssd per a gestione di diritti sudo è u almacenamentu ssh chjave in un solu repository.
Allora, a sala si congelava in un silenziu tensu, u direttore alzò u so bastone, è l'orchestra si preparava.
Vai.

Dà:
- Dominiu Active Directory testopf.local in Windows Server 2012 R2.
- Host Linux chì esegue Centos 7
- Autorizazione cunfigurata usendu ssd
E duie suluzione facenu cambiamenti à u schema Active Directory, cusì cuntrollemu tuttu in un ambiente di prova è solu dopu fà cambiamenti à l'infrastruttura di travagliu. Vogliu nutà chì tutti i cambiamenti sò destinati è, in fattu, aghjunghje solu l'attributi è e classi necessarii.

Azzione 1: cuntrollu sudo roli attraversu Active Directory.

Per espansione u circuitu Active Directory avete bisognu di scaricà l'ultima versione sudo — 1.8.27 da oghje. Unpack è copia u schedariu schema.ActiveDirectory da u cartulare ./doc à u controller di duminiu. Da a linea di cummanda cù diritti di amministratore da u cartulare induve u schedariu hè statu copiatu, eseguite:
ldifde -i -f schema.ActiveDirectory -c dc=X dc=testopf,dc=local
(Ùn vi scurdate di rimpiazzà i vostri valori)
Apertu adsiedit.msc è cunnette à u cuntestu predeterminatu:
Crea una divisione à a radica di u duminiu sudatu. (A bourgeoisie dichjara custinatamente chì hè in questa unità chì u dimòniu ssd cerca un articulu sudoRole ogetti. Tuttavia, dopu avè attivatu u debugging detallatu è studià i logs, hè statu revelatu chì a ricerca hè stata realizata in tuttu l'arburu di u repertoriu.)
Creemu u primu ughjettu chì appartene à a classa in a divisione sudoRole. U nome pò esse sceltu assolutamente arbitrariamente, postu chì serve solu per una identificazione còmuda.
Trà i pussibuli attributi dispunibili da l'estensione di schema, i principali sò i seguenti:

  • sudoCommand - determina quali cumandamenti sò permessi di eseguisce nantu à l'ospite.
  • sudoHost - determina à quale host s'applica stu rolu. Pò esse specificatu cum'è ALL, è per un ospite individuale per nome. Hè ancu pussibule di utilizà una maschera.
  • sudoUser - indicà quali utilizatori sò permessi di eseguisce sudo.
    Se specificate un gruppu di sicurità, aghjunghje un signu "%" à ​​u principiu di u nome. Se ci sò spazii in u nome di u gruppu, ùn ci hè nunda di preoccupari. Ghjudicate da i logs, u compitu di scappà spazii hè pigliatu da u miccanisimu ssd.

I vincitori di i cuncorsi internaziunali SSH è sudo sò torna in scena. Cunducendu da un Distinguished Active Directory Conductor
Fig 1. sudoRole objects in a subdivision sudoers in a radica di u cartulare

I vincitori di i cuncorsi internaziunali SSH è sudo sò torna in scena. Cunducendu da un Distinguished Active Directory Conductor
Figura 2. L'appartenenza à i gruppi di sicurezza specificati in l'uggetti sudoRole.

A seguente configurazione hè fatta da u latu Linux.
In u schedariu /etc/nsswitch.conf aghjunghje a linea à a fine di u schedariu:

sudoers: files sss

In u schedariu /etc/sssd/sssd.conf in rùbbrica [sssd] aghjunghje à i servizii sudo

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

Dopu tutte l'operazioni, avete bisognu di sguassà a cache di demone sssd. L'aghjurnamenti automatichi accadenu ogni 6 ore, ma perchè duvemu aspittà tantu quandu a vulemu avà?

sss_cache -E

Succede à spessu chì sguassà u cache ùn aiuta micca. Allora fermamu u serviziu, pulite a basa di dati, è cuminciamu u serviziu.

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

Cunnettamu cum'è u primu utilizatore è verificate ciò chì hè dispunibule per ellu sottu 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

Facemu u listessu cù u nostru secondu utilizatore:

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

Stu approcciu vi permette di definisce cintrali roli sudo per diversi gruppi di utilizatori.

Memorizà è utilizendu e chjave ssh in Active Directory

Cù una ligera espansione di u schema, hè pussibule almacenà e chjave ssh in l'attributi di l'utilizatori di l'Active Directory è l'utilizanu quandu l'autorizza nantu à l'ospiti Linux.

L'autorizazione via sssd deve esse cunfigurata.
Aghjunghjite l'attributu necessariu cù un script PowerShell.
AddsshPublicKeyAttribute.ps1Funzione 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 = $true;
adminDescription = 'User Chjave publica per u login SSH';
}

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

Dopu avè aghjustatu l'attributu, duvete riavvià i servizii di duminiu di Active Directory.
Passemu à l'utilizatori di Active Directory. Generemu una coppia di chjave per a cunnessione ssh utilizendu qualsiasi metudu convenientu per voi.
Lanciamu PuttyGen, pressu u buttone "Generate" è move freneticamente u mouse in l'area viota.
À a fine di u prucessu, pudemu salvà e chjave publica è privata, caricate a chjave publica à l'attributu di l'utilizatori di Active Directory è gode di u prucessu. Tuttavia, a chjave publica deve esse usata da u "Chjave publica per incolla in OpenSSH authorized_keys file:".
I vincitori di i cuncorsi internaziunali SSH è sudo sò torna in scena. Cunducendu da un Distinguished Active Directory Conductor
Aghjunghjite a chjave à l'attributu di l'utilizatore.
Opzione 1 - GUI:
I vincitori di i cuncorsi internaziunali SSH è sudo sò torna in scena. Cunducendu da un Distinguished Active Directory Conductor
Opzione 2 - PowerShell:
get-aduser user1 | set-aduser -add @{sshPublicKey = 'AAAAB...XAVnX9ZRJJ0p/Q=='}
Dunque, avemu attualmente: un utilizatore cù l'attributu sshPublicKey cumpletu, un cliente Putty cunfiguratu per l'autorizazione cù e chjave. Ci hè un puntu pocu: cumu furzà u daemon sshd per estrattà a chjave publica chì avemu bisognu da l'attributi di l'utilizatori. Una piccula scrittura truvata nantu à l'Internet burghese pò trattà cun successu.

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'

Avemu stabilitu i permessi nantu à 0500 per root.

chmod 0500  /usr/local/bin/fetchSSHKeysFromLDAP

In questu esempiu, un contu amministratore hè utilizatu per ligà à u cartulare. In cundizioni di cummattimentu deve esse un cuntu separatu cù un settore minimu di diritti.
Personalmente era assai cunfusu da u mumentu di a password in a so forma pura in u script, malgradu i diritti stabiliti.
Opzione di soluzione:

  • Salvu a password in un schedariu separatu:
    echo -n Supersecretpassword > /usr/local/etc/secretpass

  • Aghju stabilitu i permessi di u schedariu à 0500 per root
    chmod 0500 /usr/local/etc/secretpass

  • Cambià i paràmetri di lanciu di ldapsearch: paràmetru -w superSecretPassword L'aghju cambiatu -y /usr/local/etc/secretpass

L'accordu finale in a suite d'oghje hè editendu sshd_config

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

In u risultatu, avemu a seguente sequenza cù l'autorizazione chjave cunfigurata in u cliente ssh:

  1. L'utilizatore si cunnetta à u servitore indichendu u so login.
  2. U daemon sshd, attraversu un script, estrae u valore di a chjave publica da un attributu d'utilizatore in Active Directory è eseguisce l'autorizazione cù e chjave.
  3. U daemon sssd autentifica ulteriormente l'utilizatore basatu annantu à l'appartenenza à u gruppu. Attenzione ! Se questu ùn hè micca cunfiguratu, ogni utilizatore di duminiu hà accessu à l'ospitu.
  4. Quandu pruvate à sudo, u daemon sssd cerca l'Active Directory per roli. Se i roli sò prisenti, l'attributi di l'utilizatori è l'appartenenza à u gruppu sò verificati (se sudoRoles hè cunfiguratu per utilizà gruppi d'utilizatori)

Totale.

Cusì, i chjavi sò guardati in l'attributi di l'utilizatori di l'Active Directory, i permessi sudo - in modu simili, l'accessu à l'ospiti Linux per i cunti di duminiu hè realizatu cuntrollà l'appartenenza à u gruppu Active Directory.
L'ultima onda di u bastone di u cunduttore - è a sala si congela in un silenziu riverente.

Risorse usate in scrittura:

Sudo via Active Directory
Chjavi Ssh via Active Directory
Script Powershell, aghjunghjendu un attributu à Schema Active Directory
sudo liberazione stabile

Source: www.habr.com

Add a comment