Làm cách nào để chạy các ứng dụng GUI với quyền root bằng cách sử dụng pkexec?


14

Tôi đang sử dụng Trisquel GNU / Linux-Libre đi kèm với Môi trường máy tính để bàn Gnome3 Flashback .

Tôi biết rằng tôi có thể chạy ứng dụng GUI với quyền root sudo& & gksudotôi muốn biết rằng Làm cách nào để chạy ứng dụng GUI với quyền root với sự trợ giúp của pkexec?

Khi tôi cố chạy gedit(hoặc bất kỳ ứng dụng nào khác như nautilus:) pkexec geditthì nó sẽ nhắc mật khẩu để xác thực: -

ảnh chụp màn hình

Sau khi nhập mật khẩu, nó thoát với lỗi: -

$ pkexec gedit
error: XDG_RUNTIME_DIR not set in the environment.

(gedit:6135): Gtk-WARNING **: cannot open display:

Vì vậy, có vẻ như một cái gì đó đang đi sai với môi trường hiển thị.

Tôi cũng đã thử với DISPLAY=:0 pkexec geditnhưng không hoạt động.


Thông tin sau đây có sẵn từ man pkexec: -

Môi trường mà PROGRAM sẽ chạy nó, sẽ được đặt thành một môi trường an toàn và được biết đến tối thiểu để tránh việc tiêm mã thông qua LD_LIBRARY_PATH hoặc các cơ chế tương tự. Ngoài ra, biến môi trường PKEXEC_UID được đặt thành id người dùng của quá trình gọi pkexec. Do đó, pkexec sẽ không cho phép bạn chạy các ứng dụng X11 với tư cách là một người dùng khác vì các biến môi trường $ DISPLAY và $ XAUTHORITY không được đặt. Hai biến này sẽ được giữ lại nếu chú thích org.freedesktop.policykit.exec.allow_gui trên một hành động được đặt thành giá trị không trống; tuy nhiên, điều này không được khuyến khích và chỉ nên được sử dụng cho các chương trình cũ.

Bây giờ tôi không biết phải làm gì để thực hiện điều này.

Vì vậy, hãy giúp tôi tìm hiểu Cách chạy các ứng dụng GUI bằng root bằng phương tiện pkexec. Hay điều này có thể hay không?


BTW, Lấy cảm hứng từ gparted-pkexeclệnh hoạt động tốt. gpartedSử dụng như thế nào pkexec?


(Sau này được tìm thấy) Liên quan: Làm thế nào để cấu hình pkexec?
Pandya

Kiểm tra liên kết này nó làm việc cho tôi.
TinyRickHole

Câu trả lời:


10

Nó có thể được thực hiện bằng cách thêm các hành động tùy chỉnh vào bộ chính sách. Nếu bạn muốn chạy gedit với quyền root, pkexecbạn phải tạo tệp mới /usr/share/polkit-1/actions/org.freedesktop.policykit.gedit.policychẳng hạn:

<?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="org.freedesktop.policykit.pkexec.gedit">
    <description>Run gedit program</description>
    <message>Authentication is required to run the gedit</message>
    <icon_name>accessories-text-editor</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>

Cuối cùng pkexec geditnên làm việc như mong đợi.


Truy cập manpage hoặc Tài liệu tham khảo giải thích nó với VÍ DỤ như: -

$ man pkexec | grep -i ^Example -A 60
EXAMPLE
       To specify what kind of authorization is needed to execute the program /usr/bin/pk-example-frobnicate as
       another user, simply write an action definition file like this

           <?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>

             <vendor>Examples for the PolicyKit Project</vendor>
             <vendor_url>http://hal.freedesktop.org/docs/PolicyKit/</vendor_url>

             <action id="org.freedesktop.policykit.example.pkexec.run-frobnicate">
               <description>Run the PolicyKit example program Frobnicate</description>
               <description xml:lang="da">Kør PolicyKit eksemplet Frobnicate</description>
               <message>Authentication is required to run the PolicyKit example program Frobnicate (user=$(user), program=$(program), command_line=$(command_line))</message>
               <message xml:lang="da">Autorisering er påkrævet for at afvikle PolicyKit eksemplet Frobnicate (user=$(user), program=$(program), command_line=$(command_line))</message>
               <icon_name>audio-x-generic</icon_name>
               <defaults>
                 <allow_any>no</allow_any>
                 <allow_inactive>no</allow_inactive>
                 <allow_active>auth_self_keep</allow_active>
               </defaults>
               <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/pk-example-frobnicate</annotate>
             </action>

           </policyconfig>

       and drop it in the /usr/share/polkit-1/actions directory under a suitable name (e.g. matching the namespace of
       the action). Note that in addition to specifying the program, the authentication message, description, icon
       and defaults can be specified. Note that occurences of the strings $(user), $(program) and $(command_line) in
       the message will be replaced with respectively the user (of the form "Real Name (username)" or just "username"
       if there is no real name for the username), the binary to execute (a fully-qualified path, e.g.
       "/usr/bin/pk-example-frobnicate") and the command-line, e.g. "pk-example-frobnicate foo bar". For example, for
       the action defined above, the following authentication dialog will be shown:

           [IMAGE][2]

               +----------------------------------------------------------+
               |                     Authenticate                     [X] |
               +----------------------------------------------------------+
               |                                                          |
               |  [Icon]  Authentication is required to run the PolicyKit |
               |          example program Frobnicate                      |
               |                                                          |
               |          An application is attempting to perform an      |
               |          action that requires privileges. Authentication |
               |          is required to perform this action.             |
               |                                                          |
               |          Password: [__________________________________]  |
               |                                                          |
               | [V] Details:                                             |
               |  Command: /usr/bin/pk-example-frobnicate                 |
               |  Run As:  Super User (root)                              |
               |  Action:  org.fd.pk.example.pkexec.run-frobnicate        |
               |  Vendor:  Examples for the PolicyKit Project             |
               |                                                          |
               |                                  [Cancel] [Authenticate] |
               +----------------------------------------------------------+

Vâng, cuối cùng tôi cũng tìm thấy nó trong manpage ( man pkexec)!
Pandya

Bạn có thể giúp tôi tại unix.stackexchange.com/q/204638/66804 không?
Pandya

@Pandya, lỗi thực sự là "Từ chối cung cấp dịch vụ cho cha mẹ đã chết", có một số báo cáo lỗi khi tôi tìm kiếm nó. Để giải quyết, bạn có thể tạo tệp thực thi trong / usr / local / bin có chứa một cái gì đó như: #! / bin / sh "pkexec" "nautilus" và chạy nó với F7. Tôi nghĩ rằng nó sẽ làm việc.
Taliezin

ĐỒNG Ý. Tôi đã thử bằng cách thực hiện mà đang hoạt động tốt với F7.
Pandya

2
Tôi thực sự thất vọng vì một công cụ như vậy buộc tôi phải cấu hình một cái gì đó bên ngoài / etc và tệ hơn nữa là / usr / share thay vì / usr / local / share.
cháu gái
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.