كيفية تشغيل الأوامر كمستخدم آخر في برامج Linux النصية
نشرت: 2022-07-13بطبيعة الحال ، عندما تقوم بتشغيل أمر أو برنامج نصي ، يقوم النظام بتنفيذه كعملية تم إطلاقها بواسطتك. ولكن يمكنك تشغيل الأوامر والبرامج النصية كمستخدم آخر.
العمليات لها مالكون
عند تنفيذ برنامج أو نص برمجي ، ينشئ Linux عملية. هذه العملية لها مالك. المالك هو إما عملية أخرى أو اسم حساب مستخدم إذا أطلقه شخص ما.
تحدد ملكية العملية بعض القدرات والبيئة الخاصة بالعملية. اعتمادًا على كيفية بدء العملية ، فإنها ترث سمات معينة من العملية الأصلية أو المستخدم. أو ، بشكل أكثر صرامة ، العملية التي استخدمها المستخدم لبدء تشغيل البرنامج والتي عادة ما تكون قذيفة.
يمكن أن يكون تشغيل أمر أو برنامج نصي كمستخدم آخر مفيدًا لأن ملكية أي ملفات تم إنشاؤها بواسطة العملية ستنتمي إلى المستخدم المناسب.
في كل مرة نستخدم فيها 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 و 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
هذه المرة أبلغ البرنامج النصي أن مالك العملية هو 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"
لاحظ أن الأمر لا يحتاج إلى المسار الكامل للملف. يمكننا الرجوع إلى الملف بنفس الطريقة التي تستخدمها ماري ، بالنسبة إلى دليل منزلها.
كمستخدم ديف ، سنقوم بإنشاء نص برمجي يسمى "run-maryq.sh" مع هذا النص بداخله:
#! / بن / باش runuser -l maryq -c "cat mary.txt"
سنجعله قابلاً للتنفيذ:
chmod + x run-maryq.sh
دعونا نرى ما يحدث عندما نحاول تشغيله.
./run-maryq.sh
يشتكي الأمر runuser
لأنه يتم تنفيذه بواسطة مستخدم عادي. لنقم بتشغيله مرة أخرى مع sudo
.
sudo ./run-maryq.sh
يعمل هذا كما نرغب ، تمامًا كما لو أن ماري أطلقت النص بنفسها.
أي واحد يستخدم؟
في سطر الأوامر ، ليس هناك الكثير للاختيار من بينها. ولكن نظرًا لأنه يتعين عليك استخدام sudo
مع runuser
أي حال ، فيمكنك أيضًا استخدام sudo
بمفرده.
ولكن في البرنامج النصي ، يعد runuser
الأمر المفضل.
ذات صلة: 10 أوامر Linux أساسية للمبتدئين