بين الاقوامي مقابلن جا فاتح SSH ۽ سودو ٻيهر اسٽيج تي آهن. ممتاز ايڪٽو ڊائريڪٽري ڪنڊڪٽر جي اڳواڻي ۾

تاريخي طور تي، sudo اجازتون فائلن جي مواد جي ذريعي سنڀاليندا هئا /etc/sudoers.d и ويدودو، ۽ اهم اختيار استعمال ڪيو ويو ~/.ssh/authorized_keys. بهرحال، جيئن انفراسٽرڪچر وڌي ٿو، اتي انهن حقن کي مرڪزي طور تي منظم ڪرڻ جي خواهش آهي. اڄ اتي ڪيترن ئي حل اختيارن ٿي سگهي ٿو:

  • ڪنفيگريشن مينيجمينٽ سسٽم - سر, بيوقوف, ناھي, لوڻ
  • فعال ڊاريڪٽري + ايس ايس ڊي آهي
  • اسڪرپٽ ۽ دستي فائل ايڊيٽنگ جي صورت ۾ مختلف خرابيون

منهنجي موضوعي راء ۾، مرڪزي انتظام لاء بهترين اختيار اڃا تائين هڪ ميلاپ آهي فعال ڊاريڪٽري + ايس ايس ڊي آهي. ھن طريقي جا فائدا آھن:

  • واقعي هڪ واحد مرڪزي صارف ڊاريڪٽري.
  • حقن جي ورڇ sudo هيٺ اچي ٿو صارف کي شامل ڪرڻ لاءِ مخصوص سيڪيورٽي گروپ ۾.
  • مختلف لينڪس سسٽم جي صورت ۾، اهو ضروري آهي ته او ايس کي طئي ڪرڻ لاء اضافي چيڪ متعارف ڪرايو وڃي جڏهن ترتيب واري نظام کي استعمال ڪندي.

اڄ جو سوٽ خاص طور تي ڪنيڪشن لاء وقف ڪيو ويندو فعال ڊاريڪٽري + ايس ايس ڊي آهي حقن جي انتظام لاء sudo ۽ اسٽوريج ssh هڪ واحد مخزن ۾ ڪنجيون.
سو، هال سخت خاموشيءَ ۾ ڦاٽي پيو، ڪنڊڪٽر پنهنجو لٺ وڌو، ۽ آرڪيسٽرا تيار ٿي ويو.
وڃ.

ڏنو ويو:
- فعال ڊاريڪٽري ڊومين testopf.local ونڊوز سرور 2012 R2 تي.
- لينڪس ميزبان هلائيندڙ Centos 7
- ترتيب ڏنل اختيار استعمال ڪندي ايس ايس ڊي آهي
ٻئي حل اسڪيما ۾ تبديليون آڻيندا آھن فعال ڊاريڪٽري، تنهنڪري اسان امتحان واري ماحول ۾ هر شي کي چيڪ ڪريون ٿا ۽ صرف پوءِ ڪم ڪندڙ انفراسٽرڪچر ۾ تبديليون آڻيون. مان نوٽ ڪرڻ چاهيان ٿو ته سڀئي تبديليون حدف ٿيل آهن ۽ حقيقت ۾، صرف ضروري خاصيتون ۽ طبقن کي شامل ڪريو.

عمل 1: ڪنٽرول sudo جي ذريعي ڪردار فعال ڊاريڪٽري.

سرڪٽ کي وڌائڻ لاء فعال ڊاريڪٽري توهان کي تازو رليز ڊائون لوڊ ڪرڻ جي ضرورت آهي sudo - 1.8.27 اڄ تائين. فائل کوليو ۽ ڪاپي ڪريو schema.ActiveDirectory ./doc ڊاريڪٽري کان ڊومين ڪنٽرولر ڏانهن. ڊاريڪٽري مان ايڊمنسٽريٽر جي حقن سان ڪمانڊ لائين مان جتي فائل ڪاپي ڪئي وئي، ھلايو:
ldifde -i -f schema.ActiveDirectory -c dc=X dc=testopf,dc=local
(پنهنجي قدرن کي متبادل ڪرڻ نه وساريو)
کليل adsiedit.msc ۽ ڊفالٽ حوالي سان ڳنڍيو:
ڊومين جي روٽ تي هڪ ڊويزن ٺاهيو سويڊنگ. (بورجوازي ضد سان دعويٰ ڪري ٿو ته هن يونٽ ۾ ئي شيطان آهي ايس ايس ڊي آهي هڪ شيءِ ڳولي ٿو sudoRole شيون. بهرحال، تفصيلي ڊيبگنگ کي چالو ڪرڻ ۽ لاگز جي مطالعي کان پوء، اهو ظاهر ٿيو ته ڳولا سڄي ڊاريڪٽري جي وڻ ۾ ڪئي وئي هئي.)
اسان ڊويزن ۾ طبقي سان تعلق رکندڙ پهريون اعتراض ٺاهيندا آهيون sudoRole. نالو بلڪل بي ترتيب طور چونڊيو وڃي ٿو، ڇاڪاڻ ته اهو صرف آسان سڃاڻپ لاء ڪم ڪري ٿو.
اسڪيما جي توسيع مان ممڪن موجود خاصيتن مان، مکيه هيٺيان آهن:

  • sudoCommand - اهو طئي ڪري ٿو ته ڪهڙن حڪمن کي ميزبان تي عمل ڪرڻ جي اجازت آهي.
  • sudoHost - اهو طئي ڪري ٿو ته هي ڪردار ڪهڙي ميزبان تي لاڳو ٿئي ٿو. جي طور تي بيان ڪري سگهجي ٿو سڀني، ۽ نالي سان هڪ انفرادي ميزبان لاءِ. اهو پڻ ممڪن آهي ماسڪ استعمال ڪرڻ.
  • sudo استعمال ڪندڙ - ظاھر ڪيو ته ڪھڙين صارفين کي عمل ڪرڻ جي اجازت آھي sudo.
    جيڪڏهن توهان هڪ سيڪيورٽي گروپ جي وضاحت ڪريو ٿا، نالو جي شروعات ۾ "%" نشاني شامل ڪريو. جيڪڏهن گروپ جي نالي ۾ خال آهن، پريشان ٿيڻ جي ڪا به ڳالهه ناهي. لاگن جي حساب سان، خلا کان بچڻ جو ڪم ميڪانيزم جي حوالي ڪيو ويو آهي ايس ايس ڊي آهي.

بين الاقوامي مقابلن جا فاتح SSH ۽ سودو ٻيهر اسٽيج تي آهن. ممتاز ايڪٽو ڊائريڪٽري ڪنڊڪٽر جي اڳواڻي ۾
تصوير 1. ڊائريڪٽري جي روٽ ۾ sudoers ذيلي تقسيم ۾ sudoRole شيون

بين الاقوامي مقابلن جا فاتح SSH ۽ سودو ٻيهر اسٽيج تي آهن. ممتاز ايڪٽو ڊائريڪٽري ڪنڊڪٽر جي اڳواڻي ۾
شڪل 2. سيڪيورٽي گروپن ۾ رڪنيت جو بيان ڪيل sudoRole آبجیکٹ ۾.

هيٺ ڏنل سيٽ اپ لينڪس جي پاسي تي ڪيو ويو آهي.
فائل ۾ /etc/nsswitch.conf فائل جي آخر ۾ لائن شامل ڪريو:

sudoers: files sss

فائل ۾ /etc/sssd/sssd.conf سيڪشن ۾ [ايس ايس ايس ڊي] خدمتن ۾ شامل ڪريو sudo

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

سڀني عملن کان پوء، توهان کي صاف ڪرڻو پوندو sssd ڊيمون ڪيش. خودڪار تازه ڪاريون هر 6 ڪلاڪن ۾ ٿينديون آهن، پر اسان کي ايترو انتظار ڇو گهرجي جڏهن اسان اهو چاهيون ٿا؟

sss_cache -E

اهو اڪثر ڪري ٿو ته ڪيش صاف ڪرڻ ۾ مدد نه ڪندو آهي. پوء اسان خدمت کي روڪيو، ڊيٽابيس کي صاف ڪريو، ۽ خدمت شروع ڪريو.

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

اسان پهرين صارف طور ڳنڍيون ٿا ۽ چيڪ ڪريو ته ڇا هن وٽ موجود آهي سودو تحت:

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

اسان اسان جي ٻئي استعمال ڪندڙ سان ساڳيو ڪم ڪندا آهيون:

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

اهو طريقو توهان کي مرڪزي طور تي وضاحت ڪرڻ جي اجازت ڏئي ٿو سودو ڪردار مختلف صارف گروپن لاءِ.

فعال ڊاريڪٽري ۾ ssh ڪيز کي محفوظ ڪرڻ ۽ استعمال ڪرڻ

اسڪيم جي ٿورڙي توسيع سان، اهو ممڪن آهي ssh ڪيز کي محفوظ ڪرڻ لاءِ Active Directory صارف جي خاصيتن ۾ ۽ انهن کي استعمال ڪريو جڏهن لينڪس هوسٽس تي اختيار ڏيڻ.

ايس ايس ايس ڊي جي ذريعي اختيار کي ترتيب ڏيڻ لازمي آهي.
PowerShell اسڪرپٽ استعمال ڪندي گهربل وصف شامل ڪريو.
AddsshPublicKeyAttribute.ps1فنڪشن نئون-AttributeID {
$Prefix="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])
ڊالر
}
$schemaPath = (Get-ADRootDSE).schemaNamingContext
$oid = نئون-AttributeID
$صفات = @{
lDAPDisplayName = 'sshPublicKey';
attributeId = $oid؛
oMSyntax = 22؛
attributeSyntax = "2.5.5.5"؛
isSingleValued = $true؛
adminDescription = 'User Public key for SSH لاگ ان'؛
}

نئون-ADObject-نالو sshPublicKey-Type attributeSchema-Path $schemapath-OtherAttributes $attributes
$userSchema = get-adobject -SearchBase $schemapath -Filter 'name -eq "user"'
$userSchema | سيٽ-ADObject-شامل @{mayContain = 'sshPublicKey'}

وصف شامل ڪرڻ کان پوء، توهان کي ٻيهر شروع ڪرڻو پوندو Active Directory Domain Services.
اچو ته هلون فعال ڊائريڪٽري استعمال ڪندڙن ڏانهن. اسان ssh ڪنيڪشن لاءِ هڪ اهم جوڙو ٺاهينداسين جيڪو توهان لاءِ آسان طريقو استعمال ڪندي.
اسان PuttyGen لانچ ڪيو، "پيدا ڪريو" جي بٽڻ کي دٻايو ۽ مائوس کي خالي علائقي جي اندر منتقل ڪيو.
عمل جي مڪمل ٿيڻ تي، اسان عوامي ۽ خانگي چابيون محفوظ ڪري سگھون ٿا، عوامي ڪيئي کي Active Directory user انتساب تي اپلوڊ ڪري سگھون ٿا ۽ عمل مان لطف اندوز ٿي سگھون ٿا. جڏهن ته، عوامي ڪيئي استعمال ٿيڻ گهرجي "OpenSSH authorized_keys فائل ۾ پيسٽ ڪرڻ لاءِ عوامي ڪي:".
بين الاقوامي مقابلن جا فاتح SSH ۽ سودو ٻيهر اسٽيج تي آهن. ممتاز ايڪٽو ڊائريڪٽري ڪنڊڪٽر جي اڳواڻي ۾
استعمال ڪندڙ جي خصوصيت جي ڪنجي کي شامل ڪريو.
آپشن 1 - GUI:
بين الاقوامي مقابلن جا فاتح SSH ۽ سودو ٻيهر اسٽيج تي آهن. ممتاز ايڪٽو ڊائريڪٽري ڪنڊڪٽر جي اڳواڻي ۾
آپشن 2 - PowerShell:
get-aduser user1 | set-aduser -add @{sshPublicKey = 'AAAAB...XAVnX9ZRJJ0p/Q=='}
تنهن ڪري، اسان وٽ هن وقت آهي: هڪ صارف جنهن ۾ sshPublicKey وصف ڀريو ويو آهي، هڪ ترتيب ڏنل Putty ڪلائنٽ ڪنجيون استعمال ڪندي اختيار ڪرڻ لاءِ. اتي ھڪڙو ننڍڙو نقطو رھي ٿو: sshd ڊيمن کي ڪيئن مجبور ڪجي عوامي ڪني کي ڪڍڻ لاءِ جيڪو اسان کي صارف جي خاصيتن مان گھربل آھي. بورجوا انٽرنيٽ تي مليو هڪ ننڍڙو اسڪرپٽ ڪاميابي سان هن کي منهن ڏئي سگهي ٿو.

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'

اسان ان تي اجازتون مقرر ڪيون ٿا 0500 روٽ لاءِ.

chmod 0500  /usr/local/bin/fetchSSHKeysFromLDAP

هن مثال ۾، هڪ منتظم اڪائونٽ ڊاريڪٽري کي پابند ڪرڻ لاء استعمال ڪيو ويندو آهي. جنگي حالتن ۾، گھٽ ۾ گھٽ حقن جي سيٽ سان ھڪڙو الڳ اڪائونٽ ھئڻ گھرجي.
مان ذاتي طور تي ڪافي پريشان ٿي چڪو هوس پاسورڊ جي لمحن سان ان جي خالص روپ ۾ اسڪرپٽ ۾، حق مقرر ڪرڻ جي باوجود.
حل جو آپشن:

  • مون پاسورڊ کي الڳ فائل ۾ محفوظ ڪيو:
    echo -n Supersecretpassword > /usr/local/etc/secretpass

  • مون روٽ لاءِ فائل جي اجازت 0500 تي سيٽ ڪئي
    chmod 0500 /usr/local/etc/secretpass

  • تبديل ڪرڻ ldapsearch لانچ پيٽرولر: پيرا ميٽر -w سپر سيڪريٽ پاسورڊ مان ان کي تبديل ڪريان ٿو -y/usr/local/etc/secretpass

اڄ جي سوٽ ۾ آخري ڪردار sshd_config کي ايڊٽ ڪري رهيو آهي

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

نتيجي طور، اسان ssh ڪلائنٽ ۾ ترتيب ڏنل اهم اختيار سان ھيٺ ڏنل ترتيب حاصل ڪندا آھيون:

  1. استعمال ڪندڙ پنهنجي لاگ ان کي ظاهر ڪندي سرور سان ڳنڍيندو آهي.
  2. sshd ڊيمون، هڪ اسڪرپٽ ذريعي، عوامي ڪيئي قدر ڪڍي ٿو صارف جي خاصيت مان Active Directory ۾ ۽ ڪنجي کي استعمال ڪندي اختيار کي انجام ڏئي ٿو.
  3. ايس ايس ايس ڊي ڊيمون وڌيڪ تصديق ڪري ٿو صارف کي گروپ رڪنيت جي بنياد تي. ڌيان! جيڪڏهن اهو ترتيب نه ڏنو ويو آهي، پوء ڪنهن به ڊومين استعمال ڪندڙ کي ميزبان تائين رسائي هوندي.
  4. جڏهن توهان sudo ڪرڻ جي ڪوشش ڪندا، sssd ڊيمون ڪردارن لاءِ فعال ڊاريڪٽري ڳولهي ٿو. جيڪڏهن ڪردار موجود آهن، صارف جون خاصيتون ۽ گروپ رڪنيت جي جانچ ڪئي وئي آهي (جيڪڏهن sudoRoles صارف گروپن کي استعمال ڪرڻ لاء ترتيب ڏنل آهي)

هيٺين لائن.

اهڙيءَ طرح، چاٻيون محفوظ ڪيون وينديون آهن Active Directory User attributes، sudo permissions - ساڳيءَ طرح، ڊومين اڪائونٽس ذريعي لينڪس هوسٽس تائين رسائي ايڪٽو ڊاريڪٽري گروپ ۾ رڪنيت جي جانچ ڪندي ڪئي ويندي آهي.
ڪنڊڪٽر جي لاٺيءَ جي آخري لهر - ۽ هال خاموشيءَ سان منجمد ٿي ويو.

لکڻ ۾ استعمال ٿيل وسيلا:

Sudo ذريعي فعال ڊاريڪٽري
فعال ڊاريڪٽري ذريعي Ssh ڪنجيون
پاور شيل اسڪرپٽ، ايڪٽو ڊاريڪٽري اسڪيما ۾ هڪ خاصيت شامل ڪندي
sudo مستحڪم ڇڏڻ

جو ذريعو: www.habr.com

تبصرو شامل ڪريو