الدليل الشامل لأمر add-shell في لينكس

نظرة عامة

عند إعداد بيئة سطر أوامر حديثة أو تقييد صلاحيات المستخدمين عبر سكربتات تنفيذية مخصصة، تبرز أداة add-shell كواحدة من الركائز الأساسية لإدارة بيئات تسجيل الدخول المعتمدة داخل خوادم لينكس. يستعرض هذا الدليل الآلية التشغيلية لملف التكوين /etc/shells وتكامله المباشر مع أداة chsh، مروراً بإنشاء بيئة وصول مخصصة وآمنة، وصولاً إلى إلغاء التسجيل وتطهير النظام بأمان تام عبر أداة remove-shell.

1. الأهمية الأمنية لملف /etc/shells واستعراض البيئات المعتمدة حالياً

تعتمد حزم النظام والخدمات الأمنية (مثل خوادم FTP وSSH) على السجل المرجعي /etc/shells للتحقق من شرعية برامج تسجيل الدخول الممنوحة للمستخدمين؛ حيث يمنع النظام تعيين أي واجهة صدفة عبر الأمر chsh ما لم تكن مدرجة مسبقاً داخل هذا الملف الحساس. يمكن فحص القائمة المعرفة حالياً على الخادم عبر تنفيذ cat /etc/shells:

عرض محتويات ملف etc shells

للتحقق من المسارات الثنائية الفعلية لمفسرات الأوامر الافتراضية والتأكد من مطابقتها للقائمة السابقة، نقوم بتنفيذ استعلام المسارات عبر الأمر which bash sh:

تحديد المسار الفعلي لأوامر bash و sh

تُظهر النتيجة كلاً من المسارين /usr/bin/bash و/usr/bin/sh، مما يؤكد أهليتهما للعمل كبيئات تسجيل دخول صالحة ومطابقة للسجلات الرسمية داخل /etc/shells.

2. تنصيب بيئة Zsh وتوثيق مسارها في النظام بواسطة add-shell

لتطبيق خطوات الاعتماد عملياً، نبدأ بتحديث مستودعات التوزيعة وتثبيت بيئة Zsh البديلة داخل النظام:

تثبيت حزمة zsh على نظام أوبونتو

عقب محاولة التثبيت، نتحقق من جاهزية الملف التنفيذي والمسار الكامل للصدفة الجديدة بتشغيل الأمر which zsh:

البحث عن المسار المطلق لأمر zsh

إذا لم يُرجع النظام مساراً صالحاً بسبب خطأ غير متوقع في التثبيت أو عدم توفر المسار في متغيرات البيئة، فإن التمرير المباشر لهذا الأمر داخل الصدفة سيؤدي إلى فشل وسيط الإدخال. فعند تنفيذ sudo add-shell $(which zsh) دون وسيط صحيح:

محاولة تسجيل مسار الصدفة add-shell دون وسائط صالحة

يعرض البرنامج رسالة الإرشاد التركيبية add-shell shellname منبهاً إلى غياب المسار المطلوب إدراجه.

للتأكد مما إذا كان مفسر الأوامر قد أُضيف بالفعل إلى السجلات الرسمية، نبحث داخل الملف باستخدام النمط المنتظم عبر grep -E 'zsh$' /etc/shells:

التحقق من وجود إدخال zsh داخل ملف etc shells

غياب أي مخرجات يؤكد أن zsh لم يُعتمد رسمياً بعد كواجهة تسجيل دخول صالحة داخل جدول الخادم.

3. إعداد سكربت وصول مقيد (Custom Shell) واعتماده نظامياً

في كثير من بيئات الإنتاج، يفضل مهندسو الأنظمة توجيه فئات محددة من المستخدمين إلى واجهة نصية محصورة بدلاً من منحهم صدفة أوامر كاملة. ننشئ هنا سكربت ترحيبي بسيط ونحفظه في المسار /usr/local/bin/custom-menu.sh:

إنشاء سكربت الواجهة المخصصة في usr local bin

كي يتمكن النظام من تشغيل هذا السكربت عند تسجيل الدخول، نمنحه صلاحيات التنفيذ المطلوبة بواسطة sudo chmod +x /usr/local/bin/custom-menu.sh:

تفعيل صلاحيات التشغيل التنفيذية للسكربت

لرفع هذا السكربت إلى مصاف بيئات تسجيل الدخول المعترف بها نظامياً، نعتمد مساره داخل قائمة الصدفات الموثوقة باستخدام الأمر القياسي sudo add-shell /usr/local/bin/custom-menu.sh:

اعتماد مسار السكربت المخصص عبر أمر add-shell

لقراءة الأسطر الأخيرة من ملف التكوين والتحقق من سلامة الإدراج، نطلب عرض آخر 3 سجلات عبر tail -n 3 /etc/shells:

معاينة نهاية ملف etc shells والتحقق من نجاح الإضافة

يظهر المسار /usr/local/bin/custom-menu.sh بوضوح في نهاية الملف، مما يتيح استخدامه كواجهة رسمية لحسابات المستخدمين دون أي اعتراض أمني من النظام.

4. اختبار تكامل الحسابات وتنظيف التكوينات بواسطة remove-shell

نختبر السكربت الآن بإنشاء حساب تجريبي يحمل اسم testuser وربطه بالواجهة المخصصة عبر الأمر الشرطي sudo id -u testuser >/dev/null 2>&1 || sudo useradd -m -s /usr/local/bin/custom-menu.sh testuser:

إنشاء حساب مستخدم جديد وتعيين الصدفة المخصصة له

للتأكد من تعيين مفسر الأوامر الجديد بنجاح في قاعدة بيانات المستخدمين، نستعلم عن سجل الحساب داخل ملف الهويات بواسطة grep '^testuser:' /etc/passwd:

فحص سمات المستخدم وبيئة التشغيل في etc passwd

تؤكد النتيجة ارتباط حساب testuser بالمسار المعتمد حديثاً /usr/local/bin/custom-menu.sh.

بمجرد اكتمال مرحلة التدقيق والاختبار، نبدأ في إزالة الحساب ومجلداته التابعة لتفادي تراكم الحسابات الوهمية عبر sudo userdel -r testuser 2>/dev/null || true:

حذف الحساب التجريبي مع المجلد الشخصي التابع له

لحظر استخدام هذا المسار مستقبلاً وإسقاط صلاحيته الرسمية من ملف النظام، ننفذ أداة الإلغاء القياسية sudo remove-shell /usr/local/bin/custom-menu.sh:

حذف مسار الصدفة المخصصة باستخدام remove-shell

بعد تجريد السكربت من صفته الرسمية، نحذف الملف البرمجي نفسه من قرص التخزين نهائياً عبر sudo rm -f /usr/local/bin/custom-menu.sh:

تطهير الملف التنفيذي المخصص من المسار المحلي

كخطوة نهائية للتحقق، نجري فحصاً سريعاً لملف التكوين للتأكد من خلوه تماماً من أي بقايا للمسار المحذوف بواسطة grep 'custom-menu.sh' /etc/shells || echo '등록 해제 완료':

التأكد التام من شطب المسار بنجاح من سجلات النظام

تؤكد رسالة الإشعار التلقائية نجاح عملية الشطب وتطهير السجلات بدقة.

يوفر الاعتماد على الأداتين القياسيتين add-shell وremove-shell وسيلة آلية بالغة الأمان لتحديث ملف /etc/shells دون الحاجة إلى التحرير اليدوي الذي قد يسبب أخطاء غير مقصودة في التنسيق، مما يضمن توافقاً سلساً مع أمر تعديل الحسابات chsh ويحافظ على الاستقرار الأمني لخوادم لينكس.