首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Linux Distro中创建基于root密码的登录脚本?

如何在Linux Distro中创建基于root密码的登录脚本?
EN

Stack Overflow用户
提问于 2013-10-30 15:42:27
回答 1查看 1.7K关注 0票数 0

我在Linux Distro中有一个web应用程序,其中我使用root密码按用户登录。通过调用系统命令来更改root密码,我可以使用cgi程序在c中从'password change‘html页面更改root密码。

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

但现在我面临的问题是,我不知道如何使登录页面起作用。(如何使用root密码登录?我应该在那里使用什么类型的cgi?或者我应该调用openwrt中已经存在的脚本?)我在/bin文件夹中找到了一个脚本login.sh,但它是登录脚本(下面给出的脚本)吗?

代码语言:javascript
复制
#!/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是如何做到这一点的?

我希望问题是清楚的。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-10-30 16:32:23

最好是通过PAM去

代码语言:javascript
复制
/usr/share/doc/python-pam/examples/pamtest.py

在你的shell上点击这个,你就可以得到想法了

或者,如果您正在寻找CGI脚本,可以使用此link

或者这里的bash脚本 link

这是在stackEchange的unix和linux中讨论的。

这是Python脚本

代码语言:javascript
复制
#!/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!'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19676497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档