मैं एक छोटा सा यूटिलिटी प्रोग्राम लिख रहा हूं। sudoअगर यह आवश्यक हो तो कुछ करने का प्रयास करना चाहता हूं ।
वह यह है: यदि फ़ाइल अनुमतियां वर्तमान उपयोगकर्ता को किसी विशेष फ़ाइल पर काम करने की अनुमति नहीं देती हैं (और sudoनियम इसकी अनुमति देगा) तो मैं अपनी उपयोगिता को sudoफ़ाइल के स्वामी के रूप में कुछ करना चाहूंगा।
मैं पहले से ही इस क्षमता की जांच करने की उम्मीद कर रहा हूं, क्योंकि मैं पसंद करूंगा कि सिस्टम लॉग विफल sudoप्रयासों से शोर से भर न जाए । जैसा कि sudoअसफलता पर रिपोर्ट करता है: "इस घटना की सूचना दी जाएगी"।
इसलिए, मैं प्रोग्रामिक रूप से जाँच करने की उम्मीद कर रहा हूँ: के माध्यम से चला सकते user <x>हैं ?command <y>sudo
यहाँ समस्या है: जबकि /etc/sudoersउस मानचित्रण में यह रूट-स्वामित्व है और नियमित उपयोगकर्ताओं द्वारा पठनीय नहीं है।
मैं चलाने के लिए एक सबप्रोसेस स्पॉइंग करने पर विचार कर रहा था sudo -l(जो कमांड को आदेश देता है कि वर्तमान उपयोगकर्ता सूडो-रन कर सकता है)। मैं फिर इस के उत्पादन को पार्स करूंगा। हालांकि, यह थोड़ा नाजुक लगता है। आउटपुट में वह जानकारी है जो मैं चाहता हूं, लेकिन ऐसा लगता है कि यह मनुष्यों को पढ़ने के लिए डिज़ाइन किया गया था (प्रोग्रामिक खपत के लिए नहीं)। मुझे नहीं पता कि क्या कोई गारंटी है कि आउटपुट भविष्य में एक ही प्रारूप का पालन करेगा, या विभिन्न प्लेटफार्मों पर।
क्या sudo -lआउटपुट के प्रोग्रामेटिक पार्सिंग को सुरक्षित माना जाता है? यदि नहीं, तो समय से पहले यह निर्धारित करने के लिए कोई बेहतर विकल्प हैं कि क्या एक सुडो कमांड सफल होगा?
(एक्स / वाई पर पृष्ठभूमि: यह उपयोगिता सीमित पहुंच वाले भूमिका खाते द्वारा उपयोग के लिए है। मुझे उम्मीद है कि कुछ अन्य उपयोगकर्ता भी सीमित पहुंच वाले खाते को सुडो नियमों के माध्यम से अपनी फाइलों पर संचालित करने की अनुमति देने के लिए प्रभावी रूप से विकल्प चुन सकते हैं। हालांकि, मैं जीत गया। 'समय से पहले पता करें कि उन अन्य उपयोगकर्ताओं में से कौन सा प्रासंगिक नियम नियम है)