2009-09-22 4 views
5

로컬 유닉스 사용자의 사용자 이름과 패스워드가 맞다면 쉘 스크립트를 체크하고 싶습니다. 가장 쉬운 방법은 무엇입니까?쉘 스크립트에서 유닉스 사용자 이름과 패스워드를 확인하십시오

Google 검색 중에 '예상'과 'su'를 사용하고 'su'가 성공했는지 여부를 어떻게 든 확인했습니다.

+0

수행하려는 작업과 스크립트가 수행하는 작업에 대한 자세한 내용을 확인하십시오. –

답변

4

이제는이 문제를 해결하는 데 사용한 스크립트입니다. 나는 처음에 Aaron Digulla가 용의주의 한 작은 c-programm를 작성하려고했지만 너무 어렵다는 것이 입증되었습니다.

아마도이 스크립트는 다른 사람에게 유용합니다.

#!/bin/bash 
# 
# login.sh $USERNAME $PASSWORD 

#this script doesn't work if it is run as root, since then we don't have to specify a pw for 'su' 
if [ $(id -u) -eq 0 ]; then 
     echo "This script can't be run as root." 1>&2 
     exit 1 
fi 

if [ ! $# -eq 2 ]; then 
     echo "Wrong Number of Arguments (expected 2, got $#)" 1>&2 
     exit 1 
fi 

USERNAME=$1 
PASSWORD=$2 

# Setting the language to English for the expected "Password:" string, see http://askubuntu.com/a/264709/18014 
export LC_ALL=C 

#since we use expect inside a bash-script, we have to escape tcl-$. 
expect << EOF 
spawn su $USERNAME -c "exit" 
expect "Password:" 
send "$PASSWORD\r" 
#expect eof 

set wait_result [wait] 

# check if it is an OS error or a return code from our command 
# index 2 should be -1 for OS erro, 0 for command return code 
if {[lindex \$wait_result 2] == 0} { 
     exit [lindex \$wait_result 3] 
} 
else { 
     exit 1 
} 
EOF 
+0

스크립트의 시작 부분에서'export LC_ALL = C' 명령은 다른 기본 언어를 사용하는 시스템에서 작동하도록 만들었습니다.'Password :'문자열을 기대하므로이 스크립트 실행을 위해 언어를 영어로 설정합니다. http://askubuntu.com/a/264709/18014를 참조하십시오. –

9

사용자 이름과 비밀번호는 /etc/shadow 파일에 기록됩니다. 그냥 거기에 사용자와 암호 해시 (sed 도움이됩니다), 자신의 암호를 해시하고 확인하십시오.

해시를 생성하려면 mkpasswd를 사용하십시오. 버전에 따라 사용중인 소금을 확인해야합니다. 최신 그림자 때문에 sha-512을 사용하고 있습니다 :

mkpasswd -m sha-512 password salt 

맨이 많은 당신을 도울 수 있습니다.

PHP와 pam-aut 모듈을 사용하는 것이 더 쉬울 것입니다. 거기 당신은 그룹 액세스 pwd 사용자에 대한 PHP를 확인하실 수 있습니다.

+1

이 접근 방식의 구현에 대한 자세한 내용은 다음을 참조하십시오. http://ubuntuforums.org/archive/index.php/t-1232715.html –

+0

오, 좋아. 나는이 접근법을 몇 달 전에 혼자서 생각해 내기 위해 6 시간을 소비한다. 이 사이트는 많은 도움이되었을 것입니다. 하지만 웹 인증을 위해이 패키지가 필요했습니다. 그래서 마침내 PHP의 auth-pam 모듈을 사용했습니다. – Hayt

+0

PHP는 어디에 있습니까? o – knittl

0

부분적으로는 사용자 이름을 확인하는 것이고/etc에있는 passwd/shadow 파일에 정의되어 있습니다. 그런 다음 salt로 MD5 암호를 계산하십시오. SSL (또는 적어도 일부 서버 터미널 서비스)을 통해 보낸 사용자 암호가있는 경우.

실제로 나는 당신이 실제로 필요로하는 것을 모르기 때문에 단지 암시입니다. "su"는 주로 인증 용도이기 때문에.

다른 주제는 kerberos/LDAP 서비스이지만 그 중 어려운 주제입니다.

+0

Hayt가 MD5 해시가 아닌 오른쪽이 있습니다. – bua

4

Linux의 경우 pam_authenticate()을 호출하는 작은 C 프로그램을 작성해야합니다. 전화가 PAM_SUCCESS을 반환하면 로그인과 암호가 올바른 것입니다.

관련 문제