Apakah ada desktop-netral gksudo?

17

Ada berbagai alat untuk berbagai desktop yang bertujuan untuk menjalankan aplikasi grafis sebagai root. gksudo, kdesudo, empower, Dll ...

Tetapi bagaimana jika saya menulis skrip yang dapat digunakan pada desktop Linux apa pun? Apakah ada xdg-sudosemacam ...? Standar untuk mendapatkan akses sudo di lingkungan desktop?

Oli
sumber

Jawaban:

16

Mengikuti saran @Tachyons, saya meneliti banyak tentang pkexecdan itu luar biasa !

  • Ini adalah bagian dari PolicyKit , paket yang banyak digunakan.
  • Di-host dan disponsori oleh freedesktop.org
  • Default di Gnome , Unity , MATE , Cinnamon , KDE , LXDE dan XFCE , dan mungkin lainnya
  • Bekerja melalui D-Bus, jadi ini sepenuhnya desktop-netral, dengan protokol yang jelas.
  • Dalam banyak DE, ini digunakan di beberapa layanan seperti layar login, shutdown / restart, manajemen disk (udisks / automount) dan sebagainya.

Jadi ya, itu memenuhi semua persyaratan, dan saya kira itu adalah hal yang paling dekat dengan "universal gksudo" .

Yang mengatakan, pkexecadalah front-end command-line untuk PolicyKit. Ada 2 mode operasi dasar:

  • Cukup jalankan seperti yang Anda inginkan sudo, dan Anda mendapatkan prompt GUI yang bagus:

    $ pkexec rm -rf /

pkexec GUI prompt

  • Atau buat file otorisasi PolicyKit untuk aplikasi Anda, masukkan /usr/share/polkit-1/rules.d, dan itu akan memungkinkan banyak penyesuaian dan opsi terkait keamanan, misalnya akses root untuk tindakan tertentu saja, tidak perlu kata sandi untuk orang lain, akses terbatas ke jalur tertentu , dll. Anda dapat menyempurnakan pengaturan Anda dengan rincian yang luar biasa.
MestreLion
sumber
6

Cara yang lebih umum adalah menulis "program pembantu". Program semacam itu akan meminta pengguna untuk kata sandi; jika Anda yakin bahwa, katakanlah, Zenity, sudah diinstal, Anda dapat menggunakannya, jika tidak, Anda harus menulis program helper dengan Python atau sesuatu yang lain yang dapat berinteraksi dengan GUI.

Baca sudomanual untuk opsi -A("askpass") dan -S(stdin).

Dan ingat bahwa ketika Anda menjalankan sudodari skrip Anda, Anda memerlukan opsi -H(home) untuk disimulasikan gksudo.

Metode ini berfungsi dengan baik, tetapi Anda perlu menguji program pembantu secara menyeluruh untuk memastikan bahwa itu bebas bug.

Paddy Landau
sumber
1
Anda juga perlu menangani token xauth lewat di program Anda - yang tidak sepele.
symcbean
4

Tidak, tidak ada cara standar untuk mendapatkan hak root (atau pengguna lain).

Jika Anda ingin kompatibel dengan sistem sebanyak mungkin, jangan anggap seperti itu tetapi beri tahu pengguna bahwa ia harus menjalankan skrip Anda sebagai pengguna tertentu. Kemudian terserah kepada pengguna / admin untuk mengkonfigurasi sistem sehingga skrip Anda dijalankan dengan cara yang benar.

Membuat beberapa saran untuk bagaimana menggunakan sistem otentikasi yang paling umum, seperti su, sudo dan ConsoleKit, akan lebih baik.

Florian Diesch
sumber
Benar untuk awal 2009, tapi untungnya sekarang polkit(sebelumnya PolicyKit) cukup luas untuk dianggap sebagai standar.
MestreLion