سؤال
يوجد نص Shell (/bin/sh ، وليس bash) يتطلب أذونات الجذر للتنفيذ.
إذا تم تشغيله بواسطة مستخدم عادي ، فيجب أن يطلب من المستخدم كلمة مرور للحصول على الوصول إلى الجذر وإعادة تشغيل نفسه.
الآن يستخدم الكود التالي:
if [ $(id -u) -ne 0 ]; then su root -- $0 $@ ; ... fi
هذا يعمل بشكل جيد ، ولكن هناك بعض نظام التشغيل مثل Ubuntu الذي لا يحتوي على كلمة مرور الجذر على الإطلاق. من ناحية أخرى ، تستخدم الكثير من الأنظمة sudo لأذونات الجذر.
السؤال هو: كيف يمكن للنص اكتشاف ما إذا كان يجب استخدامه su
أو sudo
دون أن يطلب من المستخدم إدخال الكثير من كلمات المرور (على سبيل المثال ، أدخل sudo
كلمة المرور ، إذا فشلت - قم بتشغيل su
).
المحلول
لا توجد طريقة مقاومة للرصاص للقيام بذلك ، لأن أي توزيع يمكن أن يضع الملفات بأي طريقة تريدها. غالبًا ما يضع Debian و Ubuntu ملفات النظام في أدلة أخرى غير Red Hat ، على سبيل المثال. من الأسهل بكثير تخصيص البرنامج النصي لنظام التشغيل الذي تم تثبيته عليه.
نصائح أخرى
لا ينبغي. إذا كان البرنامج النصي يتطلب امتيازات الجذر ، فيجب تشغيله كجذر. إنه عمل المستخدم كيف سيحقق ذلك - باستخدام SU أو Sudo أو بعض الآلية الأخرى.
إذا كنت مهتمًا بمشكلات الأمان ولا تريد أن تفعل كل شيء من الجذر ، فيمكنك إسقاط امتيازات الجذر لتلك الأجزاء.
يمكنك إعداد الحساب حتى لا تحتاج إلى كلمة مرور لـ SUDO في /etc /sudoers:
yourusername ALL=(ALL) NOPASSWD: ALL
إذا كنت لا ترغب في القيام بذلك ، فيمكنك إجبارهم على تشغيل البرنامج النصي كجذر. أضف شيئًا كهذا إلى أعلى نص Shell:
if [ "$UID" -ne 0 ]; then
echo "You must be root to run this script"
exit 1
fi
وبهذه الطريقة ، يمكن للمستخدم أن يكون جذرًا كما يختارون (SU أو Sudo).
قم بإنشاء ملف .sh آخر من هذا الملف اتصل بأصلك .sh
ملف مثل -
su - oracle /u01/enlightics/Enlightiks/UploadFTP/ExportScript2.sh
تحقق فيما لو sudo
IST مثبت
SU='su'
which sudo > /dev/null && SU='sudo'
على الرغم من أن هذا لا يجيب تمامًا على سؤالك ، إلا أنه من الجدير بالذكر أنه يمكنك التحقق مما إذا كانت حزمة Sudo مثبتة باستخدام ما يلي:
الأنظمة المستندة إلى دبيان:
dpkg -s sudo
الأنظمة المستندة إلى RPM:
rpm -q sudo