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
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.
Fig 1. sudoRole objects in a subdivision sudoers in a radica di u cartulare
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:".
Aghjunghjite a chjave à l'attributu di l'utilizatore.
Opzione 1 - GUI:
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:
- L'utilizatore si cunnetta à u servitore indichendu u so login.
- 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.
- 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.
- 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:
Source: www.habr.com