Pemenang kompetisi internasional SSH sareng sudo naék deui di panggung. Dipimpin ku Distinguished Active Directory Conductor

Dina sajarahna, idin sudo diatur ku eusi file ti /etc/sudoers.d и visado, sareng otorisasi konci dilaksanakeun nganggo ~/.ssh/authorized_keys. Sanajan kitu, nalika infrastruktur tumuwuh, aya kahayang pikeun ngatur hak-hak ieu centrally. Kiwari meureun aya sababaraha pilihan solusi:

  • Sistem Manajemén Konfigurasi - sirah, Bonéka, Ansible, uyah
  • aktif Diréktori + SSD
  • Rupa-rupa perversions dina bentuk naskah jeung ngedit file manual

Dina pamadegan subjektif kuring, pilihan pangalusna pikeun manajemén terpusat masih kombinasi aktif Diréktori + SSD. Kaunggulan tina pendekatan ieu nyaéta:

  • Sabenerna hiji diréktori pamaké terpusat tunggal.
  • Distribusi hak sudo asalna handap pikeun nambahkeun pamaké ka grup kaamanan husus.
  • Dina kasus sababaraha sistem Linux, perlu pikeun ngenalkeun cek tambahan pikeun nangtukeun OS nalika nganggo sistem konfigurasi.

Suite dinten ieu bakal dikhususkeun khusus pikeun sambungan aktif Diréktori + SSD pikeun manajemén hak sudo jeung neundeun ssh konci dina gudang tunggal.
Ku kituna, aula froze dina tiiseun tegang, konduktor diangkat baton-Na, sarta orkestra geus siap.
Hayu urang.

dibikeun:
- domain Active Directory testtopf.local dina Windows Server 2012 R2.
- host Linux Ubuntu ngajalankeun Centos 7
- Otorisasina ngonpigurasikeun ngagunakeun SSD
Duanana solusi nyieun parobahan skéma aktif Diréktori, ku kituna urang pariksa sagalana dina lingkungan test na ngan lajeng jieun perobahan kana infrastruktur gawé. Abdi hoyong perhatikeun yén sadaya parobihan ditargetkeun sareng, kanyataanna, ngan ukur nambihan atribut sareng kelas anu diperyogikeun.

Tindakan 1: kontrol sudo kalungguhan ngaliwatan aktif Diréktori.

Pikeun ngalegaan sirkuit aktif Diréktori Anjeun kudu ngundeur release panganyarna sudo — 1.8.27 dinten ayeuna. Buka bungkus sareng salin filena schema.ActiveDirectory ti diréktori ./doc ka controller domain. Tina garis paréntah sareng hak administrator tina diréktori dimana file disalin, jalankeun:
ldifde -i -f schema.ActiveDirectory -c dc=X dc=testopf,dc=local
(Ulah hilap ngagantikeun nilai anjeun)
Dibuka adsiedit.msc sareng sambungkeun kana kontéks standar:
Jieun division dina akar domain kesang. (The bourgeoisie stubbornly ngaku yén dina unit ieu nu sétan SSD milarian hiji barang sudoRole objék. Nanging, saatos ngaktipkeun debugging anu lengkep sareng ngulik log, kaungkab yén panéangan dilaksanakeun sapanjang sadaya tangkal diréktori.)
Urang nyieun obyék munggaran milik kelas di division nu sudoRole. Ngaranna tiasa dipilih sacara sawenang-wenang, sabab ngan ukur dianggo pikeun idéntifikasi anu gampang.
Diantara atribut anu mungkin tina ekstensi skéma, anu utama nyaéta kieu:

  • sudoCommand - nangtukeun paréntah nu diwenangkeun pikeun dieksekusi dina host.
  • sudoHost - nangtukeun mana sarwa peran ieu manglaku ka. Bisa dieusian salaku ALL, jeung pikeun host individu ku ngaran. Éta ogé mungkin ngagunakeun masker.
  • sudoUser - nunjukkeun pangguna mana anu diidinan ngalaksanakeun sudo.
    Upami anjeun netepkeun grup kaamanan, tambahkeun tanda "%" di awal nami. Upami aya rohangan dina nami grup, teu aya anu hariwang. Ditilik ku log, tugas kabur rohangan direbut ku mékanisme SSD.

Pemenang kompetisi internasional SSH sareng sudo naék deui di panggung. Dipimpin ku Distinguished Active Directory Conductor
Gbr 1. objék sudoRole dina subdivision sudoers dina akar diréktori

Pemenang kompetisi internasional SSH sareng sudo naék deui di panggung. Dipimpin ku Distinguished Active Directory Conductor
Gambar 2. Kaanggotaan dina grup kaamanan dieusian dina objék sudoRole.

Setélan di handap ieu dilakukeun dina sisi Linux.
Dina file /etc/nsswitch.conf tambahkeun garis ka tungtung file:

sudoers: files sss

Dina file /etc/sssd/sssd.conf dina bagian [sssd] tambahkeun kana jasa sudo

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

Saatos sadaya operasi, anjeun kedah mupus cache daemon SSD. Pembaruan otomatis lumangsung unggal 6 jam, tapi naha urang kedah ngantosan lami pisan nalika urang hoyong ayeuna?

sss_cache -E

Sering kajadian yén ngabersihan cache henteu ngabantosan. Teras we ngeureunkeun jasa, ngabersihan pangkalan data, sareng ngamimitian jasa.

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

Kami nyambungkeun salaku pangguna anu munggaran sareng pariksa naon anu sayogi pikeun anjeunna dina 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

Urang lakonan hal nu sarua jeung pamaké kadua urang:

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 ieu ngamungkinkeun anjeun pikeun nangtukeun sacara sentral peran sudo pikeun grup pangguna anu béda.

Nyimpen sareng nganggo konci ssh dina Active Directory

Kalayan ékspansi sakedik tina skéma, anjeun tiasa nyimpen konci ssh dina atribut pangguna Active Directory sareng dianggo nalika otorisasi dina host Linux.

Otorisasi via SSD kudu dikonpigurasikeun.
Tambihkeun atribut anu diperyogikeun nganggo 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 = (Meunang-ADRootDSE).schemaNamingContext
$oid = New-AttributeID
$atribut = @{
lDAPDisplayName = 'sshPublicKey';
attributeId = $oid;
oMSyntax = 22;
attributeSyntax = "2.5.5.5";
isSingleValued = $ leres;
adminDescription = 'Pamaké konci umum pikeun login SSH';
}

Anyar-ADObject -Ngaran sshPublicKey -Type attributeSchema -Path $schemapath -OtherAttributes $atribut
$userSchema = get-adobject -SearchBase $schemapath -Filter 'ngaran -eq "pamaké"'
$userSchema | Set-ADObject -Tambahkeun @{mayContain = 'sshPublicKey'}

Saatos nambihan atribut, anjeun kedah ngabalikan deui Active Directory Domain Services.
Hayu urang ngaléngkah ka pamaké Active Directory. Kami bakal ngahasilkeun pasangan konci pikeun sambungan ssh nganggo metode naon waé anu cocog pikeun anjeun.
Urang ngajalankeun PuttyGen, pencét "ngahasilkeun" tombol jeung frantically mindahkeun mouse dina wewengkon kosong.
Saatos prosésna réngsé, urang tiasa nyimpen konci umum sareng swasta, unggah konci umum kana atribut pangguna Active Directory sareng nikmati prosésna. Nanging, konci umum kedah dianggo tina "Konci publik pikeun nempelkeun kana file OpenSSH authorized_keys:".
Pemenang kompetisi internasional SSH sareng sudo naék deui di panggung. Dipimpin ku Distinguished Active Directory Conductor
Tambahkeun konci kana atribut pamaké.
Pilihan 1 - GUI:
Pemenang kompetisi internasional SSH sareng sudo naék deui di panggung. Dipimpin ku Distinguished Active Directory Conductor
Pilihan 2 - PowerShell:
get-aduser user1 | set-aduser -add @{sshPublicKey = 'AAAAB...XAVnX9ZRJJ0p/Q=='}
Janten, ayeuna urang gaduh: pangguna nganggo atribut sshPublicKey anu dieusian, klien Putty anu dikonpigurasi pikeun otorisasina nganggo konci. Tetep aya hiji titik leutik: kumaha carana maksa daemon sshd nimba konci publik anu urang butuhkeun tina atribut pamaké. Aksara leutik kapanggih dina Internet borjuis bisa hasil Cope jeung ieu.

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'

Urang nyetel idin ka 0500 pikeun root.

chmod 0500  /usr/local/bin/fetchSSHKeysFromLDAP

Dina conto ieu, akun administrator dianggo pikeun ngabeungkeut diréktori. Dina kaayaan tempur kudu aya akun misah jeung set minimum hak.
Kuring pribadi éta pisan bingung ku momen sandi dina formulir murni na dina naskah, sanajan hak diatur.
Pilihan solusi:

  • Kuring nyimpen sandi dina file misah:
    echo -n Supersecretpassword > /usr/local/etc/secretpass

  • Kuring nyetél idin file ka 0500 pikeun root
    chmod 0500 /usr/local/etc/secretpass

  • Ngarobah parameter peluncuran ldapsearch: parameter -w superSecretPassword Kuring ngarobah kana -y /usr/local/etc/secretpass

The chord final dina suite dinten ieu ngédit sshd_config

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

Hasilna, urang nampi sekuen di handap ieu sareng otorisasi konci anu dikonpigurasi dina klien ssh:

  1. Pamaké nyambung ka server ku nunjukkeun login na.
  2. Daemon sshd, ngaliwatan skrip, ékstrak nilai konci publik tina atribut pamaké dina Active Directory sarta ngalakukeun otorisasina ngagunakeun kenop.
  3. The daemon sssd salajengna authenticates pamaké dumasar kana kaanggotaan grup. Perhatosan! Upami ieu henteu dikonpigurasi, maka sagala pangguna domain bakal gaduh aksés ka host.
  4. Nalika anjeun nyobian sudo, daemon sssd milarian peran di Active Directory. Upami peran aya, atribut pangguna sareng kaanggotaan grup dipariksa (upami sudoRoles dikonpigurasi nganggo grup pangguna)

Hasilna.

Ku kituna, konci disimpen dina atribut pamaké Active Directory, idin sudo - sarua, aksés ka host Linux Ubuntu ku akun domain dilaksanakeun ku mariksa kaanggotaan dina grup Active Directory.
Gelombang ahir baton konduktor - sarta aula freezes dina tiiseun reverent.

Sumberdaya anu digunakeun dina tulisan:

Sudo via Active Directory
Ssh konci via Active Directory
Aksara Powershell, nambihan atribut kana Active Directory Schema
sudo sékrési stabil

sumber: www.habr.com

Tambahkeun komentar