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

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

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

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

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

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

غياب أي مخرجات يؤكد أن zsh لم يُعتمد رسمياً بعد كواجهة تسجيل دخول صالحة داخل جدول الخادم.
3. إعداد سكربت وصول مقيد (Custom Shell) واعتماده نظامياً
في كثير من بيئات الإنتاج، يفضل مهندسو الأنظمة توجيه فئات محددة من المستخدمين إلى واجهة نصية محصورة بدلاً من منحهم صدفة أوامر كاملة. ننشئ هنا سكربت ترحيبي بسيط ونحفظه في المسار /usr/local/bin/custom-menu.sh:

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

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

لقراءة الأسطر الأخيرة من ملف التكوين والتحقق من سلامة الإدراج، نطلب عرض آخر 3 سجلات عبر tail -n 3 /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:

تؤكد النتيجة ارتباط حساب testuser بالمسار المعتمد حديثاً /usr/local/bin/custom-menu.sh.
بمجرد اكتمال مرحلة التدقيق والاختبار، نبدأ في إزالة الحساب ومجلداته التابعة لتفادي تراكم الحسابات الوهمية عبر sudo userdel -r testuser 2>/dev/null || true:

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

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

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

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