سؤال

وكيف يمكنني التحقق من المشرف امتيازات لمخطوطتي أثناء تشغيل؟

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

المحلول

في يونكس يمكنك التحقق ما إذا كنت الجذر باستخدام نظام التشغيل. getuid وظيفة :

os.getuid() == 0 and "root" or "not root"

نصائح أخرى

ومفهوم "مشرف امتيازات" في أيامنا غرامة السيطرة امتياز الحبيبات أصبح من الصعب تحديد. إذا كنت تعمل على يونيكس مع "التقليدي" نموذج التحكم في الوصول، والحصول على هوية المستخدم الفعلي (متوفر في وحدة نظام التشغيل) والتأكد من ضد الجذر (0) يمكن أن يكون ما كنت تبحث عنه. إذا كنت تعرف الوصول إلى ملف على النظام يتطلب من الامتيازات التي تريد النصي أن يكون لديك، يمكنك استخدام os.access () للتحقق مما إذا كنت متميز بما فيه الكفاية.

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

والسؤال الكلاسيكي، لماذا تحتاج إلى معرفة؟ ماذا لو يحاول السيناريو الخاص بك أن تفعل ما يتعين عليها القيام به و"عادل" المصيد وبشكل صحيح يعالج الفشل؟

إذا كنت مجرد محاولة لمعرفة ما إذا كان لديك حق الوصول إلى ملف معين يتطلب حقوق إدارية، سيكون وسيلة جيدة للتحقق على النحو التالي:

import os
print os.access("/path/to/file", os.W_OK) 
#replace W_OK with R_OK to test for read permissions

من ناحية أخرى، إذا كنت حقا بحاجة إلى معرفة ما إذا كان المستخدم هو الحساب الإداري، يمكنك أيضا استخدام هذا الرمز على ويندوز 2000 وأعلى:

import ctypes
print ctypes.windll.shell32.IsUserAnAdmin()

لذلك، لذلك، طريقة أفضل عبر منصة لمعرفة ما إذا كان المستخدم مسؤول هو:

import ctypes, os
try:
 is_admin = os.getuid() == 0
except:
 is_admin = ctypes.windll.shell32.IsUserAnAdmin()

print is_admin

وبطبيعة الحال، فإن هذا الأسلوب يكشف إلا إذا كان المستخدم <ط> الجذر على يونكس، أو هو عضو في مجموعة المسؤولين على ويندوز. ومع ذلك، وهذا يكفي بالنسبة لمعظم الأغراض، في رأيي.

لاحظ أيضا أن هذا ستفشل على إصدارات ويندوز أدناه عام 2000، فضلا عن ويندوز ME، منذ تلك هي إصدارات ويندوز DOS المستندة وليس لديهم أي فكرة من الأذونات.

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