Bagaimana cara mengkonfigurasi pkexec?

32

Membaca pertanyaan dan jawaban ini:

membawakan saya satu lagi yang akan menciptakan masalah bagi pengguna baru dari perintah itu:

  • Bagaimana cara mengkonfigurasi pkexecagar mudah digunakan?

Misalnya ketika melakukan hal berikut:

(Membuka file di terminal)

pkexec nano /etc/mysql/my.cnf  

(Membuka file dalam GUI)

pkexec gedit /etc/mysql/my.cnf  

Yang terakhir mendapatkan kesalahan berikut:

 pkexec must be setuid root

Sekarang ini membawa saya pertanyaan-pertanyaan berikut:

  1. Bagaimana cara mengkonfigurasi pkexecuntuk menghindari hal ini? Mirip dengan bagaimana sudo/ gksuberperilaku ketika melakukan hal yang sama (mereka hanya meminta kata sandi).

  2. Jika berlaku, bagaimana cara mengatakannya untuk tidak meminta kata sandi setelah pertama kali menerapkannya pada perintah (atau termasuk perintah pertama jika dapat dikonfigurasi)?

  3. Di mana menyimpan file konfigurasi jika belum ada?

  4. Apakah ada aplikasi GUI untuk mengonfigurasi pkexecpenggunaan (Kit Kebijakan)?

Luis Alvarado
sumber
1
Dalam leiu Ubuntu mengurus bisnis dalam hal ini di 13.04 ini adalah apa yang saya lakukan untuk gedit & nautilus. Berfungsi baik-baik saja di sini tetapi tidak akan memposting sebagai jawaban karena itu hanya solusi saya sampai waktu seperti Ubuntu ditangani. ubuntuforums.org/…
doug
Hmm, tidak dapat menambahkan komentar - jadi harus menggunakan jawaban ... Menggunakan: alias pkexec = 'pkexec env DISPLAY = $ DISPLAY XAUTHORITY = $ XAUTHORITY' Berarti bahwa login gui mengembalikan path env daripada perintah akhirnya dieksekusi. Apakah ada cara untuk mengatur penggunaan "env DISPLAY = $ DISPLAY XAUTHORITY = $ XAUTHORITY" sehingga pkexec gui mengembalikan path ke perintah yang pada akhirnya dieksekusi? Lihat gambar di sini: kotak dialog

Jawaban:

39

Bagaimana cara mengonfigurasi pkexecuntuk menghindari kesalahan saat menjalankan aplikasi GUI?

Saya menemukan dua cara yang mungkin:

  1. Seperti yang Anda lihat, gunakan yang berikut:

    pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
    

    tidak akan membuat Anda kesalahan. Dan ini normal karena man pkexecsangat jelas dalam hal ini:

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

    Sebagai hasilnya, Anda dapat membuat alias ( permanen ) (ini adalah cara paling sederhana):

    alias pkexec='pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY'
    
  2. Atau, (lagi) seperti yang man pkexecdikatakan:

           [...] 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.[...]
    

    Anda dapat membuat file kebijakan baru dengan /usr/share/polkit-1/actionsnama com.ubuntu.pkexec.gedit.policydengan kode xml berikut di dalam mana hal yang paling penting adalah untuk menetapkan org.freedesktop.policykit.exec.allow_guinilai kosong:

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

Bagaimana cara mengatakannya untuk tidak meminta kata sandi setelah pertama kali menerapkannya pada perintah?

Selama tiga tag pengaturan ini: allow_any, allow_inactivedan allow_activedari file kebijakan, tersedia pilihan berikut:

  • tidak : Pengguna tidak diizinkan untuk melakukan tindakan. Karena itu tidak perlu untuk otentikasi.
  • ya : Pengguna diizinkan untuk melakukan tindakan tanpa otentikasi apa pun.
  • auth_self : Otentikasi diperlukan tetapi pengguna tidak perlu menjadi pengguna administratif.
  • auth_admin : Otentikasi sebagai pengguna administratif diperlukan.
  • auth_self_keep : Sama seperti auth_self tetapi, seperti sudo, otorisasi berlangsung beberapa menit.
  • auth_admin_keep : Sama dengan auth_admin tetapi, seperti sudo, otorisasi berlangsung beberapa menit.

     Sumber: Polkit - Struktur - Tindakan

Jadi, jika Anda menggunakan opsi auth_admin_keep (atau, sebagaimana berlaku, auth_self_keep ), pkexectidak akan meminta kata sandi lagi untuk beberapa waktu (secara default waktu ini diatur ke 5 menit saat saya memeriksa). Kerugiannya di sini adalah bahwa hal ini hanya berlaku untuk satu - perintah / aplikasi yang sama dan berlaku untuk semua pengguna (kecuali jika ditolak di konfigurasi selanjutnya).

Di mana menyimpan file konfigurasi jika belum ada?

File konfigurasi atau definisi polkit dapat dibagi menjadi dua jenis:

  • Tindakan didefinisikan dalam file XML .policy yang terletak di /usr/share/polkit-1/actions. Setiap tindakan memiliki seperangkat izin default yang melekat padanya (mis. Anda perlu mengidentifikasi sebagai administrator untuk menggunakan tindakan GParted). Default dapat ditolak tetapi mengedit file tindakan BUKAN dengan cara yang benar. Nama file kebijakan ini harus memiliki format ini:

    com.ubuntu.pkexec.app_name.policy
  • Aturan otorisasi didefinisikan dalam file JavaScript .rules. Mereka ditemukan di dua tempat: paket pihak ke-3 dapat digunakan /usr/share/polkit-1/rules.d(meskipun sedikit jika ada) dan /etc/polkit-1/rules.duntuk konfigurasi lokal. File .rules menunjuk subset pengguna, merujuk ke satu (atau lebih) tindakan yang ditentukan dalam file tindakan dan menentukan dengan batasan apa tindakan ini dapat diambil oleh pengguna tersebut. Sebagai contoh, file aturan dapat mengesampingkan persyaratan default untuk semua pengguna untuk mengotentikasi sebagai admin saat menggunakan GParted, menentukan bahwa beberapa pengguna tertentu tidak perlu melakukannya. Atau tidak diizinkan menggunakan GParted sama sekali.

     Sumber: Polkit - Struktur

Apakah ada aplikasi GUI untuk mengkonfigurasi pkexecpenggunaan?

Dari yang saya tahu, sampai sekarang (18.01.2014) tidak ada yang seperti ini. Jika di masa depan saya akan menemukan sesuatu, saya tidak akan lupa untuk memperbarui jawaban ini juga.

Radu Rădeanu
sumber
4
jawaban yang sangat indah !! Terima kasih banyak. Sekarang saya mengerti mengapa saya tidak bisa menjalankan doublecmddengan ROOT PRIVELEGES, karena saya perlu mengekspor lingkungan dengan DISPLAY & XAUTHORITY!! Hanya pertanyaan kecil: Apakah ada perbedaan dalam kebijakan penulisan atau hanya menjalankan program dengan perintah pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY doublecmdsepanjang waktu?
Ilia Rostovtsev
@IliaRostovtsev ini saya pikir, akan pkexecmenjadi tidak aman seperti gksudojika dijalankan melalui alias seperti itu? mungkin, alih-alih alias bisa jadi skrip dengan hak akses root, bisa lebih aman?
Aquarius Power
@AquariusPower Dengan cara apa Anda melihatnya bisa menjadi tidak aman? Anda bisa mencobanya tentu saja, tetapi saya tidak yakin. Masalah muncul ketika Anda perlu menggunakan GUI (X Server) yang berjalan di bawah 'Anda' dan program GUI lain yang perlu dijalankan sebagai root. Silakan bermain-main dan kirim kembali, jika Anda menemukan sesuatu.
Ilia Rostovtsev
@ radu-rădeanu Pada Utopic auth_admin_keepsepertinya tidak berhasil. Jika saya memulai sinaptik dari gui (yang setara dengan pkexec synaptic) ia meminta kata sandi untuk setiap waktu. Ada yang tahu kenapa?
Khurshid Alam
0

Selain jawaban Radu: Saya tidak akan menggunakan alias pkexec, tetapi gksudo .

Mengapa? Anda tidak perlu menulis ulang skrip Anda.

Saya menggunakan konfigurasi berikut:

  • buka terminal
  • cd /usr/local/bin
  • sudo gedit gksudo (buat file baru bernama "gksudo"
  • tulis konten berikut:

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

    • (jangan lupa $@di bagian akhir. Ini untuk mengarahkan ulang semua parameter)

  • Simpan dan keluar

  • membuat file dapat dieksekusi: chmod 755 gksudo
  • Sekarang Anda harus memiliki perintah gksudo yang berfungsi penuh tersedia di sistem Anda - secara permanen.

Untuk alasan dokumentasi, saya akan menulis, apa yang saya coba dan tidak berhasil:

  • alias pkexec = 'pkexec env [...]'
  • alias gksudo = 'pkexec [...]'
    • Tidak permanen dan hanya tinggal di satu terminal tunggal
  • menambahkan alias ke ~/.bash_aliases
    • Bekerja jika Anda pertama kali membuka terminal. Tidak berfungsi, jika Anda menggandakan skrip
  • Buat tautan ke pkexec dengan parameter ( ln -s pkexec [...])
    • Setelah googleing cepat, sepertinya linux tidak mendukung parameter dalam tautan
TheTrowser
sumber