Bagaimana mengkonfigurasi pkexec agar tidak meminta kata sandi?

12

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

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

Apa yang biasanya saya lakukan dalam situasi ini adalah menambahkan baris /etc/sudoersyang memungkinkan pengguna untuk mengeksekusi daemon sebagai root tanpa kata sandi, menggunakan arahan NOPASSWD. Ini berfungsi dengan baik dari baris perintah. Namun, ketika saya melakukan ini dari GUI, sebuah pkexecdialog muncul menanyakan kata sandi pengguna. Tampaknya di Ubuntu, panggilan ke sudodari GUI entah bagaimana sedang dicegat oleh pkexec.

Apakah ada cara yang bersih di sekitar ini? Saya benar-benar lebih suka tidak harus berurusan dengan kerepotan skrip setuid.

Chinmay Kanchi
sumber
Tentang aplikasi apa Anda berbicara?
Radu Rădeanu
Aplikasi GUI apa pun. Ketika aplikasi GUI mencoba untuk menjalankan sudo somecommand, kotak dialog yang muncul adalah pkexecdialog kata sandi, terlepas dari apakah ada kebijakan sudoers yang memungkinkan eksekusi program.
Chinmay Kanchi

Jawaban:

14

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

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

autentikasi gparted

Klik Detail dan jendela dialog akan terlihat seperti:

autentikasi gparted - detail

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

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 berikut ini:

      <allow_any>yes</allow_any>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>

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

Radu Rădeanu
sumber
Ya, pkexec memang mencegat panggilan ke sudo. Biarkan saya melihat apakah saya dapat membangun contoh minimal perilaku ini.
Chinmay Kanchi
Saya tidak dapat meniru ini dalam aplikasi sederhana, itu mungkin hanya terjadi dalam beberapa situasi yang sangat spesifik dan saya tidak punya waktu untuk melacak bug. Saya akan menerima jawaban Anda. Bersulang.
Chinmay Kanchi
@ChinmayKanchi Mari lebih jelas. Saya akan ambil contoh lagi gparted. Ketika Anda menjalankan dari terminal sudo gparted, Anda menjalankan /usr/sbin/gpartedfile dengan hak akses root. Ketika Anda mulai gparteddari GUI, Anda memulai sebenarnya gparted-pkexec(Anda dapat memverifikasi /usr/share/applications/gparted.desktopfile di dalam ini ) yang merupakan /usr/bin/gparted-pkexecskrip shell yang tujuannya adalah untuk menjalankan perintah berikut: pkexec "/usr/sbin/gparted"yang setara dengan pkexec gparted. Jadi, tidak ada hubungannya dengan sudo. Dan perintah ini harus Anda gunakan di terminal, bukan sudo gparted.
Radu Rădeanu
1
@ChinmayKanchi sudoharus digunakan hanya untuk aplikasi shell, bukan aplikasi GUI. Lihat man sudodan man pkexecdalam pengertian ini.
Radu Rădeanu
Ya, saya menyadari kedua poin Anda. Situasi saya adalah saya memiliki aplikasi GUI (ditulis oleh saya) yang mencoba meluncurkan program shell (daemon, juga ditulis oleh saya) menggunakan sudo. Untuk beberapa alasan, melakukan ini menghasilkan pkexec dipanggil alih-alih sudo, yang berarti bahwa kebijakan sudo apa pun yang saya buat untuk daemon diabaikan.
Chinmay Kanchi