2013-08-20 58 views
2

我已經修改了例如Python腳本:Python的PAM非交互式認證

service = 'passwd' 

if len(sys.argv) == 3: 
    user = sys.argv[1] 
    password = sys.argv[2] 
else: 
    print 'error' 

auth = PAM.pam() 
auth.start(service) 
if user != None: 
    auth.set_item(PAM.PAM_USER, user) 
auth.set_item(PAM.PAM_CONV, pam_conv) 
try: 
    auth.authenticate() 
    auth.acct_mgmt() 
except PAM.error, resp: 
    print 'Go away! (%s)' % resp 
except: 
    print 'Internal error' 
else: 
    print 'Good to go!' 

這工作,但要求我輸入密碼。我想要驗證作爲參數傳遞的密碼(sys.argv [2])。文檔是不存在的,所以我應該怎麼做?

回答

2

的例子第一線丟失。 提供的'pam_conv'功能向用戶詢問密碼。 你必須定義你自己的函數返回一個恆定的密碼:

def pam_conv(auth, query_list, userData): 
    return [(the_password,0)] 
+1

請你詳細說明一下嗎?密碼不能被硬編碼... – michelemarcon