Washindi wa mashindano ya kimataifa ya SSH na sudo wako kwenye hatua tena. Ikiongozwa na Distinguished Active Directory Conductor

Kwa kihistoria, ruhusa za sudo zilitawaliwa na yaliyomo kwenye faili kutoka /etc/sudoers.d и penda, na idhini kuu ilitekelezwa kwa kutumia ~/.ssh/authorized_keys. Hata hivyo, kadri miundombinu inavyokua, kuna hamu ya kusimamia haki hizi katikati. Leo kunaweza kuwa na chaguzi kadhaa za suluhisho:

  • Mfumo wa Usimamizi wa Usanidi - Chef, Bomba, Inawezekana, Chumvi
  • Active Directory + ssd
  • Upotoshaji mbalimbali katika mfumo wa hati na uhariri wa faili mwongozo

Kwa maoni yangu ya kibinafsi, chaguo bora kwa usimamizi wa kati bado ni mchanganyiko Active Directory + ssd. Faida za mbinu hii ni:

  • Kweli saraka moja ya kati ya mtumiaji.
  • Usambazaji wa haki sudo inakuja ili kuongeza mtumiaji kwenye kikundi maalum cha usalama.
  • Katika kesi ya mifumo mbalimbali ya Linux, inakuwa muhimu kuanzisha hundi za ziada ili kuamua OS wakati wa kutumia mifumo ya usanidi.

Suite ya leo itawekwa maalum kwa muunganisho Active Directory + ssd kwa usimamizi wa haki sudo na hifadhi SSH funguo kwenye hifadhi moja.
Kwa hiyo, ukumbi uliganda kwa ukimya wa wasiwasi, kondakta akainua kijiti chake, na orchestra ikajiandaa.
Nenda.

Imetolewa:
- Kikoa cha Saraka Inayotumika testopf.ndani kwenye Windows Server 2012 R2.
- Mwenyeji wa Linux anayeendesha Centos 7
- Uidhinishaji uliosanidiwa kwa kutumia ssd
Suluhisho zote mbili hufanya mabadiliko kwenye schema Active Directory, kwa hiyo tunaangalia kila kitu katika mazingira ya mtihani na kisha tu kufanya mabadiliko kwenye miundombinu ya kazi. Ningependa kutambua kwamba mabadiliko yote yanalenga na, kwa kweli, kuongeza tu sifa na madarasa muhimu.

Hatua ya 1: udhibiti sudo majukumu kupitia Active Directory.

Ili kupanua mzunguko Active Directory unahitaji kupakua toleo jipya zaidi sudo - 1.8.27 hadi leo. Fungua na unakili faili schema.ActiveDirectory kutoka kwa saraka ya ./doc hadi kwa kidhibiti cha kikoa. Kutoka kwa safu ya amri na haki za msimamizi kutoka kwa saraka ambapo faili ilinakiliwa, endesha:
ldifde -i -f schema.ActiveDirectory -c dc=X dc=testopf,dc=local
(Usisahau kubadilisha maadili yako)
Fungua adsiedit.msc na unganisha kwa muktadha chaguo-msingi:
Unda mgawanyiko kwenye mzizi wa kikoa sudoers. (Mabepari wanadai kwa ukaidi kwamba ni katika kitengo hiki ndipo pepo huyo ssd hutafuta kipengee sudoRole vitu. Walakini, baada ya kuwasha utatuzi wa kina na kusoma kumbukumbu, ilifunuliwa kuwa utaftaji ulifanywa katika mti mzima wa saraka.)
Tunaunda kitu cha kwanza cha darasa katika mgawanyiko sudoRole. Jina linaweza kuchaguliwa kiholela, kwani hutumika tu kwa utambulisho rahisi.
Miongoni mwa sifa zinazopatikana kutoka kwa ugani wa schema, kuu ni zifuatazo:

  • sudoCommand - huamua ni amri zipi zinazoruhusiwa kutekelezwa kwa mwenyeji.
  • sudoHost - huamua ni mwenyeji gani jukumu hili linatumika. Inaweza kutajwa kama ALL, na kwa mwenyeji binafsi kwa jina. Inawezekana pia kutumia mask.
  • sudoMtumiaji - onyesha ni watumiaji gani wanaruhusiwa kutekeleza sudo.
    Ukibainisha kikundi cha usalama, ongeza ishara "%" mwanzoni mwa jina. Ikiwa kuna nafasi katika jina la kikundi, hakuna kitu cha kuwa na wasiwasi kuhusu. Kwa kuzingatia magogo, kazi ya kukimbia nafasi inachukuliwa na utaratibu ssd.

Washindi wa mashindano ya kimataifa ya SSH na sudo wako kwenye hatua tena. Ikiongozwa na Distinguished Active Directory Conductor
Mtini 1. sudoRole vitu katika mgawanyiko wa sudoers katika mzizi wa saraka

Washindi wa mashindano ya kimataifa ya SSH na sudo wako kwenye hatua tena. Ikiongozwa na Distinguished Active Directory Conductor
Kielelezo 2. Uanachama katika vikundi vya usalama vilivyobainishwa katika vitu vya sudoRole.

Usanidi ufuatao unafanywa kwa upande wa Linux.
Katika faili /etc/nsswitch.conf ongeza mstari hadi mwisho wa faili:

sudoers: files sss

Katika faili /etc/sssd/sssd.conf katika sehemu [ssd] ongeza kwenye huduma sudo

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

Baada ya shughuli zote, unahitaji kufuta kashe ya daemon ya sssd. Masasisho ya kiotomatiki hutokea kila baada ya saa 6, lakini kwa nini tusubiri kwa muda mrefu tunapotaka sasa?

sss_cache -E

Mara nyingi hutokea kwamba kufuta cache haisaidii. Kisha tunasimamisha huduma, kusafisha hifadhidata, na kuanza huduma.

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

Tunaunganisha kama mtumiaji wa kwanza na kuangalia kile kinachopatikana kwake chini ya 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

Tunafanya vivyo hivyo na mtumiaji wetu wa pili:

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

Njia hii hukuruhusu kufafanua serikali kuu majukumu ya sudo kwa vikundi tofauti vya watumiaji.

Kuhifadhi na kutumia funguo za ssh kwenye Saraka Inayotumika

Kwa upanuzi mdogo wa mpango, inawezekana kuhifadhi vitufe vya ssh katika sifa za mtumiaji wa Saraka Inayotumika na kuzitumia wakati wa kuidhinisha kwenye wapangishi wa Linux.

Uidhinishaji kupitia sssd lazima usanidiwe.
Ongeza sifa inayohitajika kwa kutumia hati ya PowerShell.
AddsshPublicKeyAttribute.ps1Fanya Kitambulisho cha Sifa Mpya {
$Prefix="1.2.840.113556.1.8000.2554"
$GUID=[System.Guid]::NewGuid().ToString()
$Sehemu=@()
$Parts+=[UInt64]::Changanua($guid.SubString(0,4),“AllowHexSpecifier”)
$Parts+=[UInt64]::Changanua($guid.SubString(4,4),“AllowHexSpecifier”)
$Parts+=[UInt64]::Changanua($guid.SubString(9,4),“AllowHexSpecifier”)
$Parts+=[UInt64]::Changanua($guid.SubString(14,4),“AllowHexSpecifier”)
$Parts+=[UInt64]::Changanua($guid.SubString(19,4),“AllowHexSpecifier”)
$Parts+=[UInt64]::Changanua($guid.SubString(24,6),“AllowHexSpecifier”)
$Parts+=[UInt64]::Changanua($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 = Kitambulisho cha Sifa Mpya
$attributes = @{
lDAPDisplayName = 'sshPublicKey';
attributeId = $ oid;
oMSyntax = 22;
attributeSyntax = "2.5.5.5";
isSingleValued = $ true;
adminDescription = 'Ufunguo wa Umma wa Mtumiaji kwa kuingia kwa SSH';
}

Kitu kipya cha ADO -Jina sshPublicKey -Aina sifaSchema -Njia $schemapath -OtherAttributes $attributes
$userSchema = get-adobject -SearchBase $schepath -Chuja 'name -eq "user"'
$userSchema | Weka-ADObject -Ongeza @{mayContain = 'sshPublicKey'}

Baada ya kuongeza sifa, lazima uanze upya Huduma za Kikoa cha Active Directory.
Hebu tuendelee kwa watumiaji wa Active Directory. Tutatengeneza jozi muhimu kwa unganisho la ssh kwa kutumia njia yoyote inayofaa kwako.
Tunazindua PuttyGen, bonyeza kitufe cha "Tengeneza" na uhamishe kwa bidii panya ndani ya eneo tupu.
Baada ya kukamilisha mchakato, tunaweza kuhifadhi funguo za umma na za faragha, kupakia ufunguo wa umma kwa sifa ya mtumiaji wa Saraka Inayotumika na kufurahia mchakato huo. Walakini, ufunguo wa umma lazima utumike kutoka kwa "Kitufe cha umma cha kubandika kwenye faili ya OpenSSH authorized_keys:".
Washindi wa mashindano ya kimataifa ya SSH na sudo wako kwenye hatua tena. Ikiongozwa na Distinguished Active Directory Conductor
Ongeza ufunguo kwa sifa ya mtumiaji.
Chaguo 1 - GUI:
Washindi wa mashindano ya kimataifa ya SSH na sudo wako kwenye hatua tena. Ikiongozwa na Distinguished Active Directory Conductor
Chaguo la 2 - PowerShell:
get-aduser user1 | set-aduser -add @{sshPublicKey = 'AAAAB...XAVnX9ZRJJ0p/Q=='}
Kwa hivyo, kwa sasa tunayo: mtumiaji aliye na sifa ya sshPublicKey iliyojazwa, mteja wa Putty aliyesanidiwa kwa uidhinishaji kwa kutumia vitufe. Bado kuna hoja moja ndogo: jinsi ya kulazimisha daemon ya sshd kutoa ufunguo wa umma tunaohitaji kutoka kwa sifa za mtumiaji. Nakala ndogo inayopatikana kwenye mtandao wa ubepari inaweza kukabiliana na hii kwa mafanikio.

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'

Tunaweka ruhusa juu yake kwa 0500 kwa mizizi.

chmod 0500  /usr/local/bin/fetchSSHKeysFromLDAP

Katika mfano huu, akaunti ya msimamizi hutumiwa kuunganisha kwenye saraka. Katika hali ya mapigano lazima kuwe na akaunti tofauti na seti ya chini ya haki.
Mimi binafsi nilichanganyikiwa sana na wakati wa nenosiri katika fomu yake safi katika script, licha ya kuweka haki.
Chaguo la suluhisho:

  • Ninahifadhi nenosiri katika faili tofauti:
    echo -n Supersecretpassword > /usr/local/etc/secretpass

  • Niliweka ruhusa za faili kwa 0500 kwa mzizi
    chmod 0500 /usr/local/etc/secretpass

  • Kubadilisha vigezo vya uzinduzi wa ldapsearch: parameta -w superSecretPassword Ninaibadilisha kuwa -y /usr/local/etc/secretpass

Njia ya mwisho katika safu ya leo ni kuhariri sshd_config

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

Kama matokeo, tunapata mlolongo ufuatao na idhini kuu iliyosanidiwa katika mteja wa ssh:

  1. Mtumiaji huunganisha kwenye seva kwa kuonyesha kuingia kwake.
  2. Daemon ya sshd, kupitia hati, hutoa thamani ya ufunguo wa umma kutoka kwa sifa ya mtumiaji katika Active Directory na kutekeleza uidhinishaji kwa kutumia vitufe.
  3. Daemon ya sssd inathibitisha zaidi mtumiaji kulingana na uanachama wa kikundi. Makini! Ikiwa hii haijasanidiwa, basi mtumiaji yeyote wa kikoa ataweza kufikia seva pangishi.
  4. Unapojaribu sudo, sssd daemon hutafuta Active Directory kwa majukumu. Ikiwa majukumu yapo, sifa za mtumiaji na uanachama wa kikundi huangaliwa (ikiwa sudoRoles imesanidiwa kutumia vikundi vya watumiaji)

Jumla.

Kwa hivyo, funguo zimehifadhiwa katika sifa za mtumiaji wa Active Directory, ruhusa za sudo - vile vile, upatikanaji wa majeshi ya Linux na akaunti za kikoa unafanywa kwa kuangalia uanachama katika kikundi cha Active Directory.
Wimbi la mwisho la baton ya kondakta - na ukumbi hufungia kwa ukimya wa heshima.

Rasilimali zinazotumiwa katika maandishi:

Sudo kupitia Active Directory
Vifunguo vya Ssh kupitia Saraka Inayotumika
Hati ya Powershell, na kuongeza sifa kwa Active Directory Schema
kutolewa kwa sudo

Chanzo: mapenzi.com

Kuongeza maoni