Kapan menggunakan pkexec vs. gksu / gksudo?

77

Ada dua cara umum untuk menjalankan aplikasi secara grafis sebagai root (atau, lebih umum, sebagai pengguna lain). Program seperti gksu,, gksudodan kdesudomerupakan antarmuka grafis untuk sudo. Sebaliknya, pkexecadalah antarmuka grafis untuk PolicyKit .

Ketika menjalankan program secara manual sebagai root (atau sebagai pengguna non-root lainnya), apa keuntungan / kerugian penggunaannya pkexec, jika dibandingkan dengan metode tradisional menggunakan sudofrontend?

Eliah Kagan
sumber

Jawaban:

25

PolicyKit lebih dapat dikonfigurasi, meskipun pkexectidak menggunakan konfigurasi ini. Juga, pkexectunjukkan kepada pengguna path lengkap dari program yang akan dimulai, untuk itu pengguna sedikit lebih yakin apa yang akan terjadi. Apa yang disebut 'kebijakan' dari PolicyKit dapat digunakan untuk mengatur lebih banyak pengaturan uang muka. Misalnya, apakah kata sandi harus diingat.

Sesuatu yang saya dapatkan dari pkexecmanual:

Lingkungan tempat PROGRAM menjalankannya, akan ditetapkan ke lingkungan minimal yang diketahui dan aman untuk menghindari menyuntikkan kode melalui LD_LIBRARY_PATH atau mekanisme serupa. Selain itu variabel lingkungan PKEXEC_UID diatur ke id pengguna dari proses yang memanggil pkexec. Akibatnya, pkexec tidak akan mengizinkan Anda untuk menjalankan mis. Aplikasi X11 sebagai pengguna lain karena variabel lingkungan $ DISPLAY tidak disetel.

Informasi lebih lanjut tentang kebijakan atau definisi tindakan dari pkexecmanual:

   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).
RobinJ
sumber
1
Saya kira saya seharusnya mengatakan ada dua untuk menjalankan aplikasi sebagai root dengan otentikasi grafis . Saya berasumsi ada cara yang digunakan pkexecuntuk menjalankan aplikasi grafis (saya belum pernah melakukannya ...). Jawaban Anda menjelaskan mengapa tidak ada (atau setidaknya mengapa lingkungan khusus harus ditentukan, untuk melakukannya).
Eliah Kagan
1
Namun saya punya satu pertanyaan tentang jawaban Anda - ketika sebuah program dijalankan sebagai root pkexec, dalam arti apa kemampuannya ("izin") dibatasi? Saya memberikan program kemampuan untuk melakukan apa pun ketika saya menjalankannya dengan sudoatau sebuah sudofrontend ... dalam arti apa menjalankan program sebagai root dengan pkexectidak juga melakukan ini?
Eliah Kagan
3
Saya memahami bahwa PolicyKit digunakan untuk memungkinkan program melakukan hanya jenis tindakan tertentu. Tetapi apakah pkexecmemfasilitasi itu, atau pkexechanya menjalankan hal-hal sebagai root dengan kemampuan tidak terbatas? The pkexeckutipan pengguna Anda termasuk dalam dokumen jawaban Anda bagaimana menulis aturan untuk menentukan siapa yang dapat menjalankan program sebagai root (atau yang lain, pengguna non-root), daripada program apa yang bisa dilakukan.
Eliah Kagan
4
Saya ingin menerima jawaban Anda, karena memberikan banyak informasi yang baik. Tapi saya merasa itu sangat menyesatkan, karena dikatakan pkexeclebih dapat dikonfigurasi daripada sudo, dan mengingat diskusi yang kami lakukan di komentar, sepertinya tidak demikian. Apakah Anda mempertimbangkan untuk mengedit jawaban Anda untuk menjelaskan sudokonfigurabilitas dan membandingkan / membandingkannya dengan pkexec, atau mengedit jawaban Anda untuk mengatakan bahwa perbedaannya adalah sesuatu selain konfigurasiabilitas?
Eliah Kagan
2
"cukup tulis" dan kemudian sepotong XML. Saya membutuhkan tawa itu.
Jürgen A. Erhard
14

Dengan sudo Anda dapat mengatur per pengguna dan kebijakan program tentang apakah akan mempertahankan atau mereset lingkungan pemanggil dalam konteks sudo. Kebijakan env_reset diatur secara default.

Anda tidak dapat menjalankan aplikasi grafis melalui pkexec tanpa secara eksplisit mengonfigurasinya untuk melakukannya. Karena ini hanyalah hasil dari pengaturan ulang lingkungan, hal ini juga berlaku untuk sudo. Namun perlu dicatat bahwa baik pkexec maupun sudo tidak dapat mencegah aplikasi jahat berjalan sebagai root untuk mengambil semua informasi yang diperlukan dari manajer tampilan atau file cookie pengguna X11. Yang terakhir, keduanya atau serupa, bahkan dapat dilakukan oleh aplikasi non root tergantung pada keadaan.

Sudo tidak memerlukan daftar pengguna yang eksplisit. Mendaftarkan grup pengguna apa pun atau bahkan menetapkan izin untuk semua pengguna secara umum dapat dilakukan. Arahan target_pw memungkinkan pengguna untuk mengotentikasi dengan kredensial pengguna dalam konteks siapa yang ingin mereka jalankan aplikasi, yaitu root. Selain itu, program su (g / gtksu / kdesu) yang sama tradisionalnya dapat digunakan untuk melakukan hal yang sama tanpa konfigurasi khusus.

sudo juga memungkinkan pengguna untuk tetap diautentikasi untuk waktu yang ditentukan. Opsi ini bernama batas waktu, dapat dikonfigurasi secara global, per pengguna, atau per aplikasi. Otentikasi dapat dipertahankan per tty atau secara global per pengguna.

Walaupun pkexec mungkin tidak melakukan validasi dari ARGUMENTS yang diteruskan ke PROGRAM, sudo memang memiliki fitur ini. Diakui, Anda dapat dengan mudah mengacaukan ini, dan itu biasanya tidak dilakukan.

Anda dapat mengubah sedikit bagaimana Anda ingin program dijalankan melalui pkexec: ikon, teks untuk ditampilkan, Anda bahkan dapat memiliki hal-hal pelokalan dan semua itu. Tergantung pada keadaan ini memang bagus. Sedih, bahwa seseorang merasakan kebutuhan untuk menemukan kembali roda untuk fitur ini. Ini mungkin akan menjadi sesuatu untuk dimasukkan ke dalam pembungkus gtksudo / kdesu grafis.

Policykit hanya kerangka konfigurasi terpusat saat itu. Sayangnya bukan yang cantik. File XML XML PK jauh lebih rumit daripada aplikasi apa pun yang bisa menyediakan file biner secara native. Dan tidak ada yang akan jadi looney untuk menggunakan biner ... oh gconf ... sudahlah.

Paul Hänsch
sumber
8
Saya downvoted karena posting ini tidak benar-benar jawaban, itu kritik terhadap jawaban lain. Jika Anda merasa bahwa itu biasanya pilihan yang lebih baik untuk menggunakan sudo daripada pkexec, katakan demikian, jelaskan poin Anda dengan bantahan ini.
Flimm
4
Terima kasih Paul, untuk banyak analisis bermanfaat di sini! Tapi saya juga setuju dengan Flimm. Bisakah Anda memulai dengan jawaban sederhana untuk pertanyaan seperti yang diajukan?
nealmcb
1
Tidak, pkexec dapat menjalankan GUI tanpa mengkonfigurasi: askubuntu.com/a/332847/89385
akostadinov
8

Beberapa hal pkexecyang berbeda dari sudodan bagian depannya:

  1. Anda tidak dapat menjalankan aplikasi grafis melalui pkexectanpa secara eksplisit mengkonfigurasi untuk melakukannya.
  2. Anda dapat mengubah sedikit bagaimana Anda ingin program dijalankan melalui pkexec: ikon, teks untuk ditampilkan, apakah akan mengingat kata sandi atau tidak, apakah akan memungkinkannya berjalan secara grafis dan beberapa lagi.
  3. Siapa saja dapat menjalankan "Jalankan sebagai" pengguna super (asalkan mereka dapat mengotentikasi seperti itu), dengan sudoAnda harus terdaftar dalam sudoersfile sebagai admin .
  4. gksudomengunci keyboard, mouse, dan fokus ketika meminta kata sandi, pkexectidak. Namun dalam kedua kasus penekanan tombol dapat didengar .
  5. Dengan pkexecAnda bekerja di lingkungan yang sedikit lebih bersih.

Coba misalnya:

cd /etc/init.d
sudo cat README
# and now the same with pkexec
pkexec cat README
# nice, huh?
mengatur
sumber
Poin bagus (# 3) tentang bagaimana Anda dapat mengautentikasi sebagai pengguna lain untuk menjalankan program rootbersama pkexec. Apakah dapat dikonfigurasi, pengguna mana yang dapat menggunakan pkexecsama sekali (bahkan jika mereka tahu kata sandi pengguna lain yang diizinkan melakukannya)? sudapat dikonfigurasi dengan cara ini. Ketika saya mencoba untuk sunon- rootpengguna lain seperti guestpada sistem Oneiric, itu memberitahu saya bahwa saya tidak diizinkan untuk melakukannya. (Sebaliknya, ketika saya mencoba menggunakan pkexecseperti guestpada Oneiric atau Precise, saya mendapatkan apa yang tampak seperti kesalahan pernyataan, yang dapat segera saya laporkan sebagai bug, karena saya seharusnya tidak mendapatkannya meskipun tidak diizinkan.)
Eliah Kagan
2
Tetapi sudodan bagian depannya juga dapat diubah seperti dijelaskan pada poin 2. Anda dapat menjalankan program dengan gksuatau gksudo menampilkan teks yang disesuaikan , berhenti membutuhkan kata sandi beberapa pengguna dengan mengedit /etc/sudoers(dengan visudo), dan mengubah berapa lama mereka diingat dalam arti mengubah cara lama waktu yang diperlukan untuk sudo untuk time out (meskipun saya tidak yakin bagaimana melakukan ini di Ubuntu, yang dikonfigurasi sehingga pertanyaan apakah sudoperlu atau tidak perlu kata sandi, dan berapa lama sampai perlu lagi, adalah khusus terminal) ).
Eliah Kagan
# 4 tidak benar jika Anda menggunakan GNOME Shell.
muru
Tidak, pkexec dapat menjalankan GUI tanpa mengkonfigurasi: askubuntu.com/a/332847/89385
akostadinov