Bagaimana cara saya memanggil dialog untuk otentikasi?

13

Saya menulis program gui menggunakan modul wx dengan python. Dalam program kapan pun saya mengakses folder yang memerlukan hak akses root maka ia meminta kata sandi di terminal tetapi saya ingin menampilkan dialog kepada pengguna untuk memasukkan kata sandi dan mengautentikasi dia. Bagaimana cara memanggil dialog itu dan mengautentikasi pengguna di ubuntu?

rupali
sumber
Anda menulis bahwa "meminta kata sandi di terminal" apakah itu berarti Anda memanggil perintah terminal sudo dari python?
TLE
Saya pikir kemungkinan Anda harus menggunakan PolicyKit daripada sudo, tetapi saya tidak memiliki cukup pengetahuan tentang Python atau PolicyKit untuk menulis jawaban yang baik menjelaskan caranya. Mungkin orang lain bisa.
Eliah Kagan
Bagaimana Anda akan menggunakan ini? hanya menjalankan perintah
daisy

Jawaban:

9

Ada dua Q & As yang berbeda di stackoverflow menjawab pertanyaan Anda: di sini dan di sini .

Kedua jawaban menggunakan perintah gksudo(sudah disebutkan oleh @khamer). Jika Anda menjalankan gksudo command(juga tanpa python) pada dasarnya akan melakukan apa yang sudodilakukan, tetapi dengan antarmuka grafis - yaitu meminta kata sandi pengguna dan kemudian menjalankan perintah sebagai root jika pengguna berada dalam file sudoers.

Untuk mengimplementasikan solusi yang disarankan dari jawaban yang ditautkan dalam python, Anda dapat menggunakan sesuatu seperti yang ditunjukkan oleh contoh berikut:

Buat file run.py:

#!/usr/bin/python

import subprocess
subprocess.call(['gksudo','python create.py'])

Dan sebuah file create.py:

#!/usr/bin/python

# Create test file..
f = file("mytestfile", "w")

Kemudian jalankan python run.pydan setelah Anda memasukkan kata sandi Anda, sebuah file yang dimiliki oleh root akan dibuat. Jika Anda menjalankannya, python create.pyitu akan menjadi milik Anda (file tersebut seharusnya tidak ada sebelum menjalankan skrip).

lumbric
sumber
3

Meskipun saya yakin ada solusi python yang lebih bagus, versi turun dan kotor adalah menggunakan gksudo. gksudo melakukan hal yang sama dengan yang dilakukan sudo, kecuali itu menciptakan dialog untuk otentikasi yang Anda sebutkan alih-alih bertanya pada baris perintah.

Lihat https://help.ubuntu.com/community/RootSudo#Graphical_sudo

khamer
sumber
Karena ini adalah pertanyaan tentang pemrograman untuk Ubuntu dengan Python, dapatkah Anda memberikan contoh kode yang menunjukkan cara menggunakan gksu/ gksudodalam program Python?
Eliah Kagan
@EliahKagan Saya menulis jawaban dengan contoh yang diharapkan memenuhi tuntutan Anda! :)
lumbric
0

Masukkan skrip ini dalam kode Anda:

import os

Password = raw_input('Please enter your root password!')

sudo_command = '<your command>'

execute = os.system('echo %s|sudo -S %s' % (Password, sudo_command))
upapilot
sumber