سؤال

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

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

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

كانت محاولتي الأولى غير العاملة هي الشوكة sudo -S true مع إغلاق STDIN أو القراءة من /dev/null.ولكن هذا لا يزال يطالب بكلمة المرور وينتظر بضع ثوان.

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

شيء واحد أنا يعرف لا يعمل هو إغلاق STDIN أو توصيله بأنبوب قبل التشغيل sudo -S true.كنت آمل أن يؤدي ذلك إلى فشل المطالبة بكلمة المرور على الفور، لكنها لا تزال تطالب وتتصرف بشكل غريب.أعتقد أنه قد يريد محطة.

هل كانت مفيدة؟

المحلول

مع الإصدارات الأحدث من sudo هناك خيار لهذا الغرض:

sudo -n true

أنا أستعمل true هنا لعدم التشغيل، ولكن يمكنك استخدام أي أمر.

نصائح أخرى

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

وبشكل أكثر تحديدًا، كل ما يحاول البرنامج النصي القيام به قد يكون من الأفضل تنفيذه باستخدام setuid بدلاً من sudo.(يجب علي أيضًا أن أتساءل لماذا يمتلك الكثير من الأشخاص كلمة مرور الجذر.Sudo موجود خصيصًا لتجنب إعطاء الأشخاص كلمة مرور الجذر.)

getent group admin | grep $particular_user

يمكنك استخدام whoami للحصول على المستخدم الحالي.

يحرر:لكن هذا لا يساعدك في معرفة ما إذا كنت لا تزال مرخصًا للقيام بمهام Sudo ...همم..

جري

sudo -S true < /dev/null &>/dev/null

يبدو أنه يعمل، على الرغم من أنه يتأخر لثانية واحدة قبل أن يفشل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top