Beynəlxalq SSH və sudo yarışlarının qalibləri yenidən səhnədədir. Hörmətli Active Directory Dirijoru tərəfindən idarə olunur

Tarixən sudo icazələri faylların məzmunu ilə idarə olunurdu /etc/sudoers.d и visudo, və əsas avtorizasiyadan istifadə etməklə həyata keçirilmişdir ~/.ssh/authorized_keys. Bununla belə, infrastruktur inkişaf etdikcə bu hüquqların mərkəzdən idarə olunması istəyi yaranır. Bu gün bir neçə həll variantı ola bilər:

  • Konfiqurasiya İdarəetmə Sistemi - Chef, kukla, Yoxdur, Duz
  • Active Directory + SSD
  • Skriptlər və əl ilə fayl redaktəsi şəklində müxtəlif təhriflər

Mənim subyektiv fikrimcə, mərkəzləşdirilmiş idarəetmə üçün ən yaxşı variant hələ də birləşmədir Active Directory + SSD. Bu yanaşmanın üstünlükləri aşağıdakılardır:

  • Həqiqətən tək mərkəzləşdirilmiş istifadəçi kataloqu.
  • Hüquqların bölüşdürülməsi sudo müəyyən bir təhlükəsizlik qrupuna bir istifadəçi əlavə etmək üçün gəlir.
  • Müxtəlif Linux sistemləri vəziyyətində, konfiqurasiya sistemlərindən istifadə edərkən ƏS-ni müəyyən etmək üçün əlavə yoxlamaların tətbiqi zəruri olur.

Bugünkü paket xüsusi olaraq əlaqəyə həsr olunacaq Active Directory + SSD hüquqların idarə edilməsi üçün sudo və saxlama ssh açarları bir depoda.
Beləliklə, zal gərgin sükut içində dondu, dirijor estafeti qaldırdı, orkestr hazırlaşdı.
Gedin.

Verilənlər:
— Active Directory domeni testopf.local Windows Server 2012 R2-də.
— Centos 7 ilə işləyən Linux hostu
— Konfiqurasiya edilmiş avtorizasiyadan istifadə etməklə SSD
Hər iki həll sxemdə dəyişiklik edir Active Directory, buna görə də biz hər şeyi sınaq mühitində yoxlayırıq və yalnız bundan sonra iş infrastrukturunda dəyişikliklər edirik. Qeyd etmək istərdim ki, bütün dəyişikliklər hədəflənmişdir və əslində yalnız zəruri atributlar və siniflər əlavə olunur.

Fəaliyyət 1: nəzarət sudo vasitəsilə rollar Active Directory.

Dövrəni genişləndirmək üçün Active Directory ən son buraxılışı yükləməlisiniz sudo - bu günə olan 1.8.27. Faylı paketdən çıxarın və kopyalayın schema.ActiveDirectory ./doc kataloqundan domen nəzarətçisinə. Faylın kopyalandığı qovluqdan administrator hüquqları ilə əmr satırından aşağıdakıları işə salın:
ldifde -i -f schema.ActiveDirectory -c dc=X dc=testopf,dc=local
(Dəyərlərinizi əvəz etməyi unutmayın)
Açın adsiedit.msc və standart kontekstə qoşulun:
Domenin kökündə bölmə yaradın kazak. (Burjuaziya inadla iddia edir ki, cin məhz bu bölmədədir SSD elementi axtarır sudoRole obyektlər. Bununla birlikdə, ətraflı sazlamanı işə saldıqdan və qeydləri öyrəndikdən sonra axtarışın bütün kataloq ağacı boyunca aparıldığı məlum oldu.)
Bölmədə sinfə aid olan ilk obyekti yaradırıq sudoRole. Ad tamamilə özbaşına seçilə bilər, çünki o, yalnız rahat identifikasiyaya xidmət edir.
Sxem genişləndirməsindən mümkün mövcud atributlar arasında əsas olanlar aşağıdakılardır:

  • sudoCommand — hostda hansı əmrlərin icrasına icazə verildiyini müəyyən edir.
  • sudoHost — bu rolun hansı hostlara aid olduğunu müəyyən edir. kimi təyin edilə bilər ALL, və adı ilə fərdi host üçün. Maskadan istifadə etmək də mümkündür.
  • sudoUser — hansı istifadəçilərin icrasına icazə verildiyini göstərin sudo.
    Əgər təhlükəsizlik qrupu təyin etsəniz, adın əvvəlinə “%” işarəsi əlavə edin. Qrup adında boşluqlar varsa, narahat olacaq bir şey yoxdur. Günlüklərə görə, boşluqlardan qaçmaq vəzifəsi mexanizm tərəfindən qəbul edilir SSD.

Beynəlxalq SSH və sudo yarışlarının qalibləri yenidən səhnədədir. Hörmətli Active Directory Dirijoru tərəfindən idarə olunur
Şəkil 1. kataloqun kökündəki sudoers bölməsindəki sudoRole obyektləri

Beynəlxalq SSH və sudo yarışlarının qalibləri yenidən səhnədədir. Hörmətli Active Directory Dirijoru tərəfindən idarə olunur
Şəkil 2. sudoRole obyektlərində müəyyən edilmiş təhlükəsizlik qruplarına üzvlük.

Aşağıdakı quraşdırma Linux tərəfində edilir.
Faylda /etc/nsswitch.conf faylın sonuna sətir əlavə edin:

sudoers: files sss

Faylda /etc/sssd/sssd.conf bölməsində [sssd] xidmətlərə əlavə edin sudo

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

Bütün əməliyyatlardan sonra sssd daemon önbelleğini təmizləməlisiniz. Avtomatik yeniləmələr hər 6 saatdan bir baş verir, amma indi istədiyimiz zaman niyə bu qədər gözləməliyik?

sss_cache -E

Tez-tez olur ki, önbelleği təmizləmək kömək etmir. Sonra xidməti dayandırırıq, verilənlər bazasını təmizləyirik və xidməti işə salırıq.

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

İlk istifadəçi kimi qoşuluruq və sudo altında onun üçün nəyin mövcud olduğunu yoxlayırıq:

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

İkinci istifadəçimizlə də eyni şeyi edirik:

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

Bu yanaşma müxtəlif istifadəçi qrupları üçün sudo rollarını mərkəzləşdirilmiş şəkildə müəyyən etməyə imkan verir.

Active Directory-də ssh düymələrinin saxlanması və istifadəsi

Sxemin bir qədər genişləndirilməsi ilə ssh açarlarını Active Directory istifadəçi atributlarında saxlamaq və Linux hostlarında avtorizasiya zamanı onlardan istifadə etmək mümkündür.

Sssd vasitəsilə avtorizasiya konfiqurasiya edilməlidir.
PowerShell skriptindən istifadə edərək tələb olunan atributu əlavə edin.
AddsshPublicKeyAttribute.ps1Funksiya New-AttributeID {
$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 = Yeni Atribut ID
$atributlar = @{
lDAPDisplayName = 'sshPublicKey';
attributeId = $oid;
oMSsintaksisi = 22;
attributeSyntax = "2.5.5.5";
isSingleValued = $true;
adminDescription = 'SSH girişi üçün İstifadəçi Açarı';
}

Yeni-ADObject -Ad sshPublicKey -Type attributeSchema -Path $schemapath -OtherAttributes $atributs
$userSchema = get-adobject -SearchBase $schemapath -Filtr 'ad -eq "istifadəçi"'
$userSchema | Set-ADObject -Əlavə @{mayContain = 'sshPublicKey'}

Atributu əlavə etdikdən sonra Active Directory Domain Services-i yenidən başlatmalısınız.
Keçək Active Directory istifadəçilərinə. Sizin üçün əlverişli olan istənilən metoddan istifadə edərək ssh bağlantısı üçün açar cütü yaradacağıq.
PuttyGen-i işə salırıq, "Yarat" düyməsini sıxırıq və siçanı boş sahədə çılğın şəkildə hərəkət etdiririk.
Proses başa çatdıqdan sonra biz açıq və şəxsi açarları saxlaya, açıq açarı Active Directory istifadəçi atributuna yükləyə və prosesdən həzz ala bilərik. Bununla belə, açıq açar "dan istifadə edilməlidir.OpenSSH authorized_keys faylına yapışdırmaq üçün açıq açar:".
Beynəlxalq SSH və sudo yarışlarının qalibləri yenidən səhnədədir. Hörmətli Active Directory Dirijoru tərəfindən idarə olunur
Açarı istifadəçi atributuna əlavə edin.
Seçim 1 - GUI:
Beynəlxalq SSH və sudo yarışlarının qalibləri yenidən səhnədədir. Hörmətli Active Directory Dirijoru tərəfindən idarə olunur
Seçim 2 - PowerShell:
get-aduser user1 | set-aduser -add @{sshPublicKey = 'AAAAB...XAVnX9ZRJJ0p/Q=='}
Beləliklə, hazırda bizdə var: doldurulmuş sshPublicKey atributuna malik istifadəçi, açarlardan istifadə edərək avtorizasiya üçün konfiqurasiya edilmiş Putty müştəri. Kiçik bir məqam qalır: sshd demonunu istifadəçinin atributlarından bizə lazım olan açıq açarı çıxarmağa necə məcbur etmək. Burjua İnternetində tapılan kiçik bir skript bunun öhdəsindən uğurla gələ bilər.

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'

Biz onun üzərindəki icazələri kök üçün 0500 olaraq təyin etdik.

chmod 0500  /usr/local/bin/fetchSSHKeysFromLDAP

Bu nümunədə qovluğa qoşulmaq üçün administrator hesabı istifadə olunur. Döyüş şəraitində minimum hüquqlar dəsti ilə ayrıca hesab olmalıdır.
Təyin edilmiş hüquqlara baxmayaraq, skriptdə parolun təmiz formada olması şəxsən məni çox çaşdırdı.
Çözüm seçimi:

  • Parolu ayrı bir faylda saxlayıram:
    echo -n Supersecretpassword > /usr/local/etc/secretpass

  • Kök üçün fayl icazələrini 0500-ə təyin etdim
    chmod 0500 /usr/local/etc/secretpass

  • Ldapsearch başlatma parametrlərinin dəyişdirilməsi: parametr -w superSecretPassword olaraq dəyişdirirəm -y /usr/local/etc/secretpass

Bugünkü paketin son akkordu sshd_config-i redaktə etməkdir

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

Nəticədə, ssh müştərisində konfiqurasiya edilmiş əsas avtorizasiya ilə aşağıdakı ardıcıllığı əldə edirik:

  1. İstifadəçi login göstərərək serverə qoşulur.
  2. Sshd demonu skript vasitəsilə Active Directory-dəki istifadəçi atributundan ictimai açar dəyərini çıxarır və açarlardan istifadə edərək avtorizasiya həyata keçirir.
  3. Sssd demonu qrup üzvlüyünə əsaslanaraq istifadəçini daha da təsdiqləyir. Diqqət! Bu konfiqurasiya edilmədikdə, istənilən domen istifadəçisi hosta giriş əldə edəcək.
  4. Siz sudo etməyə çalışdığınız zaman sssd demonu Active Directory-də rollar axtarır. Əgər rollar varsa, istifadəçinin atributları və qrup üzvlüyü yoxlanılır (sudoRoles istifadəçi qruplarından istifadə etmək üçün konfiqurasiya edilibsə)

Özet.

Beləliklə, açarlar Active Directory istifadəçi atributlarında, sudo icazələrində saxlanılır - oxşar şəkildə, domen hesabları ilə Linux hostlarına giriş Active Directory qrupuna üzvlük yoxlanılmaqla həyata keçirilir.
Dirijorun dəyənəyinin son dalğası - və zal ehtiramlı sükut içində donur.

Yazıda istifadə olunan mənbələr:

Active Directory vasitəsilə Sudo
Active Directory vasitəsilə Ssh düymələri
Powershell skripti, Active Directory Şemasına bir atribut əlavə edir
sudo stabil buraxılışı

Mənbə: www.habr.com

Добавить комментарий