한국어

ABOUT_MICROSOFT

Active Directory 사용자 추가 batch 파일 만들기

2003.10.14 21:53

jun 조회 수:4481

http://ezbox.net/windows/lectures/030303_ad.useradd.asp



Active Directory 사용자 추가 batch 파일 만들기


작성자 : 정원호 (lion21@nownuri.net)
편집자 : 정원호 (lion21@nownuri.net)
최초 게시일 : 2003년 3월 3일


배치 파일?


Windows 운영체제에서 동일한 작업을 반복적으로 해야 하는 경우가 생기면 CUI 운영체제인 Linux에 비해 꽤나 골치가 아프다. GUI 환경에서는 이러한 작업을 효율적으로 수행할 수 있는 방법이 별로 없기 때문이다. 실제 필자는 100명의 사용자 계정을 Active Directory에 추가하기 위해서 근 3시간 동안 마우스 클릭을 해야만 했다. 100명이 아니라 1,000명 혹은 10,000명을 추가한다면 어떻게 해야 할까?

배치 파일은 이럴때 빛을 발한다. 비록 구닥다리 운영체제라고 여겨지는 DOS의 유물이지만 필자는 아직까지 이 이상 편리한 방법을 찾지 못했다. 물론 '편리하다'는 말을 '강력하다'는 말로 잘못 이해하면 안된다. 최소 노력으로 괜찮은 결과를 얻는다고 생각하면 된다.

배치(batch)라는 말은 '일괄', '묶음' 정도로 해석될 수 있는데, 배치파일은 여러가지 작업을 한꺼번에 수행할 수 있도록 명령어를 정의해 놓은 파일이라고 생각하면 된다. 예전 DOS의 autoexec.bat 파일을 생각하면 쉽게 이해할 수 있을 것이다.


시나리오


Active Directory는 LDAP 프로토콜을 사용하기 때문에 일반 Stand-alone Windows Server나 Linux에서 사용자를 추가하는 것과는 약간 차이가 있다. 특히나 OU라는 논리적 구성요소가 존재하기 때문에 모든 사용자 시스템에 적용할 수 있는 배치파일을 만들 수는 없다.

하지만 아래 필자가 예로 제시한 배치파일의 전체적인 구조를 이해한다면 자신의 환경에 맞는 배치파일을 생성하는 것은 그리 어렵지 않을 것이다. 참고로 아래 배치파일은 필자의 동아리에서 운영하는 Active Directory 에서 사용하는 것이다.

시나리오는 다음과 같다.

  • Active Directory 도메인명은 ezbox.net 이고, 호스트명은 dcbox 이다.

  • 사용자 프로파일 폴더의 UNC는 \\ezbox.net\profile 이며, 물리적인 위치는 C:\Documents and settings 이다.

  • 사용자 홈폴더의 UNC는 \\ezbox.net\home 이며, 물리적인 위치는 D:\home 이다.

  • 최상위 OU는 members 이며, 실제 사용자 계정은 하위 OU (01st, 02nd, ... 07th, ... 14th, 15th) 에 위치한다. 이는 동아리 회원들의 기수를 의미한다. OU는 이미 존재하고 있다.

  • 정의할 LDAP Attribute는 DN, objectClass, displayName, sn, givenName, homeDirectory, homeDrive, profilePath, sAMAccountName, userAccountControl, userPrincipalName 에 한한다.

  • 계정을 추가함과 동시에 프로파일 폴더 및 홈폴더가 생성되며, 해당 사용자 계정이 Owner 가 되고, 모든 권한을 갖는다.

  • C:\Inetpub에 IIS 5.0 이 설치되어 있다.

  • 해당 사용자가 자신의 홈폴더에 ftp로 접근(읽기, 쓰기)할 수 있도록 IIS 가상디렉토리를 생성한다.

  • 해당 사용자 홈폴더 아래에 public_html 폴더를 추가하고, web 서비스(IUSR_%computername% 에 읽기 권한만 부여)를 할 수 있도록 IIS 가상디렉토리를 생성한다. 디렉토리명은 ~%username% 이다. → http://ezbox.net/~username


배치파일 예제


@echo off

rem ---- UserAdd.cmd ------
rem ---- Created Nov. 26 2002 by 정원호 ------
rem ---- Lion21@nownuri.net -------
rem ---- Essential files are : subinacl.exe(rskit), mkftpdir.vbs(download from MS Site)
rem ---- mkftpdir.vbs - http://support.microsoft.com/default.aspx?scid=KB;en-us;q254808
rem ---- Location of files : %Systemroot%\system32\ ------

rem ---- %1 = 계정명(Account)
rem ---- %2 = 성(Surname)
rem ---- %3 = 이름(Givenname)
rem ---- %4 = 기수

rem 매개 변수 확인
if '%1'=='' goto wrong
if '%2'=='' goto wrong
if '%3'=='' goto wrong
if '%4'=='' goto wrong

rem 홈폴더 및 프로파일 폴더 생성 (public_html 는 웹 가상디렉토리)
mkdir \\ezbox.net\home\%1
mkdir \\ezbox.net\home\%1\public_html
mkdir \\ezbox.net\profile\%1

rem 지역 변수 설정
setlocal

set DN="CN=%2 %3,OU=%4,OU=Members,DC=ezbox,DC=net"
set objectClass=user
set displayName=%2 %3
set sn=%2
set givenName=%3
set homeDirectory=\\\\ezbox.net\\home\\%1
set homeDrive=Z:
set profilePath=\\\\ezbox.net\\profile\\%1
set sAMAccountName=%1
set userAccountControl=66048
set userPrincipalName=%1@ezbox.net
set csv=C:\user.csv

rem %csv% 파일 만들기
echo DN,objectClass,displayName,sn,givenName,homeDirectory,homeDrive,profilePath,sAMAccountName,userAccountControl,userPrincipalName>%csv%
echo %DN%,%objectClass%,%displayName%,%sn%,%givenName%,%homeDirectory%,%homeDrive%,%profilePath%,%sAMAccountName%,%userAccountControl%,%userPrincipalName%>>%csv%

rem csvde 명령어를 통해 AD에 정보 입력
csvde -i -f %csv%

rem 홈폴더 및 프로파일 폴더 소유자 변경
subinacl /subdirectories \\ezbox.net\home\%1 /owner=%1
subinacl /subdirectories \\ezbox.net\home\%1\public_html /owner=%1
subinacl /subdirectories \\ezbox.net\profile\%1 /owner=%1

rem 사용자에게 퍼미션 부여
echo y | cacls \\ezbox.net\home\%1 /t /e /c /g %1:F
echo y | cacls \\ezbox.net\home\%1\public_html /t /e /c /g IUSR_%computername%:R
echo y | cacls \\ezbox.net\profile\%1 /t /e /c /g %1:F

rem %csv% 및 로그파일 지우기
del /f /q %csv%
del /f /q csv.log

rem virtual ftp 및 web 디렉토리 설정 (adsutil은 접근 권한 설정)
Cscript C:\InetPub\AdminScripts\mkftpdir.vbs -f "ezbox.net" -v "%1","d:\home\%1"
Cscript C:\InetPub\AdminScripts\adsutil.vbs set MSFTPSVC/1/root/%1/accesswrite "true"
Cscript C:\InetPub\AdminScripts\mkwebdir.vbs -w "ezbox.net" -v "~%1","d:\home\%1\public_html"
Cscript C:\Inetpub\AdminScripts\adsutil.vbs set W3SVC/1/root/~%1/accesswrite "False"

goto end

:wrong
cls
echo **************************************************************
echo **************************************************************
echo ***                                                        ***
echo ***    명령이 올바르지 않습니다. 문법을 확인해 주세요.     ***
echo ***                                                        ***
echo ***                                                        ***
echo ***          useradd (계정명) (성) (이름) (기수)           ***
echo ***                                                        ***
echo ***                                                        ***
echo ***            ex. useradd lion21 정 원호 07th             ***
echo ***                                                        ***
echo **************************************************************
echo **************************************************************
pause

:end
endlocal

주의사항


마음 같아선 위 배치파일에 자세한 주석을 첨부하고 싶지만 사실 타이핑하기도 귀찮고, 별로 어렵지 않은 내용이라 시스템 관리자라면 어렵지 않게 이해할 수 있으리 생각되어 생략하도록 하겠다. :-)

이제 위 배치파일을 성공적으로 실행하기 위해서 필요한 몇가지 주의사항을 알려주겠다.

  1. 배치파일의 파일명은 어떤 것이든 상관없지만 확장자는 반드시 .bat 또는 .cmd이어야 한다. 위 예제에서는 useradd.cmd 라고 하였다.

  2. 파일의 위치 또한 어디든 상관없지만 편의를 위해 C:\WINNT\System32 와 같이 Path가 설정된 곳이 적당하다.

  3. 위 배치파일은 반드시 Active Directory Service가 설치되어 있는 Domain Controller에서 실행하여야 한다.

  4. 위 배치파일은 필자의 시스템에 맞춘 것이기 때문에 실제 사용자의 시스템에서 실행시키기 위해서는 도메인명, 공유명, OU명 등을 적당하게 수정하여야 한다.

  5. 위 배치파일이 제대로 실행되기 위해서는 subinacl.exe 라는 툴과 mkftpdir.vbs 라는 ADSI 스크립트가 필요하다. subinacl.exe 는 Windows 2000 Server Resource kit 에 포함되어 있으며, mkftpdir.vbs 는 http://support.microsoft.com/default.aspx?scid=KB;en-us;q254808 에서 다운로드 받을 수 있다.

    편의를 위해 직접 링크를 제공하겠다. [ subinacl.exe 다운로드 ], [ mkftpdir.vbs 다운로드 ]

    다운로드를 받았다면 subinacl.exe는 C:\WINNT\system32에, mkftpdir.vbs는 C:\Inetpub\AdminScripts에 저장한다.

  6. 기타 사항은 배치파일 내에 주석을 참고하면 된다.