द्वारा पाथ पहुंच योग्य है या नहीं, मेरे पास पाइथन (लिनक्स में) में एक इंस्टॉलेशन स्क्रिप्ट लिखा गया है जो रूट के रूप में चलता है और यह जांचने की आवश्यकता है कि कुछ फाइल गैर-रूट उपयोगकर्ता द्वारा पठनीय हैं या नहीं।जांचें कि गैर-रूट उपयोगकर्ता
इस कारण से मैं os.path.exists() या खुले (फ़ाइल नाम) का उपयोग नहीं कर सकता (और किसी भी अपवाद को पकड़ सकता हूं)।
वर्तमान में मैं प्रत्येक फाइल पर अनुमति बिट की जांच करने की सोच रहा हूं, लेकिन एकमात्र समस्या यह है कि मुझे फ़ाइल नाम तक पहुंचने वाले पथ पर अनुमति बिट्स की जांच करनी होगी (निर्देशिकाओं को आर + एक्स की आवश्यकता है बिट्स सेट), अगर मेरे पास हजारों फाइलें हैं तो बहुत धीमी प्रक्रिया हो सकती है।
क्या मेरा समाधान सबसे अच्छा है, या क्या बेहतर विकल्प हैं?
संपादित करें: फाइलों की जांच के बाद मुझे रूट के रूप में स्क्रिप्ट चलाने की आवश्यकता होगी, इसलिए रूट अनुमतियों को छोड़ना दुर्भाग्य से एक विकल्प नहीं है।
65534 अधिकांश आधुनिक ऑपरेटिंग सिस्टम (विंडोज़ से सहायता) पर कोई नहीं है, लेकिन यह सभी पॉज़िक्स सिस्टम पर मौजूद नहीं है। पोर्टेबल अनुप्रयोगों को वास्तव में एक अच्छा ईयूआईडी अनुमान लगाने के लिए थोड़ा और काम करने की आवश्यकता हो सकती है। शायद एप्लिकेशन को passwd फ़ाइल को रूट के रूप में पढ़ने की कोशिश करनी चाहिए (यह सुनिश्चित करने के लिए कि यह मौजूद है), तो passwd फ़ाइल को 65534 के रूप में पढ़ने का प्रयास करें (यह सुनिश्चित करने के लिए कि इसमें अनुमतियां, अपवाद == सफलता नहीं है), फिर लक्ष्य फ़ाइल को पढ़ने का प्रयास करें 65534 (वास्तव में अनुमतियों की जांच करने के लिए), यदि पहले दो विफल हो जाते हैं, तो उपयोगकर्ता को अनुमतियां जांचने के लिए सूचित करें। – SingleNegationElimination
इस दृष्टिकोण के साथ एकमात्र समस्या यह है कि फ़ाइलों की जांच के बाद मुझे रूट के रूप में चलाने के लिए स्क्रिप्ट की आवश्यकता है। –
@teehoo: प्रभावी उपयोगकर्ता को रूट करने के लिए रीसेट करने के लिए आप 'os.seteuid (0)' का उपयोग कर सकते हैं। – unutbu