: 쉘스크립트이용한 수백명의 사용자 단한번에 끝내기!
:
: 학교나, 관공서, 군대(?) 등에서 번호나, 일정한 패턴을 가진 아이디로 유저
: 를 생성할때
: 그 작업을 일일히 하자면 아주 따분하고 시간이 많이 걸리게 된다. 그러나,
: 간단한 쉘 스크립트를
: 이용해서, 수천명의 사람도 단 한번에 끝낼수있다. (컴퓨터의 성능에따라 틀
: 리나, 셀러론 300의 서버에서도
: 200명의 사용자는 약 5초정도에 끝났다)
:
: 1. 스크립트의 구성
:
: 스크립트는 3부분으로 나누어진다(필자가만든것이 복잡할수도있다.)
:
: - txtmaker : 유저를 일괄생성하는 프로그램이 참조하는 txt 파일을 생성한
: 다.
: - deltxt : 중복을 방지하기위해 이전에 생성된 txt 파일을 삭제한다.
: - autoadduser : txtmaker 만든 userinfo.txt 파일을 참조하여, 유저를 일괄
: 생성하고 비밀번호를 아이디와 같게한다.
:
: 보안상문제는 상당하게 있을수있다. 일단 이러한 정보를 아는사람이면, 운영
: 자가
: 유저를 생성했을때 이미 비밀번호를 알수있기때문에 그때 위험할 가능성이있
: 다.
: 이러한 가능성을 배제하는 독특한 아이디어는 떠오르지 않는다
;
: (사람들을 믿을뿐이죠
혹시 좋은 아이디어라도?
:
: 2. 스크립트의 소스
:
: # 주의 : 이 예제는 저희 고등학고 의 이니셜을 딴 sdhs에 학번을 결합시켜
: sdhs[학번] 과 같은꼴의 아이디를
: 생성하는 프로그램입니다. sdhs 대신에 어떤것이든 수정이 가능하니, 소스
: 를 잘 보시고 상황에맞게
: 고쳐쓰시기바랍니다.
:
: - txtmaker 의 소스
:
: #!/bin/bash
: echo " 지금부터 $1 사용자부터 $2 사용자까지의 텍스트 파일을 생성합니
: 다."
: echo " 형식 : [0000:0000] "
: limit=$2
: for ((a=$1; a<=limit ; a++))
: do
: echo sdhs$a:sdhs$a >> userinfo.txt
: done
: echo " $1 부터 $2 까지 생성을 완료하였습니다 "
:
: 매우 난잡한 소스다
;; $1 과 $2 가 의미하는것은 쉘에서 다음과같이 입력
: 이 가능하다
:
: #shell> txtmaker 1 9999
:
: 이렇게 하게되면 $1 은 1이되고 9999는 $2 가 되는것이다. 고로 1부터 9999
: 번까지의 파일을 생성하라는
: 말이된다. txtmaker 가 있는 디렉토리에 userinfo.txt 파일이 위치하게되고
: 다른프로그램이 이를 참조하여
: 유저를 일괄생성한다.
:
: - userinfo.txt 의 내용
:
: sdhs1:sdhs1
: sdhs2:sdhs2
: sdhs3:sdhs3
: sdhs4:sdhs4
: sdhs5:sdhs5
: 아이디:비밀번호
:
: 아이디:비밀번호의 꼴입니다. 즉 아이디와 비밀번호가 같게 되는것이죠. 모
: 든사용자의 비밀번호를 똑같게
: 하려면, 저 소스에서 비밀번호에 해당하는 부분을 바꿔주시면되겠죠?
:
: - deltxt 의 소스
:
: #!/bin/bash
: rm -f userinfo.txt
: echo "삭제완료"
:
: 단지 userinfo.txt 파일을 삭제하고, 삭제완료라는 메시지를 출력하는 프로
: 그램입니다.
:
: - autoadduser 의 소스
:
: #!/bin/bash
: for i in `awk -F : '{print $1}' userinfo.txt`
: do
: echo "$i 사용자의 계정생성작업 시작"
: useradd -m -k /webhosting/skel -s /bin/bash -d /home/students/$i -g
: webhost $i
:
: #######################################################################
: ###################
: # /webhosting/skel 대신에 홈디렉토리에 채워질 내용을 담은 디렉토리를 지
: 정해주세요. 스켈레톤디렉토리
: # /bin/bash 대신에 /bin/false 를 하시면 텔넷접속을 막습니다. 그러나
: ftp 데몬에서 쉘이없는 사용자도
: # 로그인이 가능하게 해줘야겠죠?
: # -d 옵션다음에는 홈디렉토리를 정해줍니다.
: # -g 옵션다음에는 기본그룹을 지정해주지요
: #######################################################################
: ###################
:
: echo "$i 사용자의 홈디렉토리, 쉘, 그룹설정완료"
: echo "$i 사용자의 홈디렉토리 권한을 701 로 설정합니다.."
: chmod 701 /home/students/$i
: echo "$i 사용자의 홈디렉토리 권한이 701 로 설정되었습니다.."
: echo "$i 사용자의 public_html 권한을 705 로 설정합니다"
: chmod 705 /home/students/$i/public_html
: echo "$i 사용자의 모든 설정을 완료 하였습니다."
:
: done
:
: echo "지금부터 모든 사용자의 패쓰워드를 일괄적으로 바꿉니다"
: chpasswd < userinfo.txt
: echo "모든사용자의 비밀번호가 일괄적으로 바뀌었습니다"
: echo "모든사용자의 계정세팅이 끝났습니다"
: echo "이전에 생성된 userinfo.txt 파일을 삭제합니다"
: ./deltxt
:
: 쭈욱 따라가보시면 굉장히 쉬운 소스입니다. 마지막에는 deltxt 프로그램을
: 실행시켜서, 유저파일을 삭제하게되죠.
: 중간 중간에 디렉토리의 권한을 www 서비스에 맞게 바꿔즈는 소스가 있습니
: 다.(나름대로 변형이 가능하죠)
:
: 3. 맺음
:
: 저 3개 의 간단한 스크립트로, 학교,관공서 군대 또는 실습중인 학원 등에
: 서 재빨리 계정을 생성할수있습니다.
: 그리고 skel 의 내용안에는 public_html 이 위치해야겠죠? 그리고 ftp 서비
: 스도 가동하셔야겠구요.
: 저의 skel 디렉토리에는 다음과 같은 파일이 존재합니다.
:
: drwxr-xr-x 3 root root 4096 May 9 16:22 .
: drwxr-xr-x 13 root root 4096 May 9 16:31 ..
: -rw-r--r-- 1 root root 24 May 2 15:57 .bash_logout
: -rw-r--r-- 1 root root 233 May 2 16:00 .bash_profile
: -rw-r--r-- 1 root root 125 May 2 15:58 .bashrc
: drwxr-xr-x 2 root root 4096 May 3 13:39 public_html
:
: .bashrc 나 .bash_profile 같은 파일이없으면 사용자가 비밀번호를 변경하
: 려 로그인했을때 약간 낯선 쉘을
: 맞이하게되니까, 넣어주시는게 좋습니다
: public_html 은 apache 에서 정해준 디렉토리에 따라 수정이 가능하죠.
: public_html 안에는 index.html 을 기본으로 넣어줘서 계정 생성이 제대로
: 됐나 확인할수있게합니다.
: 저의 index.html 의 내용은 이렇습니다..
:
: [root@dopesoul public_html]# cat index.html
: <html>
: <title>Welcome to Dopesoul web server</title>
: <body>
: <h1>환영합니다!</h1>
: <br><br>
: 당신은 정상적인 방법에의해 계정을 취득하셨습니다.<br>
: 서버이용에관한 자세한 문의는 관리자에게 해주십시요.<br>
: 당신은 ftp 서버에 접속하거나, 나모웹에디터, 드림위버와같은 WYSIWYG 툴을
: 이용<br>
: 하여, 본 서버에 홈페이지를 등록할수있습니다.<br>
: <br><br>
: - Root 드림 -<br>
: <br>
: 관리자 E-mail : byulkorea at empal.com<br>
: </body>
: </html>
: [root@dopesoul public_html]#
:
:
: 이로써
날림 스크립트로 쉽게쉽게 계정생성하는 법을 알려드렸습니다.
: 아무쪼록 쓸모있게 쓰시길 바라면서! 물러갑니다.. (__)(--)
:
: 질문이 있으시면 plaese e-mail to [byulkorea at empal.com].
이것관 약간 다르다 할 수 있으나...
전 이전에 제로보드에 가입된 회원(영문 아이디만 사용)을 일괄적으로 계정을 만드는 쉘
을 만들었었죠... 그때 비밀번호는 회원 정보에서 생년월일을 따서 비밀번호로 넣었죠...
회원 정보가 없다면 더 나은 방법은 뭐가 있을까...;;
어쨋든 그런 셈이구요... 위 내용에서 두가지 부분만 지적을 한다면...
먼저 계정 등록(adduser 명령어 사용) 시에 비밀번호까지 한꺼번에 설정해 버리면 나을듯...
나중에 별도로 비밀번호를 변경할 필요가 없겠죠 ? adduser 명령어에 비밀번호를 바로 설정
하도록 옵션을 주면 되겠죠.. 그리고...
echo "$i 사용자의 홈디렉토리 권한을 701 로 설정합니다.."
chmod 701 /home/students/$i
echo "$i 사용자의 홈디렉토리 권한이 701 로 설정되었습니다.."
echo "$i 사용자의 public_html 권한을 705 로 설정합니다"
chmod 705 /home/students/$i/public_html
echo "$i 사용자의 모든 설정을 완료 하였습니다."
이 부분...
먼저 홈디렉토리의 권한은 별도로 설정할 피료가 없이...
/etc/login.defs 여기에 UMASK 를 설정해 둔다면 ? 다시 퍼미션 잡을 필요가 없겠죠...
또한 public_html 디렉토리도 skel 디렉토리에서 public_html 디렉토리의 퍼미션이 755 로 되어져
있다면 또다시 퍼미션 잡지 않아도 퍼미션은 skel 에 있는 그대로 유지가 되겠죠...
조금이나마 절차가 간단해 지겠죠 아닌가? 아님 말구
;;
-- irc.ircnara.net ----Hi - http://www.hi.pe.kr/ -=- ICQ#14555857 MSN
A HREF="act.php?o[at]=ma&target=choibit__at__chollian.net">choibit at chollian.net *** 메일로 질문 사절
*** 거부 *** 질문과 답변 게시판을 이용하세요 ***