Unix/유닉스와 디렉토리

AD에 사용자를 대량으로 추가하기

ForceCore 2006. 8. 26. 09:00
http://www.awprofessional.com/articles/article.asp?p=101405&seqNum=12&rl=1

LDIF파일이란 것이 존재한다.

 LDAP Data Interchange Format (LDIF)
....................

LDAP의 데이터를 교환하기위한 포멧 -_-?
LDAP프로토콜과 마찬가지로 이것도 일종의 표준이다.

AD도 LDIF파일을 잘 인식하며, 윈2003에는
ldifde라는 것이 있어 LDIF파일을 인식해 AD에 집어넣고,
혹은 LDIF파일로 뽑아내기 위한 커맨드 툴이 존재한다.

표준이기때문에 유닉스상에서 shell script를 열심히 짜면
AD에 집어넣을 수 있다는 소리다.
(굳이 유닉스 shell을 고집할 필요도 없다...a)

포인트는. 어떻게 LDIF파일을 생성하느냐.
1. web의 php파일로 사용자가 자신의 정보를 입력하도록 한다. -> LDIF파일만 생성. 관리자는 그것을 넣을지 말지 체크.
2. script로 원하는 정보를 입력받은 뒤 LDIF생성 -> AD에 삽입

AD의 사용자가 유닉스 속성까지 있고... AD의 스키마를 알아야지 여러가지 속성을 부여할텐데...
일단은 수동으로 열심히 잘 설정해놓은 유저의 속성을 ldif로 덤프해보자.

http://www.mcse.ms/archive44-2004-12-1295545.html

 으윽 귀찮다 ㅡ,.ㅡ;; 몽땅 덤프 -_-!
ldifde -f output.ldif로 모든 AD의 내용을 output.ldif로 덤프시켰다.
그 중 계정 정보만 끄집어내니 이렇다.

dn: CN=ssanzing2,OU=2005,OU=NormalUsers,DC=SOHEE,DC=xxx,DC=ac,DC=kr
changetype: add
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: ssanzing2
sn: ssanzing2
distinguishedName:
 CN=ssanzing2,OU=2005,OU=NormalUsers,DC=SOHEE,DC=xxx,DC=ac,DC=kr
instanceType: 4
whenCreated: 20060820104540.0Z
whenChanged: 20060825043421.0Z
displayName: ssanzing2
uSNCreated: 16426
uSNChanged: 28832
name: ssanzing2
objectGUID:: lXlkEjnKoE60iQEaog9u6A==
userAccountControl: 512
badPwdCount: 0
codePage: 0
countryCode: 0
homeDirectory:\\storage1\ssanzing2
homeDrive: Z:
badPasswordTime: 128009602852500000
lastLogoff: 0
lastLogon: 128009602942343750
pwdLastSet: 128005471436406250
primaryGroupID: 513
objectSid:: AQUAAAAAAAUVAAAANgNkwo1ygkWHRwOeYwQAAA==
accountExpires: 9223372036854775807
logonCount: 52
sAMAccountName: ssanzing2
sAMAccountType: 805306368
userPrincipalName:ssanzing2@SOHEE.xxx.ac.kr
objectCategory:
 CN=Person,CN=Schema,CN=Configuration,DC=SOHEE,DC=xxx,DC=ac,DC=kr
unixUserPassword: ABCD!efgh12345$67890
uid: ssanzing2
msSFU30Name: ssanzing2
msSFU30NisDomain: SOHEE
uidNumber: 200511875
gidNumber: 5000
unixHomeDirectory: /home/2005/ssanzing2
loginShell: /bin/bash

여기서 꼭 필요한 정보는 뭘까요?
자동으로 생성되지 않는 정보만 추려보자.
대충 이 정도 같다.

dn: CN=ssanzing2,OU=2005,OU=NormalUsers,DC=SOHEE,DC=xxx,DC=ac,DC=kr
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: ssanzing2
sn: ssanzing2
distinguishedName:
 CN=ssanzing2,OU=2005,OU=NormalUsers,DC=SOHEE,DC=xxx,DC=ac,DC=kr
instanceType: 4
displayName: ssanzing2
name: ssanzing2
homeDirectory:\\storage1\ssanzing2
homeDrive: Z:
primaryGroupID: 513    (AD상 Domain Users그룹에 속해있으니까 필요하다?)
sAMAccountName: ssanzing2
userPrincipalName:ssanzing2@SOHEE.xxx.ac.kr
objectCategory:
 CN=Person,CN=Schema,CN=Configuration,DC=SOHEE,DC=xxx,DC=ac,DC=kr
uid: ssanzing2
msSFU30Name: ssanzing2
msSFU30NisDomain: SOHEE
uidNumber: 200512345
gidNumber: 5000
unixHomeDirectory: /home/2005/ssanzing2
loginShell: /bin/bash

 

아... 개인정보를 빼먹었다. 핸드폰 번호같은 것 -_-; 귀찮으니깐 각자 알아서 하기로 하자;;

핵심을 추렸으니 유닉스로
ldapadd -x -f ssanzing2.ldif -D cn=Administrator,cn=Users,dc=SOHEE,dc=xxx,dc=ac,dc=kr -W
명령을 내려보았다. 관리자 비번을 치면 멋지게 ssanzing2라는 IDr가 들어갈 것이다.
라고 생각했으나
ldap_add: Server is unwilling to perform (53)
이라는 메시지가 나왔다 ㅡ,.ㅡ;;

좀더 팍 줄인 것...

dn: CN=jdoe,OU=NormalUsers,DC=SOHEE,DC=xxx,DC=ac,DC=kr
cn: jdoe
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user

은 잘 add 되었다.

결국 잘 add 될 때까지 조금씩 ldif파일을 수정하면 되겠군...
primaryGroupID: 513    (AD상 Domain Users그룹에 속해있으니까 필요하다?)
이것을 빼야 했다.
재미있는 현상이군.

dn: CN=ssanzing2,OU=2005,OU=NormalUsers,DC=SOHEE,DC=xxx,DC=ac,DC=kr
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: ssanzing2
sn: ssanzing2
description: 2005-xxxxx
telephoneNumber: 010-xxxx-xxxx
givenName:: 7KO8642V7KeE
displayName: ssanzing2
name: ssanzing2
homeDirectory:\\storage1\ssanzing2
homeDrive: Z:
sAMAccountName: ssanzing2
userPrincipalName:ssanzing2@SOHEE.xxx.ac.kr
uid: ssanzing2
mail:primarymail@somewhere.net
msSFU30Name: ssanzing2
msSFU30NisDomain: SOHEE
uidNumber: 200511875
gidNumber: 5000
unixHomeDirectory: /home/2005/ssanzing2
loginShell: /bin/bash

대충 이정도면 충분하다.

추가를 하게되면 "다음 로그온 때 비번 변경"옵션이 켜지는건 좋은데, 결정적으로 계정이 disable되어있다. (빨간 x자가 그어진다.)

userAccountControl: 544
을 ldif파일에 추가하니 잘 된다. (앗싸)

ldif파일만 잘 생성하면 적절한 수단으로 ldapadd로 왕창 추가할 수 있게 된 것이다.