Pertanyaan Bagaimana cara mengkonfigurasi pkexec untuk tidak meminta kata sandi?


Saya memiliki aplikasi GUI yang perlu memanggil daemon (ditulis dengan Python) dengan hak superuser. Saya ingin melakukan ini tanpa meminta pengguna untuk kata sandi.

Karena daemon adalah skrip, saya tidak dapat menyetel bit SUID secara langsung. Saya bisa menulis pembungkus C untuk ini, tapi saya lebih suka tidak menemukan kembali roda, terutama ketika kesalahan di pihak saya dapat menyebabkan keamanan sistem menjadi sangat terganggu.

Apa yang biasanya saya lakukan dalam situasi ini adalah menambahkan garis /etc/sudoers yang memungkinkan pengguna untuk menjalankan daemon sebagai root tanpa kata sandi, menggunakan direktif NOPASSWD. Ini berfungsi dengan baik dari baris perintah. Namun, ketika saya melakukan ini dari GUI, a pkexec dialog muncul menanyakan kata sandi pengguna. Tampaknya di Ubuntu, panggilan ke sudo dari GUI entah bagaimana dihadang oleh pkexec.

Adakah cara yang bersih untuk hal ini? Saya benar-benar lebih suka tidak harus berurusan dengan hassles dari skrip setuid.


10
2017-11-29 11:21


asal


Tentang aplikasi apa yang Anda ucapkan? - Radu Rădeanu
Aplikasi GUI apa pun. Ketika aplikasi GUI berusaha untuk dijalankan sudo somecommand, kotak dialog yang muncul adalah a pkexec dialog kata sandi, terlepas dari apakah ada kebijakan sudoers yang memungkinkan pelaksanaan program. - Chinmay Kanchi


Jawaban:


Tidak pantas mengatakan bahwa: "Sepertinya di Ubuntu, panggilan ke sudo dari GUI entah bagaimana dihadang oleh pkexec". pkexec tidak memiliki banyak kesamaan dengan sudo. Berbeda dengan sudo, pkexec tidak memberikan izin root ke seluruh proses, tetapi memungkinkan tingkat kontrol yang lebih baik dari kebijakan sistem terpusat.

Sekarang, jika Anda ingin menjalankan aplikasi GUI tanpa diminta oleh kata sandi oleh pkexec, ini tidak sulit untuk dilakukan. Mari kita ambil contohnya GParted. Saat Anda membukanya, Anda akan melihat jendela dialog berikut yang menanyakan Anda dengan kata sandi:

gparted authenticate

Klik Detail dan jendela dialog akan terlihat sekarang seperti:

gparted authenticate - details

Dari sini yang harus Anda lakukan adalah membuka /usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy file menggunakan misalnya perintah berikut:

gksu gedit /usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy

dan ubah baris berikut:

      <allow_any>auth_admin</allow_any>
      <allow_inactive>auth_admin</allow_inactive>
      <allow_active>auth_admin</allow_active>

dengan yang berikut:

      <allow_any>iya nih</allow_any>
      <allow_inactive>iya nih</allow_inactive>
      <allow_active>iya nih</allow_active>

Simpan file dan tutup. Selanjutnya, ketika Anda akan terbuka GParted Anda tidak akan diminta kata sandi lagi.


12
2017-12-10 09:29



Ya, pkexec memang mencegat panggilan ke sudo. Biarkan saya melihat apakah saya dapat membangun contoh minimal dari perilaku ini. - Chinmay Kanchi
Saya tidak dapat mereplikasi ini dalam aplikasi sederhana, mungkin hanya terjadi dalam beberapa situasi yang sangat spesifik dan saya tidak punya waktu untuk melacak bug. Saya akan menerima jawaban Anda. Tepuk tangan. - Chinmay Kanchi
@ChinmayKanchi Mari kita menjadi lebih jelas. Saya akan mengambil contoh lagi gparted. Ketika Anda menjalankan dari terminal sudo gparted, kamu lari /usr/sbin/gparted file dengan hak akses root. Kapan Anda mulai gparted dari GUI, Anda mulai pada kenyataannya gparted-pkexec (Anda dapat memverifikasi ini di dalam /usr/share/applications/gparted.desktop file) yang mana /usr/bin/gparted-pkexec itu adalah skrip shell yang tujuannya adalah untuk menjalankan perintah berikut: pkexec "/usr/sbin/gparted" yang setara dengan pkexec gparted. Jadi, tidak ada hubungannya dengan itu sudo. Dan perintah ini harus Anda gunakan di terminal, bukan sudo gparted. - Radu Rădeanu
@ChinmayKanchi sudo sebaiknya digunakan hanya untuk aplikasi shell, bukan aplikasi GUI. Lihat man sudo dan man pkexec dalam arti ini. - Radu Rădeanu
Ya, saya tahu kedua poin Anda. Situasi saya adalah bahwa saya memiliki aplikasi GUI (ditulis oleh saya) yang mencoba untuk meluncurkan program shell (sebuah daemon, juga ditulis oleh saya) menggunakan sudo. Untuk beberapa alasan, melakukan ini mengakibatkan pkexec dipanggil bukan sudo, yang berarti bahwa setiap kebijakan sudo yang saya buat untuk daemon bisa diabaikan. - Chinmay Kanchi