سؤال

يوجد نص 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top