2013-08-20 55 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