Pemenang kompetisi internasional SSH lan sudo ana ing panggung maneh. Dipimpin dening Distinguished Active Directory Conductor

Secara historis, ijin sudo diatur dening isi file saka /etc/sudoers.d и visado, lan wewenang kunci ditindakake nggunakake ~/.ssh/authorized_keys. Nanging, nalika infrastruktur tuwuh, ana kepinginan kanggo ngatur hak kasebut kanthi pusat. Dina iki bisa uga ana sawetara opsi solusi:

  • Sistem Manajemen Konfigurasi - sirah, Wayang, Ansible, Salt
  • Direktori aktif + ssd
  • Macem-macem perversions ing wangun script lan editing file manual

Ing mratelakake panemume subyektif, pilihan paling apik kanggo manajemen terpusat isih kombinasi Direktori aktif + ssd. Kauntungan saka pendekatan iki yaiku:

  • Pancen direktori pangguna terpusat tunggal.
  • Distribusi hak sudo teka kanggo nambah pangguna menyang grup keamanan tartamtu.
  • Ing cilik saka macem-macem sistem Linux, iku dadi perlu kanggo introduce mriksa tambahan kanggo nemtokake OS nalika nggunakake sistem konfigurasi.

Suite dina iki bakal darmabakti khusus kanggo sambungan Direktori aktif + ssd kanggo manajemen hak sudo lan panyimpenan SSH tombol ing repositori siji.
Dadi, bale beku ing kasepen tegang, kondektur ngangkat baton, lan orkestra siap.
Ayo ono.

Given:
- Domain Direktori Aktif testtopf.lokal ing Windows Server 2012 R2.
- Host Linux mlaku Centos 7
- Konfigurasi wewenang nggunakake ssd
Loro-lorone solusi nggawe owah-owahan ing skema Direktori aktif, supaya kita mriksa kabeh ing lingkungan test lan mung banjur nggawe owahan kanggo infrastruktur digunakake. Aku pengin dicathet yen kabeh owah-owahan ditargetake lan, nyatane, mung nambah atribut lan kelas sing dibutuhake.

Tindakan 1: kontrol sudo peran liwat Direktori aktif.

Kanggo nggedhekake sirkuit Direktori aktif sampeyan kudu ngundhuh release paling anyar sudo — 1.8.27 ing dina iki. Unpack lan nyalin file skema.ActiveDirectory saka direktori ./doc menyang kontroler domain. Saka baris printah kanthi hak administrator saka direktori ing ngendi file kasebut disalin, jalanake:
ldifde -i -f schema.ActiveDirectory -c dc=X dc=testopf,dc=local
(Aja lali ngganti nilai sampeyan)
Mbukak adsiedit.msc lan nyambung menyang konteks standar:
Nggawe divisi ing ROOT saka domain sweater. (Kaum borjuis nekad ngaku yen ana ing unit iki yen setan ssd nggoleki item sudoRole obyek. Nanging, sawise ngaktifake debugging rinci lan sinau log, dicethakaké telusuran ditindakake ing kabeh wit direktori.)
We nggawe obyek pisanan gadhahanipun kelas ing divisi sudoRole. Jeneng kasebut bisa dipilih kanthi sewenang-wenang, amarga mung kanggo identifikasi sing trep.
Antarane atribut sing kasedhiya saka ekstensi skema, sing utama yaiku:

  • sudoCommand - nemtokake printah sing diijini dileksanakake ing host.
  • sudoHost - nemtokake kang sarwa dumadi peran iki ditrapake kanggo. Bisa ditemtokake minangka ALL, lan kanggo host individu kanthi jeneng. Sampeyan uga bisa nggunakake topeng.
  • sudoUser - nuduhake pangguna sing diijini nglakokake sudo.
    Yen sampeyan nemtokake grup keamanan, tambahake tandha "%" ing wiwitan jeneng. Yen ana spasi ing jeneng grup, ora perlu kuwatir. Kang menehi kritik dening log, tugas kanggo uwal spasi dijupuk dening mekanisme ssd.

Pemenang kompetisi internasional SSH lan sudo ana ing panggung maneh. Dipimpin dening Distinguished Active Directory Conductor
Fig 1. obyek sudoRole ing bagean sudoers ing ROOT saka direktori

Pemenang kompetisi internasional SSH lan sudo ana ing panggung maneh. Dipimpin dening Distinguished Active Directory Conductor
Gambar 2. Keanggotaan ing grup keamanan sing ditemtokake ing obyek sudoRole.

Persiyapan ing ngisor iki ditindakake ing sisih Linux.
Ing file /etc/nsswitch.conf tambahake baris menyang mburi file:

sudoers: files sss

Ing file /etc/sssd/sssd.conf ing bagean [sssd] nambah layanan sudo

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

Sawise kabeh operasi, sampeyan kudu mbusak cache daemon sssd. Nganyari otomatis kedadeyan saben 6 jam, nanging kenapa kudu ngenteni suwe yen pengin saiki?

sss_cache -E

Asring kedadeyan yen mbusak cache ora mbantu. Banjur kita mungkasi layanan, ngresiki database, lan miwiti layanan.

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

Kita nyambung minangka pangguna pisanan lan mriksa apa sing kasedhiya kanggo dheweke ing 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

Kita nindakake perkara sing padha karo pangguna kapindho:

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

Pendekatan iki ngidini sampeyan nemtokake peran sudo kanggo macem-macem klompok pangguna.

Nyimpen lan nggunakake tombol ssh ing Active Directory

Kanthi ekspansi tipis saka skema kasebut, sampeyan bisa nyimpen kunci ssh ing atribut pangguna Active Directory lan digunakake nalika menehi wewenang ing host Linux.

Wewenang liwat sssd kudu dikonfigurasi.
Tambah atribut sing dibutuhake nggunakake skrip PowerShell.
AddsshPublicKeyAttribute.ps1Fungsi New-AttributeID {
$Prefix="1.2.840.113556.1.8000.2554"
$GUID=[System.Guid]::NewGuid().ToString()
$Bagian=@()
$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
$atribut = @{
lDAPDisplayName = 'sshPublicKey';
attributeId = $oid;
oMSyntax = 22;
attributeSyntax = "2.5.5.5";
isSingleValued = $true;
adminDescription = 'User Public key kanggo login SSH';
}

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

Sawise nambahake atribut kasebut, sampeyan kudu miwiti maneh Layanan Domain Direktori Aktif.
Ayo pindhah menyang pangguna Active Directory. Kita bakal ngasilake pasangan kunci kanggo sambungan ssh nggunakake cara apa wae sing trep kanggo sampeyan.
Kita miwiti PuttyGen, pencet tombol "Generate" lan frantically mindhah mouse ing wilayah kosong.
Sawise proses rampung, kita bisa nyimpen kunci umum lan pribadi, ngunggah kunci umum menyang atribut pangguna Active Directory lan nikmati proses kasebut. Nanging, kunci umum kudu digunakake saka "Kunci umum kanggo nempel menyang file OpenSSH authorized_keys:".
Pemenang kompetisi internasional SSH lan sudo ana ing panggung maneh. Dipimpin dening Distinguished Active Directory Conductor
Tambah tombol menyang atribut pangguna.
Pilihan 1 - GUI:
Pemenang kompetisi internasional SSH lan sudo ana ing panggung maneh. Dipimpin dening Distinguished Active Directory Conductor
Pilihan 2 - PowerShell:
get-aduser user1 | set-aduser -add @{sshPublicKey = 'AAAAB...XAVnX9ZRJJ0p/Q=='}
Dadi, saiki kita duwe: pangguna kanthi atribut sshPublicKey diisi, klien Putty sing dikonfigurasi kanggo wewenang nggunakake tombol. Ana siji titik cilik: carane meksa daemon sshd kanggo ngekstrak kunci umum sing dibutuhake saka atribut pangguna. Skrip cilik sing ditemokake ing Internet borjuis bisa kasil ngatasi iki.

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'

We nyetel ijin ing kanggo 0500 kanggo ROOT.

chmod 0500  /usr/local/bin/fetchSSHKeysFromLDAP

Ing conto iki, akun administrator digunakake kanggo ikatan menyang direktori. Ing kahanan pertempuran kudu ana akun kapisah karo set minimal hak.
Aku wong iki banget bingung dening wayahe sandi ing wangun murni ing script, senadyan hak nyetel.
Pilihan solusi:

  • Aku nyimpen sandhi ing file sing kapisah:
    echo -n Supersecretpassword > /usr/local/etc/secretpass

  • Aku nyetel ijin file kanggo 0500 kanggo root
    chmod 0500 /usr/local/etc/secretpass

  • Ngganti paramèter peluncuran ldapsearch: parameter -w superSecretPassword Aku ngganti menyang -y /usr/local/etc/secretpass

Kord pungkasan ing suite saiki yaiku nyunting sshd_config

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

Akibaté, kita entuk urutan ing ngisor iki kanthi wewenang kunci sing dikonfigurasi ing klien ssh:

  1. Pangguna nyambung menyang server kanthi nuduhake login.
  2. Daemon sshd, liwat skrip, ngekstrak nilai kunci publik saka atribut pangguna ing Active Directory lan nindakake wewenang nggunakake tombol kasebut.
  3. Daemon sssd luwih otentikasi pangguna adhedhasar anggota grup. manungsa waé! Yen iki ora dikonfigurasi, pangguna domain apa wae bakal duwe akses menyang host.
  4. Nalika sampeyan nyoba sudo, daemon sssd nggolek peran ing Direktori Aktif. Yen peran ana, atribut pangguna lan anggota grup dicenthang (yen sudoRoles dikonfigurasi kanggo nggunakake grup pangguna)

Asil asil.

Mangkono, kunci disimpen ing atribut pangguna Active Directory, ijin sudo - uga, akses menyang host Linux kanthi akun domain ditindakake kanthi mriksa keanggotaan ing grup Active Directory.
Gelombang pungkasan saka baton konduktor - lan aula beku ing kasepen reverent.

Sumber daya sing digunakake kanggo nulis:

Sudo liwat Active Directory
Tombol Ssh liwat Active Directory
Skrip Powershell, nambah atribut menyang Skema Direktori Aktif
sudo rilis stabil

Source: www.habr.com

Add a comment