วิธีกำหนดค่า 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. มีแอพ GUI สำหรับกำหนดค่าpkexecการใช้งาน (ชุดนโยบาย) หรือไม่


1
ใน leiu ของ Ubuntu ดูแลธุรกิจในเรื่องนี้ใน 13.04 นี่คือสิ่งที่ฉันทำเพื่อ gedit & nautilus ใช้งานได้ดีที่นี่ แต่จะไม่โพสต์เป็นคำตอบเพราะเป็นเพียงโซลูชันของฉันจนกว่าจะถึงเวลาที่ Ubuntu จะดูแล ubuntuforums.org/...
ดั๊ก

อืมไม่สามารถเพิ่มความคิดเห็น - ดังนั้นจึงต้องหันไปใช้คำตอบ ... การใช้: alias pkexec = 'pkexec env DISPLAY = $ DISPLAY XAUTHORITY = $ XAUTHORITY' หมายความว่าล็อกอิน gui ส่งคืนพา ธ ของ env แทนคำสั่ง ในที่สุดถูกประหารชีวิต มีวิธีจัดการการใช้ "env DISPLAY = $ DISPLAY XAUTHORITY = $ XAUTHORITY" หรือไม่เพื่อให้ pkexec gui ส่งคืนพา ธ ไปยังคำสั่งที่ถูกเรียกใช้ในท้ายที่สุด? ดูรูปที่นี่: กล่องโต้ตอบ polkit auth

คำตอบ:


39

วิธีกำหนดค่าpkexecเพื่อหลีกเลี่ยงข้อผิดพลาดเมื่อเรียกใช้แอปพลิเคชัน GUI

ฉันพบวิธีที่เป็นไปได้สองวิธี:

  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/actionsชื่อcom.ubuntu.pkexec.gedit.policyด้วยรหัส xml ต่อไปนี้ภายในซึ่งสิ่งที่สำคัญที่สุดคือการตั้งค่าorg.freedesktop.policykit.exec.allow_guiเป็น nonempty:

    <?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การอนุญาตใช้เวลาไม่กี่นาที
  • auth_admin_keep : เหมือนกับauth_adminแต่เช่นsudoการอนุญาตใช้เวลาไม่กี่นาที

     ที่มา: Polkit - โครงสร้าง - การกระทำ

ดังนั้นหากคุณใช้ตัวเลือกauth_admin_keep (หรือตามความเหมาะสมauth_self_keep ) pkexecจะไม่ถามรหัสผ่านอีกครั้งในบางครั้ง (โดยค่าเริ่มต้นเวลานี้จะถูกตั้งค่าเป็น 5 นาทีตามที่ฉันตรวจสอบ) ข้อเสียของที่นี่คือสิ่งนี้ใช้ได้เฉพาะกับคำสั่ง / แอปพลิเคชันเท่านั้นและใช้ได้สำหรับผู้ใช้ทุกคน (เว้นแต่จะมีการแก้ไขในการกำหนดค่าในภายหลัง)

จะบันทึกไฟล์กำหนดค่าไว้ที่ไหนถ้ายังไม่มี?

ไฟล์การกำหนดค่าหรือคำจำกัดความของ polkit สามารถแบ่งออกเป็นสองชนิด:

  • การดำเนินการที่กำหนดไว้ในไฟล์ XML .policy /usr/share/polkit-1/actionsตั้งอยู่ใน แต่ละการกระทำมีชุดของสิทธิ์เริ่มต้นที่แนบมากับมัน (เช่นคุณต้องระบุว่าเป็นผู้ดูแลระบบเพื่อใช้การกระทำ GParted) ค่าเริ่มต้นสามารถแก้ไขได้ แต่การแก้ไขไฟล์การกระทำไม่ใช่วิธีที่ถูกต้อง ชื่อของไฟล์นโยบายนี้ควรมีรูปแบบนี้:

    com.ubuntu.pkexec.app_name.policy
  • กฎการให้สิทธิ์ถูกกำหนดในไฟล์ JavaScript. rules พบได้ในสองที่: แพ็คเกจของบุคคลที่สามสามารถใช้/usr/share/polkit-1/rules.d(แม้ว่าจะมีจำนวนน้อยก็ตาม) และใช้/etc/polkit-1/rules.dสำหรับการกำหนดค่าท้องถิ่น ไฟล์. rules กำหนดส่วนย่อยของผู้ใช้อ้างอิงหนึ่ง (หรือมากกว่า) ของการกระทำที่ระบุในไฟล์การกระทำและพิจารณาด้วยข้อ จำกัด ว่าการกระทำเหล่านี้สามารถทำได้โดยผู้ใช้นั้น / ผู้ใช้เหล่านั้น ตัวอย่างเช่นไฟล์กฏสามารถลบล้างข้อกำหนดเริ่มต้นสำหรับผู้ใช้ทั้งหมดในการตรวจสอบสิทธิ์ในฐานะผู้ดูแลระบบเมื่อใช้ GParted โดยพิจารณาว่าผู้ใช้บางรายไม่จำเป็นต้องทำ หรือไม่ได้รับอนุญาตให้ใช้ GParted เลย

     ที่มา: Polkit - โครงสร้าง

มีแอพพลิเคชั่น GUI สำหรับตั้งค่าpkexecการใช้งานหรือไม่?

จากสิ่งที่ฉันรู้จนถึงตอนนี้ (18.01.2014) ไม่มีอะไรเช่นนี้ หากในอนาคตฉันจะพบบางอย่างฉันจะไม่ลืมที่จะอัปเดตคำตอบนี้ด้วย


4
คำตอบที่สวยงามคืออะไร !! ขอบคุณมาก. ตอนนี้ฉันเข้าใจแล้วว่าทำไมฉันไม่สามารถเรียกใช้doublecmdรูทสิทธิ์ได้เพราะฉันต้องการส่งออกสภาพแวดล้อมด้วยDISPLAY & XAUTHORITY!! คำถามเล็ก ๆ น้อย ๆ : มีความแตกต่างในการเขียนนโยบายหรือเพียงแค่เรียกใช้โปรแกรมที่มีคำสั่งpkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY doublecmdตลอดเวลา?
Ilia Rostovtsev

@IliaRostovtsev นี้ฉันคิดว่าจะpkexecกลายเป็นไม่ปลอดภัยราวกับgksudoว่าทำงานผ่านนามแฝงเช่น? อาจเป็นแทนนามแฝงซึ่งอาจเป็นสคริปต์ที่มีสิทธิ์ใช้งานรูทได้ปลอดภัยกว่า
กุมภ์กำลัง

@AquariusPower ในทางใดที่คุณเห็นว่ามันอาจไม่ปลอดภัย? คุณสามารถลองแน่นอน แต่ฉันไม่แน่ใจ ปัญหาเกิดขึ้นเมื่อคุณจำเป็นต้องใช้ GUI (X Server) ที่ทำงานภายใต้ 'คุณ' และโปรแกรม GUI อื่นที่ต้องทำงานเป็นรูท ลองเล่นและโพสต์แบ็กในกรณีที่คุณพบบางสิ่ง
Ilia Rostovtsev

@ radu-rădeanu On Utopic auth_admin_keepดูเหมือนจะไม่ทำงาน ถ้าฉันเริ่ม synaptic จาก gui (ซึ่งเทียบเท่ากับpkexec synaptic) มันจะถามรหัสผ่านทุกครั้ง มีความคิดอะไรบ้าง
Khurshid Alam


0

นอกจากนี้ในการตอบราดู: ฉันจะไม่ใช้นามแฝง pkexec แต่gksudo

ทำไม? คุณไม่จำเป็นต้องเขียนสคริปต์ใหม่

ฉันใช้การกำหนดค่าต่อไปนี้:

  • เปิดเทอร์มินัล
  • cd /usr/local/bin
  • sudo gedit gksudo (สร้างไฟล์ใหม่ชื่อ "gksudo"
  • เขียนเนื้อหาต่อไปนี้:

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

    • (อย่าลืม$@ที่สิ้นสุดนี่คือการเปลี่ยนเส้นทางพารามิเตอร์ทั้งหมด)

  • บันทึกและออก

  • ทำให้ไฟล์ปฏิบัติการ: chmod 755 gksudo
  • ตอนนี้คุณควรมีคำสั่ง gksudo ที่ทำงานได้อย่างสมบูรณ์บนระบบของคุณ - อย่างถาวร

ด้วยเหตุผลด้านเอกสารฉันจะเขียนสิ่งที่ฉันพยายามและไม่ได้ผล:

  • alias pkexec = 'pkexec env [... ]'
  • alias gksudo = 'pkexec [... ]'
    • ไม่ถาวรและอยู่ในเทอร์มินัลเดียวเท่านั้น
  • เพิ่มนามแฝงไปที่ ~/.bash_aliases
    • ใช้งานได้หากคุณเปิดเทอร์มินัลเป็นครั้งแรก ไม่ทำงานหากคุณดับเบิลคลิกสคริปต์
  • สร้างลิงก์ไปยัง pkexec พร้อมพารามิเตอร์ ( ln -s pkexec [...])
    • หลังจาก googleing รวดเร็วดูเหมือนว่า linux จะไม่สนับสนุนพารามิเตอร์ในลิงก์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.