Khi nào nên sử dụng pkexec so với gksu / gksudo?


77

Có hai cách chung để chạy các ứng dụng đồ họa dưới dạng root (hay nói chung hơn là người dùng khác). Các chương trình như gksu, gksudokdesudolà tiền đề đồ họa cho sudo. Ngược lại, pkexeclà một giao diện đồ họa cho PolicyKit .

Khi chạy thủ công các chương trình với quyền root (hoặc như một người dùng khác, không phải người dùng root), những lợi thế / bất lợi (nếu có) của việc sử dụng pkexec, so với phương pháp sử dụng sudofrontend truyền thống là gì?




Liên quan (nhưng không phải là bản sao): sudo -i có kém an toàn hơn pkexec không?
Eliah Kagan

Câu trả lời:


25

Chính sách có thể cấu hình nhiều hơn, mặc dù pkexeckhông sử dụng cấu hình này. Ngoài ra, pkexechiển thị cho người dùng đường dẫn đầy đủ của chương trình sẽ được bắt đầu, để người dùng chắc chắn hơn một chút về những gì sẽ xảy ra. Cái gọi là 'chính sách' của PolicyKit có thể được sử dụng để đặt nhiều cài đặt tiến bộ hơn. Ví dụ, liệu mật khẩu nên được ghi nhớ.

Một cái gì đó tôi nhận được từ pkexechướng dẫn:

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 như một người dùng khác vì biến môi trường $ DISPLAY không được đặt.

Thông tin thêm về chính sách hoặc định nghĩa hành động từ pkexechướng dẫn:

   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</message>
           <message xml:lang="da">Autorisering er påkrævet for at afvikle PolicyKit eksemplet Frobnicate</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. 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] |
           +----------------------------------------------------------+

   If the user is using the da_DK locale, the dialog looks like this:

       [IMAGE][3]

           +----------------------------------------------------------+
           |                     Autorisering                     [X] |
           +----------------------------------------------------------+
           |                                                          |
           |  [Icon]  Autorisering er påkrævet for at afvikle         |
           |          PolicyKit eksemplet Frobnicate                  |
           |                                                          |
           |          Et program forsøger at udføre en handling der   |
           |          kræver privilegier. Autorisering er påkrævet.   |
           |                                                          |
           |          Kodeord: [___________________________________]  |
           |                                                          |
           | [V] Detaljer:                                            |
           |  Bruger:   Super User (root)                             |
           |  Program:  /usr/bin/pk-example-frobnicate                |
           |  Handling: org.fd.pk.example.pkexec.run-frobnicate       |
           |  Vendor:   Examples for the PolicyKit Project            |
           |                                                          |
           |                                [Annullér] [Autorisering] |
           +----------------------------------------------------------+

   Note that pkexec does no validation of the ARGUMENTS passed to PROGRAM.
   In the normal case (where administrator authentication is required
   every time pkexec is used), this is not a problem since if the user is
   an administrator he might as well just run pkexec bash to get root.

   However, if an action is used for which the user can retain
   authorization (or if the user is implicitly authorized), such as with
   pk-example-frobnicate above, this could be a security hole. Therefore,
   as a rule of thumb, programs for which the default required
   authorization is changed, should never implicitly trust user input
   (e.g. like any other well-written suid program).

1
Tôi đoán tôi nên nói có hai ứng dụng để chạy root với xác thực đồ họa . Tôi đã giả định rằng có một cách để sử dụng pkexecđể chạy các ứng dụng đồ họa (tôi chưa bao giờ làm như vậy ...). Câu trả lời của bạn giải thích tại sao không có (hoặc ít nhất là tại sao một môi trường tùy chỉnh phải được chỉ định, để làm điều đó).
Eliah Kagan

1
Tôi có một câu hỏi về câu trả lời của bạn, mặc dù - khi một chương trình được chạy bằng root pkexec, theo nghĩa nào thì khả năng ("quyền") có thể bị hạn chế? Tôi cấp cho chương trình khả năng làm bất cứ điều gì khi tôi chạy nó với sudohoặc một sudogiao diện ... theo nghĩa nào thì chạy chương trình với quyền root mà pkexeckhông làm điều này?
Eliah Kagan

3
Tôi hiểu rằng PolicyKit được sử dụng để cho phép các chương trình chỉ thực hiện các loại hành động cụ thể. Nhưng liệu có pkexectạo điều kiện cho điều đó, hoặc pkexecchỉ chạy mọi thứ như root với khả năng không hạn chế? Các pkexectrích đoạn của nhãn hiệu bạn đã bao gồm trong các văn bản trả lời của bạn làm thế nào để viết các quy tắc để xác định ai có thể chạy một chương trình như là người chủ (hoặc là khác, người sử dụng không phải root), chứ không phải là những gì mà chương trình có thể làm.
Eliah Kagan

4
Tôi muốn chấp nhận câu trả lời của bạn, vì nó cung cấp rất nhiều thông tin tốt. Nhưng tôi cảm thấy rằng nó rất sai lệch, bởi vì nó nói rằng pkexecnó có thể cấu hình hơn sudo, và đưa ra các cuộc thảo luận chúng tôi đã có ở đây trong các ý kiến, điều đó dường như không phải là trường hợp. Bạn có xem xét việc chỉnh sửa câu trả lời của mình để giải thích khả sudonăng cấu hình của nó và so sánh / đối chiếu nó với pkexeccâu trả lời hoặc chỉnh sửa câu trả lời của bạn để nói rằng sự khác biệt là một cái gì đó khác với cấu hình không?
Eliah Kagan

2
"Đơn giản chỉ cần viết" và sau đó là một đoạn XML. Tôi cần tiếng cười đó.
Jürgen A. Erhard

14

Với sudo, bạn có thể đặt cho mỗi người dùng và mỗi chính sách chương trình về thời tiết để giữ lại hoặc đặt lại môi trường người gọi trong ngữ cảnh của sudo. Chính sách env_reset được đặt theo mặc định.

Bạn không thể chạy các ứng dụng đồ họa qua pkexec mà không cấu hình rõ ràng để làm như vậy. Bởi vì đây chỉ là kết quả của việc thiết lập lại môi trường, điều này rõ ràng cũng đúng với sudo. Tuy nhiên, xin lưu ý rằng cả pkexec và sudo đều không thể ngăn chặn ứng dụng độc hại chạy bằng root để lấy tất cả thông tin cần thiết từ trình quản lý hiển thị hoặc tệp X11-cookie của người dùng. Cái sau, cả hai hoặc tương tự, thậm chí có thể được thực hiện bởi các ứng dụng không root tùy thuộc vào hoàn cảnh.

Sudo không yêu cầu danh sách rõ ràng của người dùng. Liệt kê bất kỳ nhóm người dùng hoặc thậm chí thiết lập quyền cho tất cả người dùng nói chung đều có thể được thực hiện. Lệnh target_pw cho phép những người dùng đó xác thực bằng thông tin đăng nhập của người dùng trong ngữ cảnh whoose họ muốn chạy một ứng dụng, tức là root. Ngoài ra, chương trình su (su / gtksu / kdesu) truyền thống tương tự có thể được sử dụng để thực hiện tương tự mà không cần cấu hình đặc biệt.

sudo cũng vậy, cho phép người dùng duy trì xác thực trong một thời gian xác định. Tùy chọn này được đặt tên là thời gian chờ, có thể định cấu hình trên toàn cầu, cho mỗi người dùng hoặc mỗi ứng dụng. Xác thực có thể được giữ lại trên mỗi tty hoặc toàn cầu cho mỗi người dùng.

Mặc dù pkexec có thể không xác nhận ARGUMENT được chuyển đến PROGRAM, nhưng sudo thực sự có tính năng này. Mặc dù thừa nhận, bạn có thể dễ dàng gây rối với điều này, và nó thường không được thực hiện.

Bạn có thể điều chỉnh một chút cách bạn muốn các chương trình được chạy qua pkexec: icon, văn bản để hiển thị, thậm chí bạn có thể có nội dung địa phương hóa và tất cả những thứ đó. Tùy thuộc vào hoàn cảnh, điều này có thể được thực sự tiện lợi. Mặc dù buồn, rằng ai đó cảm thấy cần phải phát minh lại bánh xe cho tính năng này. Đây có lẽ sẽ là một cái gì đó để đưa vào các trình bao bọc gtksudo / kdesu đồ họa.

Bộ chính sách chỉ là một khung cấu hình tập trung sau đó. Thật không may, không phải là một người đẹp. Các tệp XML của PK phức tạp hơn bất kỳ thứ gì mà một ứng dụng có thể cung cấp ngắn gọn về các tệp nhị phân. Và không ai sẽ quá lo lắng khi sử dụng nhị phân ... oh gconf ... đừng bận tâm.


8
Tôi đánh giá thấp vì bài đăng này không thực sự là một câu trả lời, đó là một lời chỉ trích về một câu trả lời khác. Nếu bạn cảm thấy rằng nó thường là một lựa chọn tốt hơn để sử dụng sudo trên pkexec, hãy nói như vậy, giải thích quan điểm của bạn với những phản bác này.
Flimm

4
Cảm ơn Paul, vì rất nhiều phân tích hữu ích ở đây! Nhưng tôi cũng đồng ý với Flimm. Bạn có thể bắt đầu với một câu trả lời đơn giản cho câu hỏi như đã hỏi không?
nealmcb

1
Không, pkexec có thể chạy GUI mà không cần định cấu hình: Askubfox.com/a/332847/89385
akostadinov

8

Một vài điều pkexeckhác biệt như thế nào sudovà các mặt trận của nó:

  1. Bạn không thể chạy các ứng dụng đồ họa thông qua pkexecmà không cấu hình rõ ràng để làm như vậy.
  2. Bạn có thể điều chỉnh một chút cách bạn muốn các chương trình được chạy qua pkexec: biểu tượng, văn bản để hiển thị, có nhớ mật khẩu hay không, có cho phép chạy chương trình đồ họa hay không.
  3. Bất kỳ ai cũng có thể chạy "Chạy như" một siêu người dùng (miễn là họ có thể xác thực như vậy), với sudobạn phải được liệt kê trong sudoerstệp dưới dạng quản trị viên .
  4. gksudokhóa bàn phím, chuột và tập trung khi yêu cầu mật khẩu, pkexeckhông. Trong cả hai trường hợp , tổ hợp phím đều có thể đánh hơi được .
  5. Với pkexecbạn làm việc trong một môi trường vệ sinh hơn một chút.

Hãy thử ví dụ:

cd /etc/init.d
sudo cat README
# and now the same with pkexec
pkexec cat README
# nice, huh?

Điểm hay (# 3) về cách bạn có thể xác thực là người dùng khác để chạy các chương trình như rootvới pkexec. Nó có thể cấu hình được không, người dùng có thể sử dụng pkexectất cả (ngay cả khi họ biết mật khẩu của người dùng khác được phép làm như vậy)? sucó thể cấu hình theo cách này. Khi tôi cố gắng để người dùng sukhác không rootsử dụng guesthệ thống Oneiric, nó sẽ cho tôi biết tôi không được phép làm như vậy. (Ngược lại, khi tôi cố gắng sử dụng pkexecnhư guesttrên Oneiric hoặc Chính xác, tôi nhận được lỗi trông giống như lỗi xác nhận, mà tôi có thể sớm báo cáo là lỗi, vì tôi không nên nhận lỗi ngay cả khi không được phép.)
Eliah Kagan

2
Nhưng sudovà các tiêu đề của nó cũng có thể được điều chỉnh như mô tả ở điểm 2. Bạn có thể chạy một chương trình với gksuhoặc gksudo hiển thị văn bản tùy chỉnh , ngừng cần một số mật khẩu của người dùng bằng cách chỉnh sửa /etc/sudoers(với visudo) và thay đổi thời gian họ nhớ theo nghĩa thay đổi như thế nào Mất bao lâu để sudo hết thời gian (mặc dù tôi không chắc cách thực hiện việc này trên Ubuntu, được cấu hình sao cho các câu hỏi có sudocần mật khẩu hay không và bao lâu nữa sẽ cần một mật khẩu, cụ thể là thiết bị đầu cuối ).
Eliah Kagan

# 4 là không đúng nếu bạn đang sử dụng Gnome Shell.
muru

Không, pkexec có thể chạy GUI mà không cần định cấu hình: Askubfox.com/a/332847/89385
akostadinov
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.