unix - شرح - اوامر باروت




كيفية كتابة برنامج نصي شل الذي يقوم بتشغيل بعض الأوامر كما الخارق وبعض الأوامر لا كما الخارق ، دون الحاجة إلى رعايته؟ (3)

إذا كنت تستخدم هذا ، تحقق من man sudo أيضا:

#!/bin/bash

sudo echo "Hi, I'm root"

sudo -u nobody echo "I'm nobody"

sudo -u 1000 touch /test_user

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

#!/bin/bash

command1
sudo command2
command3
sudo command4

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

#!/bin/bash

sleep 310
sudo echo "Hi, I'm root"
sleep 310
sudo echo "I'm still root?"

كيف يمكنني جعله بحيث يمكن للمستخدم إدخال كلمة المرور الخاصة به مرة واحدة ، في البداية ، ثم المشي؟

تحديث:

شكرا على الردود. أنا أعمل على نظام Mac OS X Lion ونفذ برنامج Stephen P وحصلنا على نتائج مختلفة: (لقد أضفت أيضًا $ HOME)

[email protected] scratch$ ./test2.sh
uid is 501
user is pair
username is 
home directory is /Users/pair
[email protected] scratch$ sudo ./test2.sh 
Password:
uid is 0
user is root
username is root
home directory is /Users/pair

حسنا ، لديك بعض الخيارات.

يمكنك تكوين sudo لعدم المطالبة بكلمة مرور. هذا غير مستحسن ، بسبب المخاطر الأمنية.

يمكنك كتابة برنامج نصي متوقع لقراءة كلمة المرور وتزويده sudo عند الحاجة ، ولكن هذا عالي الكعب وهشة.

أود أن أوصي بتصميم النص البرمجي للتشغيل كجذر وإسقاط امتيازاته عندما لا تكون هناك حاجة إليه. ببساطة يكون ذلك الأمر sudo -u someotheruser command للأوامر التي لا تتطلب الجذر.

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


يجب عليك تشغيل البرنامج النصي بأكمله كمستفيد. إذا كنت ترغب في تشغيل بعض الأوامر باعتبارها غير متميزة ، استخدم خيار "-u" من sudo:

#!/bin/bash

sudo -u username command1
command2
sudo -u username command3
command4

عند التشغيل كجذر ، لا يطلب sudo كلمة مرور.





sudo