2013-10-30 24 views
0

         我在Linux Distro Openwrt中有一个Web应用程序,我正在使用root用户密码登录。我可以通过调用system命令来更改root密码,使用c中的cgi程序从“密码更改”html页面更改root密码。如何在Linux Distro Openwrt中根据root密码创建登录脚本?

system("(echo 'newpassword'; sleep 1; echo 'newpassword') | passwd root");

       现在我面临的问题是,我没有得到如何使登录页面的功能。(如何使用root密码登录?什么样的CGI我应该在那里使用?或者我应该调用一个可能已经在openwrt中的脚本?)。我在/ bin文件夹中找到了脚本login.sh,但是这是一个登录脚本(脚本在下面给出)?

#!/bin/sh 
if (! grep -qs '^root:[!x]\?:' /etc/shadow || \ 

! grep -qs '^root:[!x]\?:' /etc/passwd) && \ 
[ -z "$FAILSAFE" ] 

then 

    echo "Login failed." 
    exit 0 


else 

cat << EOF 



=== IMPORTANT ============================ 
    Use 'passwd' to set your login password 
    this will disable telnet and enable SSH 
------------------------------------------ 

EOF 
fi 
exec /bin/ash --login 

如何LUCI这样做?..

我希望这个问题是清楚的。

谢谢。

+0

或许你应该使用PAM(可插拔认证模块) 它会检查可以使用用于任何服务或应用程序的操作系统的用户凭据 – Ashish

回答

0

最好是通过PAM

/usr/share/doc/python-pam/examples/pamtest.py 

打这个对你的shell,你可以得到的想法

或者,如果你正在寻找CGI脚本可以在这里使用这个link

或bash脚本 link

这是讨论unix & linux的stackEchange

下面是Python的脚本

#!/usr/bin/env python 

import sys 
import PAM 
from getpass import getpass 

def pam_conv(auth, query_list, userData): 

    resp = [] 

    for i in range(len(query_list)): 
     query, type = query_list[i] 
     if type == PAM.PAM_PROMPT_ECHO_ON: 
      val = raw_input(query) 
      resp.append((val, 0)) 
     elif type == PAM.PAM_PROMPT_ECHO_OFF: 
      val = getpass(query) 
      resp.append((val, 0)) 
     elif type == PAM.PAM_PROMPT_ERROR_MSG or type == PAM.PAM_PROMPT_TEXT_INFO: 
      print query 
      resp.append(('', 0)) 
     else: 
      return None 

    return resp 

service = 'passwd' 

if len(sys.argv) == 2: 
    user = sys.argv[1] 
else: 
    user = None 

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!' 
相关问题