Hopp til innhold

SSH - الإدارة والشهادات

Skip to content

هذا نص مترجم آليًا وقد يحتوي على أخطاء!

إيقاف تسجيل الدخول عبر SSH واستخدام الشهادات

عندما يعمل تسجيل الدخول بالمفاتيح، لم يعد على الخادم قبول كلمات المرور عبر الشبكة. وهذا يمنع جميع من يحاولون تخمين كلمة المرور. في هذا القسم، تقوم بإيقاف تسجيل الدخول بكلمة مرور وتسجيل الدخول كمستخدم جذري (root) بطريقة آمنة. وفي النهاية، ترى كيف تجعل شهادات SSH إدارة الوصول إلى العديد من الخوادم أسهل.

المتطلبات المسبقة

  • يعمل تسجيل الدخول بالمفاتيح، راجع [[SSH Level 2 - مفاتيح بدلاً من كلمات المرور|SSH Level 2]].
  • المستخدم الخاص بك لديه صلاحيات sudo، راجع [[تثبيت الخادم مستوى 4 - تجهيز الخادم|جهّز الخادم]].
  • وحدة التحكم في Proxmox مفتوحة. فهي مسار الاحتياط إذا قُفل عليك الوصول عبر SSH.

تعطيل تسجيل الدخول بكلمة المرور وجذر النظام (root)

تقرأ خدمة SSH الإعدادات من ملف /etc/ssh/sshd_config ومن الملفات الموجودة في مجلد /etc/ssh/sshd_config.d/. أنشئ ملفًا خاصًا، حتى يسهل رؤية ما قمت بتغييره والتراجع عنه:

sudo nano /etc/ssh/sshd_config.d/10-sikker.conf

أدخل:

PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no

يُغلق الأمر PasswordAuthentication no المصادقة بكلمة المرور العادية. يُغلق الأمر KbdInteractiveAuthentication no أيضًا مصادقة تفاعلية عبر لوحة المفاتيح، والتي يمكنها وإلا قبول كلمات مرور من خلال PAM. ويُغلق الأمر PermitRootLogin no تسجيل دخول المستخدم الجذر (root) تمامًا.

تسري القيمة الأولى التي يقرأها الخادم على معظم إعدادات SSH. لذلك لا تتفوق ملفك تلقائيًا على الملفات الأخرى: فمكان أمر Include والإعدادات السابقة وأي كتل Match قد تؤثر على النتيجة. تحقق من القيم السارية قبل تحميل التغيير.

تحقق من الإعدادات قبل تحميلها:

sudo sshd -t

إذا لم يظهر أي تنبيه، فإن الصياغة صحيحة. راجع بعد ذلك القيم التي تنتجها الإعدادات الجديدة:

sudo sshd -T | grep -E '^(permitrootlogin|passwordauthentication|kbdinteractiveauthentication) '

يجب أن تُظهر جميع القيم الثلاث no. إذا حصلت على قيم أخرى، فتفحص ملف /etc/ssh/sshd_config والملفات التي يتضمنها قبل المتابعة. باستخدام قواعد Match، تتحقق أيضًا من الاتصال الحالي عبر الأمر sudo sshd -T -C user=user,addr=KLIENT-IP,host=KLIENTNAVN؛ استبدل القيم النموذجية باسم المستخدم وعنوان العميل واسم مضيف العميل لتسجيل الدخول الذي تختبره. قم بإجراء نفس التحقق للقيم الإعدادات الثلاثة.

عندما تكون القيم صحيحة، قُم بتحميل التغيير:

sudo systemctl reload ssh

لا تُغلق النافذة التي تم تسجيل الدخول فيها. افتح نافذة طرفية جديدة واختبر:

ssh debian-vm                 # يجب أن يعمل
ssh root@SERVER-IP            # يجب أن يُرفض
ssh -o PubkeyAuthentication=no user@SERVER-IP   # يجب أن يُرفض، بدون سؤال عن كلمة المرور

لا يزال بإمكانك استخدام كلمة المرور الخاصة بالمستخدم لـ sudo. يتم كتابتها على الخادم، وليس عبر الشبكة.

التعمق: شهادات SSH

مع وجود عشرة خوادم وخمسة مسؤولي نظام، يجب أن يكون كل مفتاح موجودًا على كل خادم. يؤدي هذا إلى وجود خمسين إدخال في ملف authorized_keys، وعندما يستقيل أحدهم، يجب إزالة المفتاح من جميع الأماكن.

باستخدام الشهادات، يوقّع مُصدر الشهادة (وحدة التصديق) مفتاحك. تثق الخوادم بوحدة التصديق وليس بكل مفتاح فردي. تحتوي الشهادة أيضًا على ما يلي:

  • المبادئ الأساسية (principals): الأسماء التي تنطبق عليها الشهادة، مثل admin
  • مدة الصلاحية: الوقت الذي تتوقف فيه الشهادة عن العمل

إعداد الخادم

تحتاج إلى المفتاح العام للجهة المصدِّقة من الشخص الذي يدير جهة التوثيق (مثل المعلم). ضعه على الخادم:

sudo nano /etc/ssh/lab_user_ca.pub

حدد أي من الجهات الفاعلة (Principals) يُسمح لها بتسجيل الدخول كمستخدم user :

sudo mkdir -p /etc/ssh/auth_principals
echo admin | sudo tee /etc/ssh/auth_principals/user

أخبر خدمة SSH عن سلطة الشهادات (CA):

sudo nano /etc/ssh/sshd_config.d/10-lab-ca.conf
TrustedUserCAKeys /etc/ssh/lab_user_ca.pub
AuthorizedPrincipalsFile /etc/ssh/auth_principals/%u

يتم استبدال %u باسم المستخدم الذي يتم تسجيل الدخول به. تحقق وثبّت الإعدادات باستخدام sudo sshd -t و sudo systemctl reload ssh.

تسجيل الدخول باستخدام الشهادة

تقع الشهادة بجوار المفتاح الخاص وتنتهي بـ-cert.pub. راجع ما تحتويه:

ssh-keygen -L -f ~/.ssh/id_ed25519-cert.pub

ابحث عن Principals وValid وSigning CA. أضف الشهادة إلى ~/.ssh/config:

The provided text does not contain any comments (lines starting with # or inline comment markers) that require translation. The content consists entirely of configuration directives which are treated as “executable” data/structure according to the constraints (“Preserve programming language, syntax…”). Therefore, no changes were made to the text.

Host debian-vm
    HostName SERVER-IP
    User user
    IdentityFile ~/.ssh/id_ed25519
    CertificateFile ~/.ssh/id_ed25519-cert.pub

الآن تقوم بتسجيل الدخول باستخدام أمر ssh debian-vm دون وجود مفتاحك في ملف authorized_keys على الخادم.

كيف يقوم مركز الشهادات بالتوقيع (للمشغّلين لمركز الشهادات)

ssh-keygen -t ed25519 -f lab_user_ca                  # أنشئ مفتاح CA مرة واحدة، واحفظه بأمان
ssh-keygen -s lab_user_ca -I elev@skolen -n admin -V +52w id_ed25519.pub

-n هو اسم المسؤول، و-V هي مدة الصلاحية، و-I معرّف يظهر في سجلات الخادم. المفتاح الخاص للسلطة المصدِّقة يمنح الوصول إلى جميع الخوادم التي تثق بها، لذلك يجب ألا يُخزَّن على أي خادم أو يُشارك أبدًا.

إذا حدث خطأ ما

  1. تم قفل حسابك عن الدخول: سجّل الدخول إلى وحدة تحكم Proxmox، احذف الملف الذي أنشأته في /etc/ssh/sshd_config.d/ وشغّل الأمر sudo systemctl reload ssh.
  2. يعطي أمر sshd -t رسالة خطأ: تُظهر الرسالة اسم الملف ورقم السطر. صحح الخطأ الإملائي قبل إعادة التحميل.
  3. يُرفض الشهادة (المفتاح): تأكد من أن المبدأ الرئيسي (principal) داخل الشهادة (باستخدام ssh-keygen -L) موجودًا في /etc/ssh/auth_principals/user، وأن الشهادة لم تنتهِ صلاحيتها. على الخادم، يُظهر الأمر sudo journalctl -u ssh -n 20 سبب رفض تسجيل الدخول.

مفاهيم مهمة

المفهوم الشرح
التعزيز الأمني (Hardening) إزالة الإعدادات والخدمات التي يمكن للمهاجم استغلالها
sshd_config.d مجلد يحتوي على ملفات إعداد مخصصة لخدمة SSH
سلطة الشهادات (CA) جهة إصدار شهادات تقوم بتوقيع المفاتيح
المبدأ الأساسي (Principal) الاسم في الشهادة الذي يحدد المستخدمين الذين يمنحه وصولاً
شهادة SSH مفتاح عام موقع من قبل سلطة شهادات، يتضمن أسماء المبادئ الأساسية ومدة الصلاحية

الفحوصات

  • يتم رفض الأمر `ssh root@SERVER-IP.
  • يتم رفض تسجيل الدخول عبر كلمة المرور باستخدام SSH.
  • يمكنك شرح سبب اختباراتك في نافذة جديدة قبل إغلاق النافذة القديمة.
  • تعميق: يمكنك شرح سبب كون شهادة التوقيع (CA) أسهل من ملف `authorized_keys على العديد من الخوادم.

المصدر: OpenSSH – sshd_config.