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
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.
Gbr 1. objék sudoRole dina subdivision sudoers dina akar diréktori
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:".
Tambahkeun konci kana atribut pamaké.
Pilihan 1 - GUI:
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:
- Pamaké nyambung ka server ku nunjukkeun login na.
- Daemon sshd, ngaliwatan skrip, ékstrak nilai konci publik tina atribut pamaké dina Active Directory sarta ngalakukeun otorisasina ngagunakeun kenop.
- 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.
- 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:
sumber: www.habr.com