0

     Linux Distro Openwrt に Web アプリケーションがあり、ユーザーによるログインに root パスワードを使用しています。システムコマンドを呼び出してルートパスワードを変更することにより、cのcgiプログラムを使用して「パスワード変更」htmlページからルートパスワードを変更できました。

system("(echo 'newpassword'; sleep 1; echo 'newpassword') | passwd 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 はどのようにそれを行っていますか? ...

質問が明確であることを願っています。

ありがとう。

4

1 に答える 1

0

ベストは PAM 経由の Go です

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

シェルでこれをヒットすると、アイデアが得られます

または、CGIスクリプトを探している場合は、このリンクを使用できます

または bash スクリプトはこちらのリンク

これは、stackEchange の unix & 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!'
于 2013-10-30T08:32:22.603 に答える