我在Linux Distro Openwrt中有一个Web应用程序,我使用root密码登录用户。我可以通过调用system命令更改root密码,使用c中的cgi程序从'密码更改'html页面更改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 :(得分:0)
Best is Go via PAM
/usr/share/doc/python-pam/examples/pamtest.py
在你的shell上点击这个,你就可以了解
或者,如果您正在寻找CGI脚本,可以使用此link
或bash脚本 link
这在unix&amp; amp; stackEchange的linux
这是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!'