Pkexec को कैसे कॉन्फ़िगर करें?


32

इन सवालों और जवाबों को पढ़ना:

मुझे एक और एक लाया जो उस कमांड के नए उपयोगकर्ताओं के लिए समस्याएं पैदा करेगा:

  • pkexecआसान उपयोग के लिए कॉन्फ़िगर कैसे करें ?

निम्न कार्य करते समय उदाहरण के लिए:

(टर्मिनल में फ़ाइल खोलना)

pkexec nano /etc/mysql/my.cnf  

(GUI में फ़ाइल खोलना)

pkexec gedit /etc/mysql/my.cnf  

अंतिम वाले को निम्न त्रुटि मिलती है:

 pkexec must be setuid root

अब यह मेरे लिए निम्नलिखित प्रश्न लेकर आया है:

  1. pkexecइसे प्राप्त करने से बचने के लिए कॉन्फ़िगर कैसे करें? समान कार्य करते समय कैसे व्यवहार करें sudo/ कैसे करें gksu(वे केवल पासवर्ड के लिए पूछते हैं)।

  2. यदि लागू हो, तो पहली बार इसे कमांड पर लागू करने के बाद (या पहले से कॉन्फ़िगर योग्य होने पर कमांड सहित) पासवर्ड के लिए नहीं कहने के लिए कैसे बताएं?

  3. यदि अभी तक मौजूद नहीं है, तो कॉन्फ़िगरेशन फ़ाइल को कहाँ सहेजना है?

  4. pkexecउपयोग (नीति किट) को कॉन्फ़िगर करने के लिए कोई GUI ऐप है ?


1
13.04 में इस संबंध में उबंटू की देखभाल करने वाले लेईयू में यह वही है जो मैं गेडिट और नॉटिलस के लिए करता हूं। यहाँ ठीक काम करता है लेकिन उत्तर के रूप में पोस्ट नहीं करेगा क्योंकि यह सिर्फ मेरा समाधान है जब तक कि उबंटू की देखभाल नहीं हो जाती। ubuntuforums.org/…
doug

हम्म, एक टिप्पणी नहीं जोड़ सकते - इसलिए एक उत्तर का सहारा लेना होगा ... का उपयोग कर: उपनाम pkexec = 'pkexec env DISPLAY = $ DISPLAY XAUTHORITY = $ XAUTHORITY' मतलब यह है कि लॉगिन gui कमांड के बजाय env का पथ देता है अंततः निष्पादित किया जा रहा है। क्या "env DISPLAY = $ DISPLAY XAUTHORITY = $ XAUTHORITY" के उपयोग की व्यवस्था करने का कोई तरीका है ताकि pkexec gui कमांड को अंतिम रूप से निष्पादित किया जा सके? यहां देखें तस्वीर: पोलित्क ऑर्ट डायलॉग बॉक्स

जवाबों:


39

pkexecGUI एप्लिकेशन चलाते समय त्रुटियों से बचने के लिए कॉन्फ़िगर कैसे करें ?

मुझे दो संभावित तरीके मिले:

  1. जैसा कि आप देख सकते हैं, निम्नलिखित का उपयोग कर:

    pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
    

    आपको कोई त्रुटि नहीं मिलेगी। और यह सामान्य है क्योंकि man pkexecइस मामले में बहुत स्पष्ट है:

           [...] pkexec will not allow you to run X11 applications
           as another user since the $DISPLAY and $XAUTHORITY environment
           variables are not set.[...]
    

    परिणामस्वरूप आप एक स्थायी ( स्थायी ) उपनाम बना सकते हैं (यह सबसे सरल तरीका है):

    alias pkexec='pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY'
    
  2. या, (फिर से) के रूप में man pkexecकहते हैं:

           [...] These two variables will be retained if the
           org.freedesktop.policykit.exec.allow_gui annotation on an action is set
           to a nonempty value; this is discouraged, though, and should only be
           used for legacy programs.[...]
    

    आप एक नई नीति फ़ाइल बना सकते हैं /usr/share/polkit-1/actionscom.ubuntu.pkexec.gedit.policy निम्नलिखित xml कोड के नाम से जहाँ सबसे महत्वपूर्ण बात org.freedesktop.policykit.exec.allow_guiएक गैर-रिक्त मान पर सेट करना है:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE policyconfig PUBLIC
      "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
      "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
    <policyconfig>
    
      <action id="com.ubuntu.pkexec.gedit">
        <message gettext-domain="gparted">Authentication is required to run gedit</message>
        <icon_name>gedit</icon_name>
        <defaults>
          <allow_any>auth_admin</allow_any>
          <allow_inactive>auth_admin</allow_inactive>
          <allow_active>auth_admin</allow_active>
        </defaults>
        <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/gedit</annotate>
        <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
      </action>
    
    </policyconfig>
    

पहली बार इसे कमांड पर लागू करने के बाद पासवर्ड नहीं पूछने के लिए कैसे कहें?

इन तीन सेटिंग टैग के लिए: allow_any , allow_inactiveऔर allow_activeनीति फ़ाइल से, निम्न विकल्प उपलब्ध हैं:

  • नहीं : उपयोगकर्ता कार्रवाई करने के लिए अधिकृत नहीं है। इसलिए प्रमाणीकरण की कोई आवश्यकता नहीं है।
  • हां : उपयोगकर्ता बिना किसी प्रमाणीकरण के कार्रवाई करने के लिए अधिकृत है।
  • auth_self : प्रमाणीकरण की आवश्यकता है लेकिन उपयोगकर्ता को प्रशासनिक उपयोगकर्ता नहीं होना चाहिए।
  • auth_admin : एक प्रशासनिक उपयोगकर्ता के रूप में प्रमाणीकरण की आवश्यकता होती है।
  • auth_self_keep : के रूप में ही auth_self लेकिन, जैसे sudo, प्राधिकरण के लिए कुछ मिनट तक रहता है।
  • विशेषाधिकार_आदमी_ प्रशासन : जैसे ही , पर_दोस्तों की तरहsudo , प्राधिकरण के लिए कुछ मिनट तक रहता है।

     स्रोत: पोलकिट - संरचना - क्रियाएं

इसलिए, यदि आप Cort_admin_keep विकल्प का उपयोग करते हैं (या, जैसा कि लागू हो,) स्थितीय____ ), pkexecकुछ समय के लिए फिर से पासवर्ड नहीं मांगेगा (डिफ़ॉल्ट रूप से यह समय 5 मिनट के लिए सेट है जैसा कि मैंने जांचा था)। यहां नुकसान यह है कि यह बात केवल एक के लिए लागू होती है - समान - आदेश / आवेदन और सभी उपयोगकर्ताओं के लिए मान्य (जब तक कि यह बाद के कॉन्फ़िगरेशन में अधिलेखित न हो)।

यदि अभी तक मौजूद नहीं है, तो कॉन्फ़िगरेशन फ़ाइल को कहाँ सहेजना है?

कॉन्फ़िगरेशन फ़ाइलों या पोलकिट परिभाषाओं को दो प्रकारों में विभाजित किया जा सकता है:

  • क्रियाएँ XML .policy फ़ाइलों में स्थित हैं /usr/share/polkit-1/actions। प्रत्येक क्रिया में डिफ़ॉल्ट अनुमतियों का एक सेट होता है, (उदाहरण के लिए आपको GParted कार्रवाई का उपयोग करने के लिए एक व्यवस्थापक के रूप में पहचान करने की आवश्यकता होती है)। चूक को समाप्त किया जा सकता है, लेकिन कार्रवाई फ़ाइलों को संपादित करना सही तरीका नहीं है। इस नीति फ़ाइल का नाम इस प्रारूप में होना चाहिए:

    com.ubuntu.pkexec.app_name.policy
  • प्राधिकरण नियम जावास्क्रिप्ट .rules फ़ाइलों में परिभाषित किए गए हैं। वे दो स्थानों पर पाए जाते हैं: 3 पार्टी पैकेज का उपयोग कर सकते हैं /usr/share/polkit-1/rules.d(हालांकि कुछ भी करते हैं) और /etc/polkit-1/rules.dस्थानीय कॉन्फ़िगरेशन के लिए है। .Rules फ़ाइलें उपयोगकर्ताओं के एक सबसेट को नामित करती हैं, क्रिया फ़ाइलों में निर्दिष्ट क्रियाओं में से एक (या अधिक) को संदर्भित करती हैं और यह निर्धारित करती हैं कि इन कार्यों को उन / उन उपयोगकर्ता (उपयोगकर्ता) द्वारा किस प्रतिबंध से लिया जा सकता है। एक उदाहरण के रूप में, एक नियम फ़ाइल GParted का उपयोग करते समय एक व्यवस्थापक के रूप में प्रमाणित करने के लिए सभी उपयोगकर्ताओं के लिए डिफ़ॉल्ट आवश्यकता को समाप्त कर सकता है, यह निर्धारित करते हुए कि कुछ विशिष्ट उपयोगकर्ता की आवश्यकता नहीं है। या GParted का उपयोग करने की अनुमति नहीं है।

     स्रोत: पोलकिट - संरचना

कॉन्फ़िगर करने के लिए कोई GUI अनुप्रयोग है pkexecउपयोग ?

मैं अब तक (18.01.2014) जो कुछ भी जानता हूं, उसमें से कुछ भी ऐसा नहीं है। अगर भविष्य में मुझे कुछ मिलेगा, तो मैं इस जवाब को भी अपडेट करना नहीं भूलूंगा।


4
क्या खूबसूरत जवाब है !! आपका बहुत बहुत धन्यवाद। अब मुझे समझ में आया कि मैं doublecmdROOT PRIVELEGES के साथ क्यों नहीं चल सका , क्योंकि मुझे वातावरण को निर्यात करने की आवश्यकता थी DISPLAY & XAUTHORITY!! बस छोटे प्रश्न: क्या लेखन नीति में कोई अंतर है या केवल pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY doublecmdहर समय कमांड के साथ एक कार्यक्रम चलाने में है?
इलिया रोस्तोवत्से

@IliaRostovtsev यह मैं सोच रहा हूं, क्या इस तरह के उर्फ ​​के pkexecरूप में gksudoचलाने के लिए असुरक्षित हो जाएगा ? हो सकता है, एक उपनाम के बजाय यह रूट विशेषाधिकार के साथ एक स्क्रिप्ट हो सकता है, सुरक्षित हो सकता है?
कुंभ राशि

@AquariusPower किस तरह से आप देखते हैं कि यह असुरक्षित हो सकता है? आप लगभग कोशिश कर सकते हैं, लेकिन मुझे यकीन नहीं है। समस्या तब उत्पन्न होती है जब आपको GUI (X Server) का उपयोग करने की आवश्यकता होती है जो 'आप' और एक अन्य GUI प्रोग्राम के तहत चलता है जिसे रूट पर चलाने की आवश्यकता होती है। यदि आपको कुछ मिलता है, तो कृपया आस-पास और पीछे-पीछे खेलें।
इलिया रोस्तोवत्सेव

@ radu-rădeanu ऑन यूटोपिक auth_admin_keepकाम नहीं करता है। अगर मैं gui से synaptic शुरू करता हूं (जो इसके बराबर है pkexec synaptic) तो यह हर बार पासवर्ड मांगता है। कोई विचार क्यों?
खुर्शीद आलम


0

राडू के जवाब के अलावा: मैं उर्फ pkexec, लेकिन प्रयोग नहीं करेंगे gksudo

क्यूं कर? आपको अपनी स्क्रिप्ट को फिर से लिखने की आवश्यकता नहीं है।

मैं निम्नलिखित विन्यास का उपयोग करता हूं:

  • एक टर्मिनल खोलें
  • cd /usr/local/bin
  • sudo gedit gksudo ("gksudo" नामक नई फ़ाइल बनाएँ
  • निम्नलिखित सामग्री लिखें:

    • pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY $@

    • ( $@अंत में मत भूलना । यह सभी मापदंडों को पुनर्निर्देशित करने के लिए है)

  • सेव करके छोड़ो

  • फ़ाइल को निष्पादन योग्य बनाएं: chmod 755 gksudo
  • अब आपके पास आपके सिस्टम पर पूरी तरह कार्यात्मक gksudo कमांड उपलब्ध होना चाहिए - स्थायी रूप से।

दस्तावेज़ीकरण के कारणों के लिए, मैं लिखूंगा, जो मैंने कोशिश की और काम नहीं किया:

  • उर्फ pkexec = 'pkexec env [...]'
  • अन्य उपनाम = 'pkexec [...]'
    • स्थायी नहीं था और केवल एक ही टर्मिनल में रहता था
  • करने के लिए उपनाम जोड़ने ~/.bash_aliases
    • काम करता है अगर आप पहली बार एक टर्मिनल खोलते हैं। काम नहीं करता है, अगर आप स्क्रिप्ट पर डबल क्लिक करते हैं
  • पैरामीटर के साथ pkexec के लिए एक लिंक बनाएँ ( ln -s pkexec [...])
    • एक त्वरित Googleing के बाद, ऐसा लगता है जैसे लिंक्स लिंक में मापदंडों का समर्थन नहीं करता है
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.