تاريخياً ، تم تنظيم حقوق sudo من خلال محتويات الملفات من
/etc/sudoers.d و
visudo ، وتم
إجراء تفويض رئيسي باستخدام
~ / .ssh / Author_keys . ومع ذلك ، مع نمو البنية التحتية ، هناك رغبة في إدارة هذه الحقوق بشكل مركزي. حتى الآن ، قد يكون هناك العديد من الحلول:
- نظام إدارة التكوين - الشيف ، الدمية ، Ansible ، الملح
- الدليل النشط + sssd
- تشوهات مختلفة في شكل نصوص وتحرير يدوي للملفات
في رأيي الشخصي ، فإن أفضل خيار للإدارة المركزية لا يزال مجموعة من
Active Directory +
sssd . مزايا هذا النهج هي:
- حقا دليل مستخدم مركزي واحد.
- توزيع حقوق sudo يتعلق بإضافة مستخدم إلى مجموعة أمان محددة.
- في حالة أنظمة Linux المختلفة ، هناك حاجة لإدخال اختبارات إضافية لتحديد نظام التشغيل عند استخدام أنظمة التكوين.
سيتم تخصيص مجموعة اليوم لحزمة
Active Directory +
sssd لإدارة حقوق
sudo وتخزين مفاتيح
ssh في مستودع واحد.
لذا ، تجمد الجمهور بصمت متوتر ، رفع الموصل عصاه ، أعدت الأوركسترا.
دعنا نذهب.
معين:
- المجال النشط testopf.local على نظام التشغيل Windows Server 2012 R2.
- مضيف Linux يقوم بتشغيل Centos 7
- إذن تكوين باستخدام sssd
يقوم كلا الحلين بإجراء تغييرات على
مخطط Active Directory ، لذلك نحن نتحقق من كل شيء في بيئة اختبار وبعد ذلك فقط نقوم بإجراء تغييرات على البنية التحتية للعمل. أريد أن أشير - كل التغييرات تستند إلى نقاط ، وفي الواقع ، تضيف فقط السمات والفئات اللازمة.
الخطوة 1: إدارة أدوار sudo من خلال Active Directory .
لتوسيع
مخطط Active Directory ، تحتاج إلى تنزيل أحدث إصدار
sudo - 1.8.27 اليوم. قم بفك
ضغط ، انسخ ملف
schema.ActiveDirectory من الدليل ./doc إلى وحدة تحكم المجال. من سطر الأوامر مع حقوق المسؤول من الدليل حيث قمت بنسخ الملف ، قم بتشغيل:
ldifde -i -f schema.ActiveDirectory -c dc=X dc=testopf,dc=local
(لا تنسى أن تحل محل القيم الخاصة بك)
افتح
adsiedit.msc واتصل بالسياق الافتراضي:
في جذر المجال ، قم بإنشاء وحدة
sudoers . (يجادل البرجوازيون بعناد أنه في هذا القسم الفرعي يبحث الشيطان
sssd عن كائنات
sudoRole . ومع ذلك ، بعد تشغيل التصحيح التفصيلي وفحص السجلات ، تم الكشف عن إجراء البحث في شجرة الكتالوج.)
قم
بإنشاء الكائن الأول في الوحدة التي تنتمي إلى فئة
sudoRole . يمكن اختيار الاسم بشكل تعسفي للغاية ، لأنه يخدم فقط في تحديد الهوية بسهولة.
من بين السمات المتاحة المحتملة من امتداد المخطط ، أهمها:
- sudoCommand - لتحديد الأوامر المسموح لها بالعمل على المضيف.
- sudoHost - يحدد المضيفين الذي ينطبق عليه هذا الدور. يمكن تعيينها على أنها ALL ، أو لمضيف فردي بالاسم. من الممكن أيضًا استخدام قناع.
- sudoUser - يشير إلى المستخدمين المسموح لهم بتنفيذ sudo .
إذا تم تحديد مجموعة أمان ، فأضف علامة "٪" في بداية الاسم. إذا كانت هناك مسافات في اسم المجموعة ، فلا يوجد ما يدعو للقلق. اذا حكمنا من خلال السجلات ، تأخذ آلية sssd مهمة الهروب من المساحات.
الشكل 1. كائنات sudoRole في وحدة sudoers في جذر الدليل
الشكل 2. العضوية في مجموعات الأمان المحددة في كائنات sudoRole.يتم التكوين التالي على جانب Linux.
في الملف
/etc/nsswitch.conf ، أضف السطر إلى نهاية الملف:
sudoers: files sss
في ملف
/etc/sssd/sssd.conf في المقطع
[sssd] ، أضف
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
نتصل تحت المستخدم الأول ونتحقق من أنه يمكن الوصول إليه من تحت 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 في Active Directory
مع امتداد صغير للمخطط ، من الممكن تخزين مفاتيح ssh في سمات مستخدم Active Directory واستخدامها للترخيص على مضيفي Linux.
يجب تكوين التفويض عبر sssd.
أضف السمة المطلوبة باستخدام البرنامج النصي PowerShell.
AddsshPublicKeyAttribute.ps1وظيفة جديدة AttributeID {
بادئة $ = "1.2.840.113556.1.8000.2554"
GUID = [System.Guid] :: NewGuid (). ToString ()
أجزاء $ = @ ()
$ Parts + = [UInt64] :: تحليل ($ guid.SubString (0.4) ، "AllowHexSpecifier")
$ Parts + = [UInt64] :: تحليل ($ guid.SubString (4،4) ، "AllowHexSpecifier")
$ Parts + = [UInt64] :: تحليل ($ guid.SubString (9،4) ، "AllowHexSpecifier")
$ Parts + = [UInt64] :: تحليل ($ guid.SubString (14،4) ، "AllowHexSpecifier")
$ Parts + = [UInt64] :: تحليل ($ guid.SubString (19،4) ، "AllowHexSpecifier")
$ Parts + = [UInt64] :: تحليل ($ guid.SubString (24.6) ، "AllowHexSpecifier")
$ Parts + = [UInt64] :: تحليل ($ guid.SubString (30.6) ، "AllowHexSpecifier")
$ oid = [String] :: Format ("{0}. {1}. {2}. {3}. {4}. {5}. {6}. {6}. {7}" ، بادئة $ ، $ 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' ؛
}
New-ADObject -Name sshPublicKey -Type attributeSchema -Path $ schemapath -OtherAttributes سمات $
userSchema $ = get-adobject -SearchBase $ schemapath -فلتر 'name -eq "user"'
userSchema $ Set-ADObject -Add @ {mayContain = 'sshPublicKey'}
بعد إضافة السمة ، أعد تشغيل خدمات مجال Active Directory.
نمرر لمستخدمي Active Directory. بأي طريقة مناسبة لك ، فإننا نقوم بإنشاء زوج مفاتيح للاتصال ssh.
قم بتشغيل PuttyGen ، وانقر فوق الزر "إنشاء" وانقر بشكل محموم على الماوس داخل منطقة خالية.
عند الانتهاء من العملية ، يمكننا حفظ المفاتيح العامة والخاصة ، وملء المفتاح العام في سمة مستخدم Active Directory والاستمتاع بهذه العملية. ومع ذلك ، يجب استخدام
المفتاح العمومي من نافذة "
المفتاح العام للصقه في ملف OpenSSH Author_keys: ".

أضف المفتاح إلى سمة المستخدم.
الخيار 1 - واجهة المستخدم الرسومية:

الخيار 2 - PowerShell:
get-aduser user1 | set-aduser -add @{sshPublicKey = 'AAAAB...XAVnX9ZRJJ0p/Q=='}
لذلك ، لدينا في الوقت الحالي: مستخدم بسمة sshPublicKey مملوء ، عميل معجون مكون لتخويل المفتاح. لا تزال هناك نقطة واحدة صغيرة ، وهي كيفية جعل البرنامج الخفي sshd يسحب المفتاح العام الذي نحتاجه من سمات المستخدم. هناك نص صغير موجود على المساحات المفتوحة للإنترنت البورجوازي يتكيف مع هذا بنجاح.
cat /usr/local/bin/fetchSSHKeysFromLDAP
وضعنا 0500 أذونات للجذر على ذلك.
chmod 0500 /usr/local/bin/fetchSSHKeysFromLDAP
في هذا المثال ، يتم استخدام حساب المسؤول لربط الدليل. في ظروف القتال يجب أن يكون هناك حساب منفصل مع مجموعة الحد الأدنى من الحقوق.
أنا شخصياً كنت مرتبكًا جدًا من لحظة كلمة المرور بشكلها النقي في البرنامج النصي ، على الرغم من الحقوق المنصوص عليها.
خيار الحل:
الدردشة الجماعية النهائية في مجموعة اليوم هي تحرير sshd_config
cat /etc/ssh/sshd_config | egrep -v -E "#|^$" | grep -E "AuthorizedKeysCommand|PubkeyAuthe" PubkeyAuthentication yes AuthorizedKeysCommand /usr/local/bin/fetchSSHKeysFromLDAP AuthorizedKeysCommandUser root
نتيجة لذلك ، حصلنا على التسلسل التالي من خلال مصادقة المفتاح التي تم تكوينها في عميل ssh:
- يتصل المستخدم بالخادم ، مبينا اسم المستخدم الخاص به.
- يسحب البرنامج الخفي sshd ، من خلال برنامج نصي ، قيمة المفتاح العمومي من سمة المستخدم في Active Directory ويخوّل المفاتيح.
- يصادق البرنامج الخفي sssd المستخدم على أساس عضوية المجموعة. تحذير! إذا لم يتم تكوين هذا ، فسيتمكن أي مستخدم مجال من الوصول إلى المضيف.
- عندما يحاول sudo ، يبحث البرنامج الخفي sssd في دليل Active Directory عن الأدوار. في حالة وجود أدوار ، يتم التحقق من السمات وعضوية المستخدم في المجموعة (إذا تم تكوين sudoRoles لاستخدام مجموعات المستخدمين)
يؤدي
وبالتالي ، يتم تخزين المفاتيح في سمات مستخدم Active Directory ، أذونات sudo - وبالمثل ، يتم الوصول إلى مضيفي Linux عن طريق حسابات المجال عن طريق التحقق من العضوية في مجموعة Active Directory.
الموجة الأخيرة من عصا الموصل - والقاعة تتجمد في صمت مروع.
الموارد المستخدمة في الكتابة: