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/sudoers
yang 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 pkexec
dialog muncul menanyakan kata sandi pengguna. Tampaknya di Ubuntu, panggilan ke sudo
dari 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.
sumber
sudo somecommand
, kotak dialog yang muncul adalahpkexec
dialog kata sandi, terlepas dari apakah ada kebijakan sudoers yang memungkinkan eksekusi program.Jawaban:
Tidak benar untuk mengatakan bahwa: "Sepertinya di Ubuntu, panggilan
sudo
dari GUI entah bagaimana sedang dicegat olehpkexec
" .pkexec
tidak memiliki banyak kesamaan dengansudo
. Berbeda dengansudo
,pkexec
tidak 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:Klik Detail dan jendela dialog akan terlihat seperti:
Dari sini yang harus Anda lakukan adalah membuka file menggunakan misalnya perintah berikut:
/usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy
dan ubah baris berikut:
dengan berikut ini:
Simpan file dan tutup. Selanjutnya, ketika Anda akan membuka GParted Anda tidak akan diminta kata sandi lagi.
sumber
gparted
. Ketika Anda menjalankan dari terminalsudo gparted
, Anda menjalankan/usr/sbin/gparted
file dengan hak akses root. Ketika Anda mulaigparted
dari GUI, Anda memulai sebenarnyagparted-pkexec
(Anda dapat memverifikasi/usr/share/applications/gparted.desktop
file di dalam ini ) yang merupakan/usr/bin/gparted-pkexec
skrip shell yang tujuannya adalah untuk menjalankan perintah berikut:pkexec "/usr/sbin/gparted"
yang setara denganpkexec gparted
. Jadi, tidak ada hubungannya dengansudo
. Dan perintah ini harus Anda gunakan di terminal, bukansudo gparted
.sudo
harus digunakan hanya untuk aplikasi shell, bukan aplikasi GUI. Lihatman sudo
danman pkexec
dalam pengertian ini.