Rooting tugas menggunakan dbus dan policykit


10

Pada titik tertentu aplikasi saya perlu melakukan tugas-tugas administratif seperti membuat file di / etc atau menjalankan perintah dengan root priveleges.

Saya tahu hanya bisa melakukan Q&D:

os.popen("pkexec foo bar")

Tetapi saya juga tahu bahwa ini bukan cara yang bersih untuk melakukannya. Semacam menjengkelkan bagi pengguna karena ia selalu perlu memasukkan kembali kata sandinya daripada memiliki penanganan seperti sesi.

Saya sangat optimis ketika saya menemukan contoh python untuk otentikasi .

Ini adalah contoh sederhana yang bekerja dengan segera:

import dbus

bus = dbus.SystemBus()
proxy = bus.get_object('org.freedesktop.PolicyKit1', '/org/freedesktop/PolicyKit1/Authority')
authority = dbus.Interface(proxy,  dbus_interface='org.freedesktop.PolicyKit1.Authority')

system_bus_name = bus.get_unique_name()

subject = ('system-bus-name', {'name' : system_bus_name})
action_id = 'org.freedesktop.policykit.exec'
details = {}
flags = 1            # AllowUserInteraction flag
cancellation_id = '' # No cancellation id

result = authority.CheckAuthorization(subject, action_id, details, flags, cancellation_id)

print result

Saya sudah cukup naif berpikir bahwa setelah otorisasi saya bisa melanjutkan dalam script dengan beberapa perintah os.popen () -. Sekarang saya tahu lebih baik :(

Saya dapat melihat hasil-tuple pada contoh di atas, tetapi dalam dokumentasi lebih lanjut saya tidak dapat menemukan kode yang berfungsi pada saat ini.

Apa yang harus saya lakukan dengan hasil ini? Bagaimana saya bisa terus melakukan tugas yang saya butuhkan? Apakah ada referensi python dengan contoh-contoh yang menawarkan metode yang tersedia?

Saya mencoba mendaftar metode otorisasi dengan menggunakan dir () tetapi tidak dapat menemukan petunjuk bagaimana untuk melanjutkan.

Saya benar-benar ingin menghindari menggunakan fallback saya tetapi itu akan menjadi pilihan terakhir saya. Tolong bantu saya melakukannya dengan cara yang benar :)

Terima kasih dan salam

André

Edit:

Karena saya tidak membawa ini untuk bekerja dan solusi saya sebelumnya dengan memulai program saya dengan gksu tidak bekerja di / opt /, saya akhirnya harus menyerah dan menerapkan ribuan permintaan kata sandi untuk membuat program berfungsi sebagai program dasar untuk mendapatkan setidaknya T-Shirt dalam showdown aplikasi.

Saya tidak melihat masalah karena saya pertama kali berbagi dengan cepat. Di sana semuanya bekerja dengan baik. Meminta kata sandi sekali di awal. Aku benar-benar sedih sekarang. Kontribusi saya untuk AppShowdown adalah https://launchpad.net/armorforge . ;-(


Saya pikir Anda bisa menemukan jawaban yang lebih baik di StakOverflow. Anda harus meminta pertanyaan ini untuk dimigrasi ke sana.
jgomo3

Jawaban:


7

Ada konsep mendasar yang perlu Anda pahami terlebih dahulu: PolicyKit hanya menangani otorisasi, bukan eskalasi hak istimewa. PolicyKit akan menjawab pertanyaan: "apakah pengguna diizinkan untuk melakukan tugas ini?", Tetapi itu tidak akan memberi Anda hak root.

Model yang umum digunakan adalah untuk membuat layanan sistem DBus, yang berjalan dengan hak akses root. Ini akan mengambil permintaan dari proses non-root, gunakan PolicyKit untuk menentukan apakah proses itu diizinkan untuk membuat permintaan itu, dan kemudian melakukan tugas yang diminta.

Saya menulis tutorial tentang PolicyKit dan DBus dengan Python di ubuntuforums.org beberapa tahun yang lalu. Prinsipnya sama, walaupun mungkin perlu beberapa pembaruan. Saya perlu tidur sekarang, jadi lihatlah dan beri tahu saya jika perlu diperbarui.


Bisakah itu digunakan untuk memungkinkan virtualbox menginstal paket ekstensi di bawah pengguna biasa?
Gryu
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.