كيفية استخدام Restricted Shell للحد مما يمكن لمستخدم Linux القيام به

نشرت: 2022-01-29
نافذة طرفية على نظام Linux.
فاطماواتي أحمد زينوري / شاترستوك

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

قذائف مقيدة

القشرة المقيدة ليست صدفة مختلفة. إنه وضع مختلف للقذيفة القياسية. يمكن بدء تشغيل Bash و Korn و Fish والأصداف الأخرى في وضع shell المقيد. سنستخدم Bash في هذه المقالة ، لكن نفس المبادئ تنطبق على الأصداف الأخرى.

نظرًا لأن الأصداف المقيدة هي مجرد طريقة أخرى لاستخدام غلافك القياسي ، فمن السهل إعدادها. لا يوجد شيء لتثبيته ، وهي متوفرة أينما كان نظام Linux.

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

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

ذات صلة: ما الفرق بين Bash و Zsh و Linux Shells الأخرى؟

مقيد باش

عند تشغيل Bash كصدفة مقيدة ، فإن المستخدم قد تمت إزالته من بعض القدرات. على وجه التحديد ، لا يمكن للمستخدم:

  • استخدم cd لتغيير دليل العمل.
  • غيّر قيم المتغيرات البيئية $PATH أو $SHELL أو $BASH_ENV أو $ENV (لكن يمكنهم قراءة القيم الحالية).
  • قراءة أو تغيير خيارات شل $SHELLOPTS البيئية.
  • أعد توجيه إخراج الأمر.
  • قم باستدعاء الأوامر التي تتطلب مسارًا لتحديد موقعها. بمعنى ، لا يمكنك إصدار أمر به شرطة أمامية واحدة أو أكثر " / ".
  • قم باستدعاء exec لاستبدال عملية مختلفة للقشرة.
  • استخدم أيًا من الميزات المقيدة في البرنامج النصي.
الإعلانات

يمكنك استدعاء غلاف Bash مقيد باستخدام الخيار -r (مقيد). محاولة القيام بمهمة بسيطة مثل تغيير دليل العمل ممنوع. رسالة مقتضبة تخبرك أن cd مقيد.

 باش -ر
 وثائق cd 

يمكن لقشرة Bash أيضًا اكتشاف وقت استدعائها باستخدام "rbash" بدلاً من "bash". هذا يجعله يبدأ كصدفة مقيدة أيضًا. يوفر هذا طريقة مناسبة لتعيين الصدفة الافتراضية لمستخدم معين ، والتي سنستخدمها قريبًا.

إذا استخدمنا الأمر whereis على Ubuntu للبحث عن ملفات rbash ، فسنرى أن الملف القابل للتنفيذ موجود في دليل "usr / bin". صفحة الدليل موجودة في دليل "/ usr / share / man / man1".

يكشف استخدام الأمر ls مع الخيار -l (long) أن rbash هو في الواقع رابط رمزي لـ bash .

 حيث rbash
 ls -l / usr / bin / rbash 

في Manjaro و Fedora ، كان لابد من إنشاء رابط رمزي rbash . هذا يعمل على كلا التوزيعين:

 حيث rbash
 sudo ln -s / bin / bash / bin / rbash
 حيث rbash 

الإعلانات

في المرة الثانية التي نستخدم فيها الأمر whereis ، يجد rbash في المجلد "/ usr / bin".

تقييد المستخدم

لنقم بإنشاء حساب مستخدم جديد باسم "Minnie". سنقوم بتعيين shell الخاص بهم ليكون الصدفة المقيدة باستخدام الخيار -s (shell) للأمر useradd . سنقوم أيضًا بتعيين كلمة مرور الحساب باستخدام الأمر passwd ، وسننشئ مجلدًا رئيسيًا لهم.

تخبر العلامة -p (الآباء) في الأمر mkdir mkdir بإنشاء الدليل الهدف وأي أدلة رئيسية تحتاج إلى إنشائها أيضًا. لذلك من خلال إنشاء دليل "/ home / minnie / bin" ، نقوم بإنشاء دليل "/ home / minnie" في نفس الوقت.

 sudo useradd minnie -s / bin / rbash
 sudo passwd ميني
 sudo mkdir -p / home / minnie / bin. سودو مكدير -ب / المنزل / ميني / بن 

عندما تسجل ميني الدخول ، ستعمل في صدفة مقيدة.

 قرص مضغوط 

لا يمكنها استدعاء الأوامر التي تحتاج إلى تضمين شرطة مائلة للأمام " / ":

 / البيرة / بن / بينغ 

ومع ذلك ، لا يزال بإمكانها تنفيذ الأوامر الموجودة في المسار.

 بينغ 

الإعلانات

هذا ليس السلوك الذي قد تتوقعه ، وهو بالتأكيد ليس ما نريده. لتشديد القيود أكثر ، نحتاج إلى تغيير المسار الذي ستستخدمه صدفة ميني للبحث عن الأوامر.

تشديد القيود

عندما أنشأنا دليل minnie الرئيسي "/ home / minnie" ، أنشأنا أيضًا دليل "/ home / minnie / bin". هذا هو المكان الذي يلعب فيه هذا الدليل.

سنقوم بتحرير ملف minnie ".bash_profile" وتعيين مسارها للإشارة إلى هذا الدليل فقط. سنقوم أيضًا بتقييد ملف minnie ".bash_profile" بحيث لا يتمكن سوى الجذر فقط من تحريره. هذا يعني أنه لا يمكن لأي مستخدم آخر تحرير هذا الملف وتغيير مساره.

 sudo gedit /home/minnie/.bash_profile 

إما أن تقوم بتحرير "PATH =" الموجود أو أضف السطر التالي:

 PATH = منزل $ / بن 

حفظ الملف. سنقوم بتغيير مالك الملف إلى الجذر باستخدام الأمر chown وتغيير أذونات الملف باستخدام الأمر chmod . سيتمكن المستخدم الجذر فقط من تحرير الملف.

 جذر sudo chown: root /home/minnie/.bash_profile
 sudo chmod 755 / home/minnie/.bash_profile
 ls -l /home/minnie/.bash_profile 

في المرة التالية التي يسجل فيها المستخدم ميني الدخول ، يشير مسارها إلى مجلد واحد.

الإعلانات

يمكن لمستخدمنا المحظور ميني استخدام أوامر Bash المضمنة فقط مثل echo alias وتسجيل logout . هي لا تستطيع حتى استخدام ls !

 ls 

سنحتاج إلى تخفيف قبضتنا قليلاً إذا أردنا أن يكونوا قادرين على فعل أي شيء مفيد على الإطلاق. سننشئ بعض الروابط الرمزية من دليل "bin" لميني إلى الأوامر التي نريد أن يتمكن ميني من استخدامها.

 sudo ln -s / bin / ls / home / minnie / bin
 sudo ln -s / bin / top / home / minnie / bin
 sudo ln -s / bin / uptime / home / minnie / bin
 sudo ln -s / bin / pinky / home / minnie / bin 

عندما تسجل ميني الدخول في المرة التالية ، ستجد أنها تستطيع استخدام أوامر Bash المضمنة ، بالإضافة إلى تلك الأوامر التي تم ربطها بها.

 ls
 ديف الخنصر
 مدة التشغيل 

تقييد المستخدمين الحاليين

أنشأنا ميني كمستخدم جديد. لتغيير غلاف مستخدم حالي ، يمكننا استخدام الخيار -s (shell) للأمر usermod .

 sudo usermod -s / bin / rbash mary 

يمكنك استخدام الأمر less الموجود في الملف “/ etc / passwd” لترى بسرعة ماهية الصدفة التي تم تعيينها كصدفة افتراضية للمستخدم.

 أقل / الخ / passwd 

يمكننا أن نرى أن المستخدم ماري سيستخدم الصدفة المقيدة عندما تسجل الدخول في المرة التالية.

الإعلانات

تذكر تطبيق التغييرات الأخرى لتقييد متغير البيئة $PATH الخاص بهم ولتعيين الأوامر التي تريد أن يكون المستخدم قادرًا على تنفيذها.

تقييد النصوص

يمكن للمستخدم العادي غير المقيد تشغيل البرامج النصية التي يتم تنفيذها في غلاف مقيد. انسخ الأسطر التالية والصقها في محرر. احفظ الملف باسم "limited.sh" وأغلق المحرر.

 #! / بن / باش

يبدأ البرنامج النصي # في غلاف Bash العادي
صدى "## في وضع غير مقيد! ##"

صدى صوت
صدى "الدليل الحالي:` pwd` "
صدى "تغيير الدليل"
مؤتمر نزع السلاح / الدولار / سهم
صدى "الآن في الدليل:` pwd` "
صدى "التغيير إلى الدليل الرئيسي"
مؤتمر نزع السلاح ~
صدى "الآن في الدليل:` pwd` "

# وضع مقيد
مجموعة -r

صدى صوت
صدى "## في الوضع المقيد! ##"

صدى صوت
صدى "الدليل الحالي:` pwd` "
صدى "تغيير الدليل إلى / home /"
القرص المضغوط / المنزل
صدى "لا يزال في الدليل:` pwd` "

صدى صوت
صدى "محاولة بدء قذيفة أخرى"
/ بن / باش

صدى صوت
صدى "محاولة إعادة توجيه إخراج الأمر"
ls -l $ HOME> my_files.txt
القط my_files.txt
صدى صوت

خروج 0

نحتاج إلى استخدام الأمر chmod مع علامة +x (تنفيذ) لجعل البرنامج النصي قابلاً للتنفيذ.

 chmod + x limited.sh 

الجزء الأول من البرنامج النصي يعمل في غلاف عادي.

 ./restricted.sh 

الجزء الثاني من البرنامج النصي - البتة التي تلي سطر "set -r" - تعمل في غلاف مقيد.

لم تنجح أي من الإجراءات التي تم محاولة تنفيذها في الجزء المقيد من البرنامج النصي.

الإعلانات

يمكن إنشاء نص كامل ليعمل في صدفة مقيدة عن طريق إضافة -r إلى السطر الأول:

 ! # / بن / باش -ر

تذكر هوديني

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