질문&답변
클라우드/리눅스에 관한 질문과 답변을 주고 받는 곳입니다.
리눅스 분류

쉘스크립트에서 패스워드 넣는거

작성자 정보

  • 임근식 작성
  • 작성일

컨텐츠 정보

본문

사용자 추가 스크립트(리눅스-비번 암호화)
==========================================
 
리눅스서버용 메신저가 개발되면서 필요했던 기능이었습니다.
설치시에 동시에 몇명의 유저의 추가가 필요했었는데 유용하게 사용했었구요...
예전에 개인홈페이지에 있던 내용을 그대로 가져와서 반말 입니다.
리눅스에서 계정사용자 등록스크립트를 만든다. 아래의 프로그램을 이용하여 여러가지로
적용을 할 것이다. 변수(계정명,패스)를 인자로 두어 추가사용하도록 해도 좋을 것이고,
직접 입력 받도록 해도 좋을 것이다. 그리고 대량의 사용자를 추가해야 할 경우 응용하면
좋은 방법이 될 것이다.

개요 :
기본적으로는 쉘스크립트를 이용하고, crypt하는 소프로그램을 적용시켜 등록한다.
#> useradd -d /home/$1 -g users -G root -p $2 -s /bin/bash $1
위 명령어가 기본적으로 사용될 것이다.
/*-----------------------------------------*/
단, 패스워드는 crypt화 시켜서 올려야 한다.
crypt 프로그램은 C로 작성해서 컴파일 하였다.


프로그램명 : mycrypt
소스파일 : mycrypt.c


※ 맨 아래 부분에 이에 대한 소스(mycrypt.c)와 설명이 있다.
/*-----------------------------------------*/

그래서 이를 이용해서 다시 정리하면서 스크립트를 작성한다.
#> vi myadduser

#!/bin/sh
echo /usr/sbin/useradd -d /home/$1 -p `./mycrypt $2` $1
/usr/sbin/useradd -d /home/$1 -p `./mycrypt $2` $1

로 작성하고
실행권한을 준 다음, 다음과 같이 사용한다.

#> ./myadduser 사용자계정명 패스워드


이상은 개요 및 사용법에 관한 것이고, crypt에 대해서 보충하면,

소스파일 mycrypt.c의 내용

#include [stdio.h]
#include [unistd.h]

int main(int argc, char* argv[])
{
if(argc != 2)
return 1;
puts((char*)crypt(argv[1], "$1$"));
}


이고 컴파일은 아래와 같이 한다.

gcc -o mycrypt -O -lcrypt mycrypt.c

/etc/shadow 에서 패스워드 보면 $1$ 로 시작하는데,
그건 crypt 함수에서 사용되는 encryption key 이다
os의 버전이나 기타 다른 이유로 그 키가 다른 경우가 있는데, 이때는 달라진 키값을 적용해줘야 한다.

/etc/passwd 나 /etc/shadow 파일 열어보면 패스워드 부분의 처음 몇 글자가 똑같은 걸 볼 수 있는데 그게 키 란 것이다.

그 키를 확인한 후 mycrypt.c 에서 그 $1(변수명이 아닌 키 값인것이다. 구분!)을 그 키 값으로 바꿔주고 다시 컴파일 한다.
그럼 됐다.
 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,074 명
  • 현재 강좌수 :  35,995 개
  • 현재 접속자 :  514 명