2011-03-07 14 views
16

Linux'ta Python'da sistem düzeyinde bir proje yapıyorum. Bu yüzden, eğer sistem dosyalarına erişiyorsam kodumu normal kullanıcı olarak çalıştırıyorsam ve ise, bunun için root izinlerine sahip olması gerektiğini, , root şifresini nasıl sorabileceğimi ve daha fazla kodu nasıl çalıştıracağımı bilmek istiyorum. süper. Bunu bilmek istiyorum, parola istemcisi olarak python betiği superuser olarak nasıl çalıştırılır ..kimlik doğrulaması root olarak çalışmak için

Herhangi bir yardım memnuniyetle karşılanacaktır.

cevap

26

başka şey yapabileceğiniz .. şimdiden teşekkürler

import os 
import sys 

euid = os.geteuid() 
if euid != 0: 
    print "Script not started as root. Running sudo.." 
    args = ['sudo', sys.executable] + sys.argv + [os.environ] 
    # the next line replaces the currently-running process with the sudo 
    os.execlpe('sudo', *args) 

print 'Running. Your euid is', euid 

Çıktı:

Script not started as root. Running sudo.. 
[sudo] password for bob: 
Running. Your euid is 0 
o kök olarak yürütülen değildi eğer script otomatik sudo çağırmak zorunda olduğu

Test için, sudo zaman damgasını temizlemek için komut dosyasını çalıştırırsanız, parolanızı tekrar gerektirecek şekilde sudo -k'u kullanın.

+0

olarak komut yeniden kullanıcı çağırmak için zorlar Eğer uygulama bir GUI varsa (soru olarak pygtk ile etiketlendiğinden beri, ben varsayım), gksudo Muhtemelen yerine kullanılmalıdır. Bununla birlikte, daha iyi bir seçenek, bunu destekleyen OS'ler için [PolicyKit] kullanmaktır (http://en.wikipedia.org/wiki/PolicyKit). –

+1

Bu yükseliş taktiği için ham istisnayı tercih ederim. –

+1

Bence bu tarz bir teknik doğru bağlamda tamamdır. Belirli işlemleri gerçekleştirmek için kök izinleri gerektiren GUI tabanlı bir yükleyici oluşturuyorsa, kullanıcıyı bilgilendirmek ve kök almak için uygun iletişim kutusunu başlatabilir. Örneğin, yazılım kurulumunun çoğunlukla GUI güdümlü olduğu ve çoğu kullanıcının CLI'nin mevcut olduğunun farkında olmadığı Mac OS'yi ele alın. Bu bağlamda bir istisnayı yükseltmek bir seçenek değildir. – samplebias

5
import os 
euid = os.geteuid() 
if euid != 0: 
    raise EnvironmentError, "need to be root" 
    exit() 

Bu senaryonun ortasında sormaz ziyade kullanıcıyı zorlayacaktır sudo ile yeniden yapmak veya kök olarak

+1

Bu cevabı daha çok tercih ediyorum. –

+0

Tamam, anladım, ama eğer kullanıcı süper kullanıcı olarak çalıştıracak şekilde kimlik doğrulaması yapmak istiyorsa, ona şifre vermek için ona SU ayrıcalıkları vermek istemiyorum. Yukarıdaki kodları kullanarak parola isteyebilirim. Verilen şifrenin doğru olduğunu ve eğer doğruysa, diğer kodumu SU olarak nasıl çalıştırabilirim? Lütfen, bunu normal kullanıcı için çalışma zamanında yapmak istiyorum. –

+0

sudo/su tutamacının parolayı doğru bir şekilde yazmasına izin verin, EUID'nin 0 olup olmadığını kontrol edin, sonra çalıştığını anlayacaksınız. @samplebias aynı program devam ederken nasıl yapılacağını gösterdi, benim cevabım root – loosecannon