كيفية تقييد مستخدمي SSH بمجلدات محددة في أوبونتو 24.04

أفضل طريقة لتقييد وصول مستخدمي SSH إلى دليل محدد على نظام Ubuntu 24.04 هي استخدام OpenSSH ChrootDirectoryمع خيار SFTP ForceCommand internal-sftp. يُعد هذا الخيار مثاليًا عندما يحتاج الحساب فقط إلى نقل الملفات. فهو يمنح المستخدم واجهة SFTP يكون جذر نظام ملفاتها هو الدليل الذي تختاره، مع حظر الوصول إلى واجهة سطر الأوامر التفاعلية وإعادة توجيه SSH.

إذا كان المستخدم بحاجة فعلية إلى واجهة أوامر عادية، فالقرار يختلف. تتطلب واجهة الأوامر التفاعلية المعزولة (chroot) ملفات تنفيذية خاصة بها، ومكتبات، وعُقد أجهزة، وملفات داعمة داخل البيئة المعزولة. يوثق OpenSSH هذا الأمر بوضوح. بالنسبة لمعظم حسابات التحميل والنسخ الاحتياطي والوكالات والموردين والاستضافة المشتركة، تُعد بيئة chroot التي تعتمد على بروتوكول SFTP فقط أبسط بكثير وأقل عرضة للأخطاء. أما بالنسبة للمستخدمين غير الموثوق بهم الذين يحتاجون إلى بيئة أوامر كاملة، فعادةً ما يكون استخدام حاوية أو جهاز افتراضي مخصص أسهل في الصيانة من إنشاء بيئة chroot لواجهة الأوامر يدويًا.

يستخدم هذا الدليل نظام Ubuntu 24.04 LTS ومستخدمًا افتراضيًا باسم alice. سيقتصر استخدام هذا المستخدم على /srv/sftp/aliceوسيُسمح له بالكتابة داخل فقط /files. استبدل الأسماء والمسارات بما يناسب خادمك.

قبل البدء: افهم قاعدة الملكية

أكثر أسباب فشل chroot شيوعًا هو مشكلة الأذونات. يتطلب OpenSSH أن يكون كل مكون من مكونات ChrootDirectoryالمسار مملوكًا للمستخدم الجذر (root) وغير قابل للكتابة من قِبل المجموعة أو المستخدمين الآخرين . يتم التحقق من هذا الشرط بشكل دائم. هذا يعني أنه لا يجب عليك جعل /srv/sftp/aliceالمسار قابلاً للكتابة من قِبل أي مستخدم آخر alice.

بدلاً من ذلك، اجعل مجلد السجن مملوكًا للمستخدم الجذر، وأنشئ مجلدًا فرعيًا قابلاً للكتابة:

/srv/sftp/alice        root:root   755
└── files              alice:alice 755

يتبع هذا التصميم السلوك الموثق في دليل أوبونتو 24.04sshd_config(5) . ويشير الدليل نفسه إلى أنه internal-sftpلا يحتاج إلى ملفات تشغيل إضافية داخل بيئة chroot، ولذلك فهو الأنسب لحساب نقل ملفات مقيد.

الخطوة 1: تحقق من تثبيت خادم OpenSSH

يعرض طرفية أوبونتو تثبيت خادم OpenSSH وخدمة SSH قيد التشغيل
تأكد من تثبيت خادم OpenSSH وتشغيله ssh.serviceقبل تغيير قواعد الوصول.

قم بتثبيت حزمة الخادم إذا لزم الأمر:

sudo apt update
sudo apt install openssh-server
sudo systemctl status ssh.service

تستخدم وثائق OpenSSH الرسمية لنظام Ubuntu openssh-serverحزمة البرامج الخفية (daemon package) ssh.serviceوإدارة الخدمات. راجع دليل OpenSSH الخاص بخادم Ubuntu .

إذا كان هذا جهازًا بعيدًا وكان SSH هو طريقتك الإدارية الوحيدة، فاحرص على إبقاء جلسة المسؤول الحالية مفتوحة أثناء إجراء التغييرات. قد يؤدي سوء تكوين SSH إلى حظر وصولك.

الخطوة الثانية: إنشاء مجموعة وإضافة المستخدم المقيد

إنشاء مجموعة sftpusers في طرفية أوبونتو وإضافة المستخدم alice
قم بإنشاء مجموعة مخصصة بحيث يمكن تطبيق التقييد بشكل متسق على حساب واحد أو أكثر من حسابات SFTP فقط.

أنشئ مجموعة للمستخدمين ذوي الصلاحيات المحدودة. إذا aliceكانت المجموعة موجودة بالفعل، فأضفها إليها فقط.

sudo groupadd sftpusers
sudo adduser alice
sudo usermod -aG sftpusers alice
id alice

إذا كنت تستخدم بالفعل مفاتيح SSH العامة، فاستمر في استخدامها. يتحكم إعداد chroot في ما يحدث بعد المصادقة ؛ ولا يتطلب منك التبديل من مصادقة المفاتيح إلى كلمات المرور.

عادةً ما تكون القاعدة الجماعية أفضل من إنشاء Match Userكتلة منفصلة لكل حساب، لأنها تُبقي السياسة في مكان واحد. ومع ذلك، تظل القاعدة الخاصة بكل مستخدم مفيدة عندما يكون من الضروري تقييد المستخدمين المختلفين بتصميمات غير مترابطة.

الخطوة 3: إنشاء بيئة معزولة مملوكة للمستخدم الجذر ودليل فرعي قابل للكتابة

يقوم طرفية أوبونتو بإنشاء /srv/sftp/alice ودليل فرعي للملفات قابل للكتابة من قبل المستخدم بملكية منفصلة
يظل جذر chroot مملوكًا للمستخدم الجذر؛ فقط filesالدليل الفرعي قابل للكتابة بواسطة المستخدم المقيد.

إنشاء التسلسل الهرمي للمجلدات:

sudo mkdir -p /srv/sftp/alice/files
sudo chown root:root /srv/sftp/alice
sudo chmod 755 /srv/sftp/alice
sudo chown alice:alice /srv/sftp/alice/files
sudo chmod 755 /srv/sftp/alice/files

تحقق من الملكية:

ls -ld /srv /srv/sftp /srv/sftp/alice /srv/sftp/alice/files
namei -l /srv/sftp/alice

إذا /srvكان /srv/sftpالملف قابلاً للكتابة من قِبل المجموعة أو المستخدم، فقم بإصلاح ذلك أيضًا. يتحقق OpenSSH من جميع مكونات المسار، وليس فقط الدليل النهائي.

الخطوة 4: أضف قاعدة مطابقة في sshd_config.d

محرر نانو يعرض كتلة Match Group sftpusers مع قيود ChrootDirectory و internal-sftp
يطبق الحظر Match Groupسياسة chroot و SFTP فقط على أعضاء sftpusers.

توصي وثائق خادم أوبونتو الحالية بالاحتفاظ بإعدادات SSH المخصصة /etc/ssh/sshd_config.d/بدلاً من دمجها في الملف الرئيسي المُضمّن. أنشئ مقتطفًا برمجيًا:

sudo nano /etc/ssh/sshd_config.d/90-sftp-restricted.conf

يضيف:

Match Group sftpusers
    ChrootDirectory /srv/sftp/%u
    ForceCommand internal-sftp -d /files
    DisableForwarding yes
    PermitTTY no

Match all

%uيتوسع إلى اسم المستخدم المُصادق عليه، لذا aliceيتم وضعه في /srv/sftp/alice. -d /filesتُخبر الوسيطة خادم SFTP الداخلي بالبدء داخل الدليل الفرعي القابل للكتابة. DisableForwarding yesيُعطّل توجيه X11، والوكيل، وTCP، وStreamLocal في توجيه واحد؛ وقد تم توثيقه خصيصًا لتبسيط التكوينات المقيدة.

الجزء الأخير Match allمهم في المقتطف لأنه ينهي السياق الشرطي قبل تحليل التكوين اللاحق.

الخطوة 5: تحديد ما إذا كانت القيود قائمة على المجموعة أو على كل مستخدم على حدة

إنشاء مستخدم SFTP مخصص ومقيد الصلاحيات ودليل /srv/sftp/uploads-style في طرفية أوبونتو
استخدم حسابًا مخصصًا عندما لا يكون لدى البائع أو مهمة النسخ الاحتياطي أو المستخدم الخارجي إمكانية الوصول العادية إلى واجهة سطر الأوامر.

بالنسبة للمستخدمين المتعددين الذين يستخدمون نفس التخطيط، احتفظ بقاعدة المجموعة الموضحة أعلاه. أما بالنسبة لحساب استثنائي واحد، فاستخدم كتلة خاصة بالمستخدم بدلاً من ذلك.

Match User vendor1
    ChrootDirectory /srv/vendor/vendor1
    ForceCommand internal-sftp -d /incoming
    DisableForwarding yes
    PermitTTY no

Match all

اختر بناءً على تكلفة الإدارة:

سيناريوأفضل قاعدةلماذا
العديد من المستخدمين الذين يقتصر عملهم على التحميل فقط لديهم نفس البنيةMatch Groupتُطبق سياسة واحدة على جميع الأعضاء.
يحتاج أحد البائعين إلى دليل فريدMatch Userيمكن أن يختلف المسار والقيود دون أن يؤثر ذلك على الآخرين.
يحتاج المستخدم إلى واجهة تفاعلية عاديةلا تستخدم هذه الوصفة التي تعمل عبر بروتوكول SFTP فقطيحتاج نظام chroot التفاعلي إلى بيئة تشغيل كاملة.
يحتاج المستخدم غير الموثوق به إلى أوامر وعزل قويضع في اعتبارك حاوية أو جهازًا افتراضيًايسهل تحديد وتحديث بيئة تنفيذ كاملة.

الخطوة السادسة: التحقق من صحة إعدادات SSH قبل إعادة التشغيل

محرر أوبونتو يعرض قسم ChrootDirectory وقسم ForceCommand internal-sftp لمستخدم واحد مقيد الوصول
قبل تطبيق قاعدة chroot، تحقق من صحة كل من بناء الجملة والإعدادات الفعالة لكل مستخدم.

لا تقم بإعادة تشغيل SSH مباشرةً بعد تعديل الملف. قم أولاً بتشغيل اختبار بناء الجملة الذي توصي به أوبونتو:

sudo sshd -t

عدم وجود مخرجات يعني نجاح عملية التحقق من بناء الجملة. يمكنك أيضًا الاطلاع على الإعدادات الفعلية لمستخدم معين:

sudo sshd -T -C user=alice,host=localhost,addr=127.0.0.1   | grep -E 'chrootdirectory|forcecommand|disableforwarding|permittty'

يجب أن ترى مسار chroot المتوقع وأمر SFTP الإجباري. يُعد هذا مفيدًا بشكل خاص على أوبونتو لأن الإعدادات قد تأتي من كلا /etc/ssh/sshd_configالملفين الموجودين ضمن /etc/ssh/sshd_config.d/. يُشير أوبونتو إلى أن OpenSSH يستخدم عادةً القيمة الأولى التي يتم الحصول عليها لمعظم التوجيهات، لذا فإن التحقق من التكوين الفعلي أكثر أمانًا من افتراض أي ملف هو المُعتمد.

الخطوة 7: أعد تشغيل SSH واختبره باستخدام SFTP

يعرض طرفية أوبونتو خدمة ssh.service نشطة وتسجيل دخول SFTP الذي يكون دليل العمل البعيد الخاص به هو /uploads
بعد إجراء اختبار تكوين نظيف، أعد تشغيل SSH وتحقق من أن الحساب يدخل فقط إلى نظام ملفات SFTP المحظور.

قم بتطبيق التغيير:

sudo systemctl restart ssh.service
sudo systemctl status ssh.service

ثم قم بالاتصال من طرفية أخرى:

sftp alice@server.example.com

داخل بروتوكول نقل الملفات الآمن (SFTP)، اختبر:

pwd
ls
put test.txt
ls -l

مع الإعدادات المذكورة أعلاه، يجب أن يكون دليل SFTP الأولي هو /files. الشرطة المائلة التي يعرضها SFTP هي جذر chroot، وليس جذر الخادم الحقيقي.

لا ينبغي أن تؤدي محاولة الوصول إلى الصدفة العادية إلى الحصول على صدفة غير مقيدة:

ssh alice@server.example.com

لأن ForceCommand internal-sftpهذا الحساب يستبدل الجلسة المطلوبة بخادم SFTP الموجود في العملية، فهو مخصص لنقل الملفات بدلاً من تنفيذ الأوامر.

الخطوة 8: التأكد من عدم قدرة المستخدم على الهروب من السجن

يحاول طرفية SFTP الوصول إلى المسارات parent و /etc و /root، ويظهر رسالة "تم رفض الوصول".
اختبر الحدود بشكل صريح: يجب ألا تصبح المسارات مثل مسار المضيف /etcمرئية /rootخارج بيئة chroot.

حاول الانتقال إلى ما فوق الجذر الظاهر وفحص مسارات المضيف الحساسة:

cd ..
ls /
ls /etc
ls /root

داخل بيئة chroot، /يُمثل هذا /srv/sftp/aliceالمجلد على المضيف. إذا لم تقم بإنشاء أي مجلد etcأو دليل داخل هذه البيئة المعزولة، فلن يتمكن المستخدم من الوصول إلى المجلد الحقيقي أو المجلد rootعلى المضيف ./etc/root

اختبر أيضًا عملية تحميل إلى /files. إن التكوين الذي يمنع الهروب ولكنه يجعل السجن بأكمله للقراءة فقط عن طريق الخطأ آمن ولكنه غير مفيد لحساب التحميل.

استكشاف الأخطاء وإصلاحها: "ملكية أو أوضاع غير صحيحة لدليل chroot"

إذا فشل تسجيل الدخول فوراً، فافحص سجل خدمة SSH:

sudo journalctl -fu ssh.service

يوصي دليل OpenSSH الخاص بنظام Ubuntu باستخدام سجل خدمة SSH لتحديد المشاكل وإصلاحها. إذا واجهت خطأً في الملكية أو الوضع، فافحص كل مجلد رئيسي.

namei -l /srv/sftp/alice

يجب أن يكون مسار chroot مملوكًا للمستخدم الجذر (root) وغير قابل للكتابة من قِبل المجموعة أو أي مستخدم آخر. ومن الأخطاء الشائعة ما يلي:

sudo chown alice:alice /srv/sftp/alice

لا تحل المشكلة بتخفيف فحوصات OpenSSH. بدلاً من ذلك، ضع مساحة الكتابة الخاصة بالمستخدم أسفل جذر chroot:

sudo chown root:root /srv/sftp/alice
sudo chmod 755 /srv/sftp/alice
sudo chown alice:alice /srv/sftp/alice/files

ماذا لو احتاج المستخدم إلى الوصول إلى واجهة سطر الأوامر SSH، وليس فقط SFTP؟

ChrootDirectoryيمكن استخدامه أيضًا مع واجهة سطر أوامر تفاعلية، لكن الإعداد أكثر تعقيدًا بكثير. ينص OpenSSH على أن بيئة chroot التفاعلية تحتاج على الأقل إلى واجهة سطر /devأوامر وعُقد أساسية، بالإضافة إلى أي ملفات تنفيذية ومكتبات وملفات تحليل أسماء النطاقات وغيرها من التبعيات التي تتطلبها الأوامر التي تسمح بها.

بالنسبة لحساب جهاز مُحكم التحكم، يُمكن تبرير إنشاء بيئة معزولة كهذه. أما بالنسبة للوصول العام إلى أوامر لينكس، فغالبًا ما يُشكّل ذلك عبئًا على الصيانة: إذ يجب أن تنعكس تحديثات الأمان للأدوات والمكتبات داخل البيئة المعزولة أيضًا. إذا كان المطلوب هو "السماح لهذا الشخص بتشغيل الأوامر مع عزله عن النظام المضيف"، فعادةً ما يكون استخدام حاوية أو جهاز افتراضي أو خدمة مُخصصة ذات صلاحيات محدودة أسهل في التدقيق.

تحسينات أمنية تستحق الإضافة

يُعد تقييد الوصول إلى الدليل طبقة واحدة فقط. بالنسبة للخوادم المتصلة بالإنترنت، يُرجى مراعاة ما يلي أيضًا:

  • استخدم مصادقة المفتاح العام SSH لحسابات المستخدمين والحسابات الآلية حيثما كان ذلك عمليًا.
  • لا تمنح المستخدمين ذوي صلاحيات نقل الملفات المحدودة sudoإمكانية الوصول.
  • احتفظ DisableForwarding yesبهذا الحساب لحسابات SFTP فقط حتى لا يتم إعادة استخدام اتصال SSH للأنفاق أو إعادة توجيه الوكلاء.
  • قم بتقييد المجلدات القابلة للكتابة إلى أصغر مساحة يحتاجها سير العمل.
  • راجع journalctl -u ssh.serviceملكية الملفات بعد إضافة المستخدمين.
  • أبقِ جلسة المسؤول مفتوحة أثناء اختبار تغييرات تكوين SSH عن بُعد.

للحصول على السلوك النهائي لـ ChrootDirectory، Match، ForceCommand، و DisableForwarding، استخدم دليل تكوين خادم OpenSSH الخاص بنظام Ubuntu 24.04 . أما بالنسبة لتخطيط التكوين الخاص بنظام Ubuntu، والتحقق من صحته، وأوامر إعادة التشغيل، والتسجيل، فراجع وثائق خادم OpenSSH الرسمية لنظام Ubuntu .

خلاصة القول

إذا كان الهدف هو السماح لحساب SSH هذا بتحميل وتنزيل الملفات داخل مجلد واحد فقط، فاستخدم مجلدًا مملوكًا للمستخدم الجذر ChrootDirectory، وضع المحتوى القابل للكتابة في مجلد فرعي مملوك للمستخدم، ثم قم بفرض ذلك internal-sftp. تحقق من صحة العملية sshd -tقبل إعادة التشغيل، ثم اختبر مسار التحميل المسموح به ومحاولات الوصول من خارج البيئة المعزولة. يوفر لك هذا حدودًا أمنية صغيرة ومفهومة دون الحاجة إلى إنشاء بيئة لينكس كاملة داخل البيئة المعزولة.

اترك تعليقاً

حمّل لعبة FlightGear مجاناً: دليل التثبيت الرسمي

حمّل لعبة FlightGear مجاناً: دليل التثبيت الرسمي

حمّل برنامج FlightGear مجاناً من الموقع الرسمي. قارن بين حزم Windows و macOS و Linux، وثبّت ملفات البيانات، وابدأ رحلتك الأولى.

أو كي سامبلر: برنامج مجاني وبسيط لأخذ عينات موسيقية لإيقاعات لوحة المفاتيح

أو كي سامبلر: برنامج مجاني وبسيط لأخذ عينات موسيقية لإيقاعات لوحة المفاتيح

يقوم برنامج OKSampler بربط مقاطع MP3 بمفاتيح لوحة المفاتيح، كما يتيح تكرار الصوت. تعرّف على وظائف هذا البرنامج المجاني القديم، وحدود ميزاته القديمة، وما يجب التحقق منه قبل التنزيل.

تطبيق مهام جوجل لسطح المكتب: كيفية استخدامه على الكمبيوتر

تطبيق مهام جوجل لسطح المكتب: كيفية استخدامه على الكمبيوتر

افتح مهام جوجل في متصفح، وأضف اختصارًا لمتصفح كروم أو قم بتشغيلها على غرار التطبيقات، وقم بإدارة المهام المؤرخة من خلال التقويم وجيميل.

كيفية لعب لعبة Don't Starve Together على نظام لينكس

كيفية لعب لعبة Don't Starve Together على نظام لينكس

قم بتثبيت نسخة لينكس من لعبة Don't Starve Together عبر Steam، وابدأ عالمًا جديدًا، أو انضم إلى أصدقائك باتباع خطوات الإعداد واستكشاف الأخطاء وإصلاحها هذه.

كيفية تشغيل لعبة Squad على نظام Linux باستخدام Steam Proton

كيفية تشغيل لعبة Squad على نظام Linux باستخدام Steam Proton

قم بإعداد Squad على نظام Linux باستخدام Steam Play و Proton، ثم قم بتثبيت اللعبة، واختر أداة التوافق، وقم باستكشاف مشكلات مكافحة الغش وإصلاحها.

كيفية تثبيت نظام لينكس منت ديبيان الإصدار الخامس "إلسي" من خلال USB

كيفية تثبيت نظام لينكس منت ديبيان الإصدار الخامس "إلسي" من خلال USB

قم بتنزيل ملف LMDE 5 ISO المؤرشف والتحقق منه، ثم أنشئ قرص USB قابلًا للإقلاع، واختر إعدادات التثبيت الآمنة. انتهى دعم Elsie؛ راجع إصدار LMDE الحالي.

كيفية إنشاء قرص USB قابل للتشغيل لنظام التشغيل Windows 11 على نظام Linux

كيفية إنشاء قرص USB قابل للتشغيل لنظام التشغيل Windows 11 على نظام Linux

قم بإنشاء قرص USB لتثبيت نظام التشغيل Windows 11 على نظام Linux باستخدام Ventoy: احصل على ملف ISO الرسمي، وقم بتثبيت Ventoy بأمان، وانسخ الصورة، وقم بتشغيل جهاز الكمبيوتر المستهدف.

كيفية تشغيل لعبة It Takes Two على نظام لينكس باستخدام Steam Proton

كيفية تشغيل لعبة It Takes Two على نظام لينكس باستخدام Steam Proton

تعلم كيفية تشغيل لعبة It Takes Two على نظام Linux باستخدام Steam Proton، وتثبيت إصدار Steam، وتمكين التوافق، وإعداد وضع اللعب التعاوني، وحل مشاكل التشغيل.

كيفية تثبيت برنامج Wireshark على أنظمة Linux: أوبونتو، فيدورا، آرتش، وغيرها

كيفية تثبيت برنامج Wireshark على أنظمة Linux: أوبونتو، فيدورا، آرتش، وغيرها

قم بتثبيت Wireshark على Ubuntu أو Debian أو Fedora أو Arch أو openSUSE باستخدام أوامر الحزمة الحالية، ثم قم بتكوين التقاط الحزم المباشر بأمان.

كيفية لعب Slay the Spire على نظام Linux: قم بتثبيته وتشغيله باستخدام Steam

كيفية لعب Slay the Spire على نظام Linux: قم بتثبيته وتشغيله باستخدام Steam

قم بتثبيت Steam على نظام Linux، ثم احصل على نسخة Slay the Spire الأصلية لنظام Linux من مكتبتك، وقم بتشغيلها. يتضمن ذلك خطوات عملية لحل مشاكل بدء التشغيل الشائعة.