डब और पॉलिसीकीट का उपयोग करते हुए रूट कार्य


10

कुछ बिंदु पर मेरे आवेदन को प्रशासनिक कार्य करने की आवश्यकता है जैसे कि फाइल को / आदि में बनाना या रूट प्रिवलेज के साथ कमांड चलाना।

मुझे पता है कि सिर्फ एक प्रश्नोत्तर कर सकता है:

os.popen("pkexec foo bar")

लेकिन मुझे यह भी पता है कि यह ऐसा करने का सबसे अच्छा तरीका नहीं है। उपयोगकर्ता के लिए किसी प्रकार का कष्टप्रद, क्योंकि उसे हमेशा सत्र की तरह हैंडलिंग के बजाय अपना पासवर्ड पुन: दर्ज करने की आवश्यकता होती है।

मैं बहुत आशावादी था क्योंकि मुझे प्रामाणिकता के लिए अजगर का उदाहरण मिला ।

यह एक सरल उदाहरण है जो तुरंत काम करता है:

import dbus

bus = dbus.SystemBus()
proxy = bus.get_object('org.freedesktop.PolicyKit1', '/org/freedesktop/PolicyKit1/Authority')
authority = dbus.Interface(proxy,  dbus_interface='org.freedesktop.PolicyKit1.Authority')

system_bus_name = bus.get_unique_name()

subject = ('system-bus-name', {'name' : system_bus_name})
action_id = 'org.freedesktop.policykit.exec'
details = {}
flags = 1            # AllowUserInteraction flag
cancellation_id = '' # No cancellation id

result = authority.CheckAuthorization(subject, action_id, details, flags, cancellation_id)

print result

मैं काफी भोला सोच रहा हूं कि प्राधिकरण के बाद मैं स्क्रिप्ट में कुछ os.popen () - कमांड के साथ जा सकता था। अब मैं बेहतर जानता हूं :(

मैं ऊपर के उदाहरण में टपल-परिणाम देख सकता हूं, लेकिन आगे के प्रलेखन में मुझे इस बिंदु पर जाने के लिए एक कार्य कोड नहीं मिला।

मुझे इस परिणाम के साथ क्या करना है? मुझे उन कार्यों को करने की आवश्यकता कैसे हो सकती है? क्या उपलब्ध तरीकों की पेशकश करने वाले उदाहरणों के साथ एक अजगर संदर्भ है?

मैंने dir () का उपयोग करके प्राधिकरण के तरीकों को सूचीबद्ध करने की कोशिश की, लेकिन कोई सुराग नहीं मिला कि कैसे चलें।

मैं वास्तव में अपने कमबैक का उपयोग करने से बचना चाहता हूं लेकिन यह मेरा आखिरी उपाय होगा। कृपया इसे सही तरीके से करने में मेरी मदद करें :)

धन्यवाद एवं शुभकामनाएँ

आंद्रे

संपादित करें:

चूँकि मैं इसे काम में नहीं लाया था और gksu के साथ अपना कार्यक्रम शुरू करने से मेरा पूर्व समाधान / ऑप्ट / से बाहर काम नहीं करता है, मुझे अंत में कम से कम प्राप्त करने के लिए प्रोग्राम संबंधी अल्पज्ञात कार्य करने के लिए पासवर्ड मांगने के लिए एक हजार मांगना और लागू करना पड़ा। ऐप शोडाउन में एक टी-शर्ट।

मैंने इस समस्या पर ध्यान नहीं दिया क्योंकि मैंने पहली बार जल्दी से शेयर किया था। वहां सब कुछ सही काम हुआ। शुरुआत में पासवर्ड के लिए एक बार पूछना। मैं अभी पूरी तरह से नीचे हूँ। AppShowdown के लिए मेरा योगदान https://launchpad.net/armorforge था । ;-(


मुझे लगता है कि आप StakOverflow में बेहतर जवाब पा सकते हैं। आपको यह सवाल पूछना चाहिए कि वहां कैसे पलायन किया जाए।
jgomo3

जवाबों:


7

एक मौलिक अवधारणा है जिसे आपको पहले समझ लेना चाहिए: पॉलिसीकीट केवल प्राधिकरण को संभालती है, विशेषाधिकार वृद्धि को नहीं। PolicyKit इस सवाल का जवाब देगा: "क्या उपयोगकर्ता इस कार्य को करने के लिए अधिकृत है?", लेकिन यह आपको मूल विशेषाधिकार नहीं देगा।

आमतौर पर उपयोग किया जाने वाला मॉडल DBus सिस्टम सेवा बनाने के लिए है, जो रूट विशेषाधिकारों के साथ चलता है। यह गैर-रूट प्रक्रियाओं से अनुरोध लेगा, यह निर्धारित करने के लिए कि यह प्रक्रिया उस अनुरोध को करने के लिए अधिकृत है या नहीं, यह निर्धारित करने के लिए पॉलिसीकीट का उपयोग करें।

मैंने कुछ साल पहले ubuntuforums.org पर पायथन के साथ PolicyKit और DBus पर एक ट्यूटोरियल लिखा था । सिद्धांत समान हैं, हालांकि इसे कुछ अद्यतन करने की आवश्यकता हो सकती है। मुझे अब बिस्तर पर जाने की आवश्यकता है, इसलिए एक नज़र डालें और मुझे बताएं कि क्या इसे अपडेट करने की आवश्यकता है।


क्या इसका उपयोग वर्चुअलबॉक्स को नियमित उपयोगकर्ता के तहत एक्सटेंशन पैक स्थापित करने की अनुमति देने के लिए किया जा सकता है?
Gryu
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.