SSH اور sudo کے بین الاقوامی مقابلوں کے فاتح ایک بار پھر اسٹیج پر ہیں۔ ممتاز ایکٹو ڈائریکٹری کنڈکٹر کی قیادت میں

تاریخی طور پر، sudo کی اجازتیں فائلوں کے مندرجات کے زیر انتظام تھیں۔ /etc/sudoers.d и ویڈوڈو، اور کلیدی اجازت کا استعمال کرتے ہوئے کیا گیا تھا۔ ~/.ssh/authorized_keys. تاہم، جیسے جیسے بنیادی ڈھانچہ بڑھتا ہے، ان حقوق کو مرکزی طور پر منظم کرنے کی خواہش ہوتی ہے۔ آج حل کے کئی آپشن ہو سکتے ہیں:

  • کنفیگریشن مینجمنٹ سسٹم - شیف, کٹھ پتلی, ناممکن, نمک
  • ایکٹو ڈائریکٹری + ایس ایس ڈی
  • اسکرپٹس اور دستی فائل ایڈیٹنگ کی شکل میں مختلف خرابیاں

میری ساپیکش رائے میں، مرکزی انتظام کے لیے بہترین آپشن اب بھی ایک مجموعہ ہے۔ ایکٹو ڈائریکٹری + ایس ایس ڈی. اس نقطہ نظر کے فوائد یہ ہیں:

  • واقعی ایک واحد مرکزی صارف ڈائریکٹری۔
  • حقوق کی تقسیم سودو کسی صارف کو مخصوص سیکیورٹی گروپ میں شامل کرنے کے لیے نیچے آتا ہے۔
  • مختلف لینکس سسٹمز کے معاملے میں، کنفیگریشن سسٹم استعمال کرتے وقت OS کا تعین کرنے کے لیے اضافی چیک متعارف کروانا ضروری ہو جاتا ہے۔

آج کے سویٹ کو خاص طور پر کنکشن کے لیے وقف کیا جائے گا۔ ایکٹو ڈائریکٹری + ایس ایس ڈی حقوق کے انتظام کے لیے سودو اور اسٹوریج SSH ایک ہی ذخیرہ میں چابیاں۔
چنانچہ ہال سخت خاموشی میں جم گیا، کنڈکٹر نے ڈنڈا اٹھایا اور آرکسٹرا تیار ہو گیا۔
جاؤ.

دیئے گئے:
- ایکٹو ڈائریکٹری ڈومین testopf.local ونڈوز سرور 2012 R2 پر۔
- لینکس ہوسٹ سینٹوس 7 چلا رہا ہے۔
- کا استعمال کرتے ہوئے اجازت کی ترتیب ایس ایس ڈی
دونوں حل اسکیما میں تبدیلیاں لاتے ہیں۔ ایکٹو ڈائریکٹری، لہذا ہم ہر چیز کو آزمائشی ماحول میں چیک کرتے ہیں اور تب ہی کام کرنے والے بنیادی ڈھانچے میں تبدیلیاں کرتے ہیں۔ میں نوٹ کرنا چاہوں گا کہ تمام تبدیلیوں کو ہدف بنایا گیا ہے اور درحقیقت، صرف ضروری صفات اور کلاسیں شامل کی گئی ہیں۔

ایکشن 1: کنٹرول سودو کے ذریعے کردار ایکٹو ڈائریکٹری.

سرکٹ کو بڑھانے کے لیے ایکٹو ڈائریکٹری آپ کو تازہ ترین ریلیز ڈاؤن لوڈ کرنے کی ضرورت ہے۔ سودو - 1.8.27 آج تک۔ فائل کھولیں اور کاپی کریں۔ schema.ActiveDirectory ./doc ڈائرکٹری سے ڈومین کنٹرولر تک۔ کمانڈ لائن سے ایڈمنسٹریٹر کے حقوق کے ساتھ ڈائرکٹری سے جہاں فائل کاپی کی گئی تھی، چلائیں:
ldifde -i -f schema.ActiveDirectory -c dc=X dc=testopf,dc=local
(اپنی اقدار کو تبدیل کرنا نہ بھولیں)
کھولو adsiedit.msc اور پہلے سے طے شدہ سیاق و سباق سے جڑیں:
ڈومین کی جڑ میں ایک ڈویژن بنائیں سوڈور. (بورژوازی ضد کے ساتھ دعویٰ کرتی ہے کہ اس اکائی میں شیطان ہے۔ ایس ایس ڈی ایک شے کی تلاش sudoRole اشیاء تاہم، تفصیلی ڈیبگنگ کو آن کرنے اور لاگز کا مطالعہ کرنے کے بعد، یہ انکشاف ہوا کہ تلاش پورے ڈائرکٹری کے درخت میں کی گئی تھی۔)
ہم تقسیم میں کلاس سے تعلق رکھنے والا پہلا آبجیکٹ بناتے ہیں۔ sudoRole. نام کا انتخاب بالکل من مانی طور پر کیا جا سکتا ہے، کیونکہ یہ مکمل طور پر آسان شناخت کے لیے کام کرتا ہے۔
اسکیما ایکسٹینشن سے ممکنہ دستیاب صفات میں سے، اہم مندرجہ ذیل ہیں:

  • sudoCommand - اس بات کا تعین کرتا ہے کہ میزبان پر کن کمانڈز کو انجام دینے کی اجازت ہے۔
  • sudoHost - یہ تعین کرتا ہے کہ یہ کردار کن میزبانوں پر لاگو ہوتا ہے۔ کے طور پر بیان کیا جا سکتا ہے۔ ALL، اور نام کے ذریعہ ایک انفرادی میزبان کے لئے۔ ماسک کا استعمال بھی ممکن ہے۔
  • sudoUser - اس بات کی نشاندہی کریں کہ کن صارفین کو عمل کرنے کی اجازت ہے۔ سودو.
    اگر آپ سیکیورٹی گروپ کی وضاحت کرتے ہیں تو نام کے شروع میں "%" کا نشان شامل کریں۔ اگر گروپ کے نام میں خالی جگہیں ہیں تو پریشان ہونے کی کوئی بات نہیں ہے۔ نوشتہ جات کے حساب سے، خالی جگہوں سے فرار کا کام میکانزم کے ذریعے لیا جاتا ہے۔ ایس ایس ڈی.

SSH اور sudo کے بین الاقوامی مقابلوں کے فاتح ایک بار پھر اسٹیج پر ہیں۔ ممتاز ایکٹو ڈائریکٹری کنڈکٹر کی قیادت میں
تصویر 1. ڈائرکٹری کے روٹ میں sudoers ذیلی تقسیم میں sudoRole اشیاء

SSH اور sudo کے بین الاقوامی مقابلوں کے فاتح ایک بار پھر اسٹیج پر ہیں۔ ممتاز ایکٹو ڈائریکٹری کنڈکٹر کی قیادت میں
شکل 2. sudoRole اشیاء میں مخصوص سیکورٹی گروپس میں رکنیت۔

درج ذیل سیٹ اپ لینکس کی طرف کیا گیا ہے۔
فائل میں /etc/nsswitch.conf فائل کے آخر میں لائن شامل کریں:

sudoers: files sss

فائل میں /etc/sssd/sssd.conf سیکشن میں [ایس ایس ایس ڈی] خدمات میں شامل کریں۔ سودو

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

تمام کارروائیوں کے بعد، آپ کو ایس ایس ایس ڈی ڈیمون کیشے کو صاف کرنے کی ضرورت ہے۔ خودکار اپ ڈیٹس ہر 6 گھنٹے بعد ہوتی ہیں، لیکن جب ہم ابھی یہ چاہتے ہیں تو ہم اتنا انتظار کیوں کریں؟

sss_cache -E

اکثر ایسا ہوتا ہے کہ کیشے کو صاف کرنے سے کوئی فائدہ نہیں ہوتا۔ پھر ہم سروس بند کرتے ہیں، ڈیٹا بیس کو صاف کرتے ہیں، اور سروس شروع کرتے ہیں۔

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

ہم پہلے صارف کے طور پر جڑتے ہیں اور چیک کرتے ہیں کہ 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

ہم اپنے دوسرے صارف کے ساتھ بھی ایسا ہی کرتے ہیں:

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

یہ نقطہ نظر آپ کو مختلف صارف گروپوں کے لئے مرکزی طور پر sudo کرداروں کی وضاحت کرنے کی اجازت دیتا ہے۔

ایکٹو ڈائریکٹری میں ssh کیز کو ذخیرہ کرنا اور استعمال کرنا

اسکیم کی تھوڑی سی توسیع کے ساتھ، ssh کیز کو Active Directory صارف کے انتساب میں ذخیرہ کرنا اور لینکس میزبانوں پر اجازت دیتے وقت ان کا استعمال کرنا ممکن ہے۔

ایس ایس ایس ڈی کے ذریعے اجازت کنفیگر ہونی چاہیے۔
پاور شیل اسکرپٹ کا استعمال کرتے ہوئے مطلوبہ وصف شامل کریں۔
AddsshPublicKeyAttribute.ps1فنکشن New-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])
$oid
}
$schemaPath = (Get-ADRootDSE)۔schemaNamingContext
$oid = New-AttributeID
$صفات = @{
lDAPDisplayName = 'sshPublicKey';
attributeId = $oid؛
oMSyntax = 22;
attributeSyntax = "2.5.5.5"؛
isSingleValued = $true;
adminDescription = 'SSH لاگ ان کے لیے یوزر پبلک کلید'؛
}

نیا-ADObject -نام sshPublicKey -Type attributeSchema -Path $schemapath -OtherAttributes $attributes
$userSchema = get-adobject -SearchBase $schemapath -Filter 'name -eq "user"'
$userSchema | سیٹ ADObject - @{mayContain = 'sshPublicKey'} شامل کریں

انتساب شامل کرنے کے بعد، آپ کو ایکٹو ڈائریکٹری ڈومین سروسز کو دوبارہ شروع کرنا ہوگا۔
آئیے ایکٹو ڈائریکٹری صارفین کی طرف چلتے ہیں۔ ہم آپ کے لیے آسان کسی بھی طریقے کا استعمال کرتے ہوئے ssh کنکشن کے لیے ایک کلیدی جوڑا تیار کریں گے۔
ہم PuttyGen لانچ کرتے ہیں، "جنریٹ" کے بٹن کو دبائیں اور ماؤس کو خالی جگہ میں گھمائیں۔
عمل کی تکمیل کے بعد، ہم عوامی اور نجی کلیدوں کو محفوظ کر سکتے ہیں، عوامی کلید کو ایکٹو ڈائریکٹری صارف کے انتساب میں اپ لوڈ کر سکتے ہیں اور عمل سے لطف اندوز ہو سکتے ہیں۔ تاہم، عوامی کلید کا استعمال "OpenSSH authorized_keys فائل میں چسپاں کرنے کے لیے عوامی کلید:".
SSH اور sudo کے بین الاقوامی مقابلوں کے فاتح ایک بار پھر اسٹیج پر ہیں۔ ممتاز ایکٹو ڈائریکٹری کنڈکٹر کی قیادت میں
صارف کی خصوصیت میں کلید شامل کریں۔
آپشن 1 - GUI:
SSH اور sudo کے بین الاقوامی مقابلوں کے فاتح ایک بار پھر اسٹیج پر ہیں۔ ممتاز ایکٹو ڈائریکٹری کنڈکٹر کی قیادت میں
آپشن 2 - پاور شیل:
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 ڈیمون، ایک اسکرپٹ کے ذریعے، ایکٹو ڈائرکٹری میں صارف کے انتساب سے عوامی کلید کی قدر نکالتا ہے اور کیز کا استعمال کرتے ہوئے اجازت دیتا ہے۔
  3. ایس ایس ایس ڈی ڈیمون گروپ ممبرشپ کی بنیاد پر صارف کی مزید تصدیق کرتا ہے۔ توجہ! اگر یہ کنفیگر نہیں ہے، تو کسی بھی ڈومین صارف کو میزبان تک رسائی حاصل ہوگی۔
  4. جب آپ sudo کرنے کی کوشش کرتے ہیں تو، sssd ڈیمون کرداروں کے لیے ایکٹو ڈائریکٹری کو تلاش کرتا ہے۔ اگر کردار موجود ہیں تو، صارف کے اوصاف اور گروپ کی رکنیت کی جانچ پڑتال کی جاتی ہے (اگر sudoRoles کو صارف گروپوں کو استعمال کرنے کے لیے ترتیب دیا گیا ہے)

نتیجہ

اس طرح، چابیاں ایکٹو ڈائریکٹری صارف کی خصوصیات، سوڈو اجازتوں میں محفوظ کی جاتی ہیں - اسی طرح، ڈومین اکاؤنٹس کے ذریعے لینکس ہوسٹس تک رسائی ایکٹو ڈائریکٹری گروپ میں رکنیت کی جانچ کرکے کی جاتی ہے۔
کنڈکٹر کی لاٹھی کی آخری لہر - اور ہال عقیدت بھری خاموشی میں جم گیا۔

تحریری طور پر استعمال ہونے والے وسائل:

سوڈو ایکٹو ڈائریکٹری کے ذریعے
ایکٹو ڈائریکٹری کے ذریعے Ssh کیز
پاورشیل اسکرپٹ، ایکٹو ڈائرکٹری اسکیما میں ایک وصف شامل کرنا
sudo مستحکم رہائی

ماخذ: www.habr.com

نیا تبصرہ شامل کریں