كيفية تشغيل الأوامر كمستخدم آخر في برامج Linux النصية

نشرت: 2022-07-13
محطة لينكس على كمبيوتر محمول على خلفية زرقاء.
fatmawati achmad zaenuri / Shutterstock.com

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

العمليات لها مالكون

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

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

كيفية إدارة العمليات من Linux Terminal: 10 أوامر تحتاج إلى معرفتها
ذات صلة كيفية إدارة العمليات من Linux Terminal: 10 أوامر تحتاج إلى معرفتها

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

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

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

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

قم بتشغيل برنامج نصي كمستخدم آخر

نحن نستخدم جهاز كمبيوتر به عدة مستخدمين مهيئين. أحدهما ماري ، الذي يحمل اسم المستخدم maryq ، والآخر هو Dave باسم المستخدم dave.

ماري لديها نص يسمى "other-user.sh" في دليل منزلها. هذا هو نص البرنامج النصي.

 #! / بن / باش

صدى "اسم البرنامج النصي:" $ 0
صدى "دليل العمل:" $ (pwd)
صدى "Script قيد التشغيل كمستخدم:" $ (whoami)

يقوم بطباعة اسم البرنامج النصي ، والذي يتم الاحتفاظ به في متغير البيئة $0 . ثم يستخدم pwd لطباعة دليل العمل. أخيرًا ، يستخدم الأمر whoami لطباعة اسم المستخدم الذي أطلق البرنامج النصي. أو من يعتقد أنه أطلق النص.

انسخ النص من البرنامج النصي إلى محرر واحفظه باسم "other-user.sh" في الدليل الرئيسي لحساب مستخدم مختلف.

سنحتاج إلى جعل البرنامج النصي قابلاً للتنفيذ. سنستخدم الأمر chmod ونستخدم الخيار +x (تنفيذ) وخيار -u (المستخدم) لتعيين علامة التنفيذ للمالك فقط. هذا يعني أن ماري فقط يمكنها تشغيل البرنامج النصي. سوف نتحقق من أذونات الملف مع ls .

 chmod u + x other-user.sh
 ls 

تعيين إذن التنفيذ للبرنامج النصي بحيث يمكن للمستخدم Mary فقط تشغيله

من اليسار إلى اليمين ، تقرأ الأذونات:

  • يمكن للمالك قراءة الملف وكتابته وتنفيذه.
  • يمكن لأعضاء المجموعة قراءة الملف وكتابته.
  • يمكن للآخرين قراءة الملف فقط.

إذن ، المستخدمون الوحيدون القادرون على تشغيل البرنامج النصي هم Mary و root. هذا ما يحدث عندما تدير ماري النص:

 ./other-user.sh 

الإخراج عندما تقوم ماري بتشغيل البرنامج النصي

تم إخبارنا بأن دليل العمل الحالي للبرنامج النصي هو دليل ماري الرئيسي ، ومالك البرنامج النصي هو حساب المستخدم maryq.

كما هو متوقع ، لا يمكن لـ Dave تشغيل البرنامج النصي.

 /home/maryq/other-user.sh 

لا يمكن للمستخدم ديف تشغيل البرنامج النصي ، تم رفض الإذن

إذا كان لدى Dave امتيازات المستخدم الجذر ، فيمكنه محاولة تشغيل البرنامج النصي كجذر ، باستخدام sudo .

 sudo /home/maryq/other-user.sh 

الإخراج عند تشغيل البرنامج النصي بواسطة الجذر

هذا نجاح جزئي. يتم تشغيل النص ، لكن مالك النص هو الجذر وليس maryq.

الحيلة التي نحتاج إلى توظيفها هي خيار sudo -u (المستخدم). يتيح لك هذا تحديد المستخدم الذي تريد تشغيل الأمر باسمه. إذا لم تستخدم الخيار -u ، فسيتم تعيين sudo افتراضيًا على استخدام الجذر. إذا أردنا تشغيل الأمر باسم Mary ، فنحن بحاجة إلى تمرير اسم حساب المستخدم الخاص بهم إلى الأمر sudo .

sudo -u maryq /home/maryq/other-user.sh

استخدام الخيار -u user مع الجذر لتشغيل البرنامج النصي كمستخدم Mary

هذه المرة أبلغ البرنامج النصي أن مالك العملية هو maryq.

دعنا نضيف سطرًا إلى النص البرمجي "other-user.sh". سنقوم echo بعض النصوص وإعادة توجيه الإخراج إلى ملف يسمى "mary.txt".

 #! / بن / باش

صدى "اسم البرنامج النصي:" $ 0 
صدى "دليل العمل:" $ (pwd) 
صدى "Script قيد التشغيل كمستخدم:" $ (whoami)
صدى "This is go into a file in / home / maryq /"> /home/maryq/mary.txt

نقوم بإنشاء الملف الجديد في دليل منزل ماري. هذا جيد تمامًا لأننا نقوم بتشغيل البرنامج النصي مثل ماري.

 ./other-user.sh 

تشغيل البرنامج النصي مرة أخرى بحيث ينشئ ملفًا نصيًا

إذا تحققنا من دليل ماري الرئيسي ، فسنرى أن الملف قد تم إنشاؤه ، وتنتمي ملكية الملف إلى حساب مستخدم maryq.

 ls -hl mary.txt 

التحقق من ملكية الملف الذي تم إنشاؤه بواسطة البرنامج النصي

هذا هو نفس السلوك الذي نراه إذا أطلقت ماري بالفعل النص بنفسها.

ذات صلة: كيفية استخدام الأمر chmod على Linux

الأمر runuser

يمكنك استخدام أوامر sudo -u التي استخدمناها حتى الآن داخل البرنامج النصي ، ولكن هناك أمر آخر ، runuser ، مصمم لتشغيل العمليات كمستخدم مختلف من داخل البرامج النصية. لديها معالجة أفضل لكود الإرجاع من العملية التي تم إطلاقها ، ولديها نفقات أقل من sudo .

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

لا يستطيع ديف سرد ملف “mary.txt” لأنه موجود في دليل منزل ماري وليس لديه إمكانية الوصول.

 القط /home/maryq/mary.txt 

لا يمكن للمستخدم ديف قراءة ملف ماري ، تم رفض الإذن

ومع ذلك ، يمكننا إلقاء نظرة خاطفة على الملف باستخدام runuser . يقوم الخيار - (تسجيل الدخول) بتشغيل قشرة جديدة مع بيئة قريبة جدًا من بيئة الصدفة التي كانت ماري تمتلكها إذا قاموا بتسجيل الدخول بالفعل. يتبع الخيار -c (الأمر) الأمر الذي نريد تشغيله.

 sudo runuser - maryq -c "cat mary.txt" 

قراءة ملف ماري باستخدام الأمر runuser

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

كمستخدم ديف ، سنقوم بإنشاء نص برمجي يسمى "run-maryq.sh" مع هذا النص بداخله:

 #! / بن / باش

runuser -l maryq -c "cat mary.txt"

سنجعله قابلاً للتنفيذ:

 chmod + x run-maryq.sh 

جعل النص قابل للتنفيذ مع chmod

دعونا نرى ما يحدث عندما نحاول تشغيله.

 ./run-maryq.sh 

تشغيل البرنامج النصي مع runuser بالداخل ، كمستخدم عادي

يشتكي الأمر runuser لأنه يتم تنفيذه بواسطة مستخدم عادي. لنقم بتشغيله مرة أخرى مع sudo .

 sudo ./run-maryq.sh 

تشغيل البرنامج النصي بداخله runuser ، كجذر

يعمل هذا كما نرغب ، تمامًا كما لو أن ماري أطلقت النص بنفسها.

أي واحد يستخدم؟

في سطر الأوامر ، ليس هناك الكثير للاختيار من بينها. ولكن نظرًا لأنه يتعين عليك استخدام sudo مع runuser أي حال ، فيمكنك أيضًا استخدام sudo بمفرده.

ولكن في البرنامج النصي ، يعد runuser الأمر المفضل.

ذات صلة: 10 أوامر Linux أساسية للمبتدئين