Active Directory 도메인 컨트롤러에 사용자 계정을 프로그램으로 생성·등록할 때(예: 셀프서비스 계정 등록 웹 서비스) 걸리는 핵심 제약과 주의점을 정리한다. LDAP 으로 사용자 객체를 만들고 그룹에 넣는 흐름 자체는 단순하지만, 비밀번호 설정에는 반드시 암호화 연결이 필요하다.
AD 에서 unicodePwd 속성으로 비밀번호를 설정하려면 암호화된 연결(LDAPS, 포트 636) 이 강제된다. 평문 LDAP(389)로는 비밀번호 설정이 거부된다. 따라서 DC 에 인증서를 설치해 636 이 열려 있어야 하고, 클라이언트는 그 CA 를 신뢰해야 한다. unicodePwd 값은 큰따옴표로 감싼 UTF-16LE 로 인코딩해 써야 한다.
계정을 만드는 서비스용 bind 계정에는 대상 OU 안의 사용자 생성과 그룹 구성원 추가 권한만 최소로 위임한다. 도메인 관리자 권한을 통째로 주지 않는다. 생성 대상 OU 와 자동 가입 그룹 목록은 설정으로 분리해 두면 운영이 편하다(그룹 목록이 비면 그룹에 넣지 않음).
웹 폼으로 값을 받아 LDAP 질의·수정에 쓰는 구조라면 LDAP Injection 을 막기 위해 입력을 이스케이프한다. 사용자명·성/이름·이메일·비밀번호 같은 필드는 DN·필터에 들어가기 전에 특수문자를 처리한다. 자격증명 값(bind 비밀번호 등)은 설정 파일로 분리하고 로그·코드에 남기지 않는다.
AD 가 실제로 쓰는 주요 포트는 다음과 같다.
| 포트 | 용도 |
|---|---|
| 88 | Kerberos |
| 464 | kpasswd (비밀번호 변경) |
| 389 / 636 | LDAP / LDAPS |
| 3268 / 3269 | 글로벌 카탈로그 |
| 53 | DNS |
| 135 + 동적 RPC 범위 | RPC |
방화벽 문서에 Kerberos 관련으로 749 가 함께 적히는 경우가 있는데, 749(TCP/UDP)는 MIT Kerberos 의 관리 서비스(kerberos-adm / kadmind)다. Microsoft AD 자체는 749 를 쓰지 않고 Kerberos 관리·비밀번호 변경을 LDAP·RPC·464(kpasswd)로 처리한다. 749 는 Linux/Unix 를 MIT Kerberos·FreeIPA 로 연동할 때 방화벽 오픈 목록에 들어가거나, 실제 대상이 AD 가 아니라 MIT KDC 인 경우다.
UDP 포트가 실제로 열렸는지 확인하려면 서버 자신에서 리스닝을 보는 것이 가장 확실하다. UDP 는 핸드셰이크가 없어 원격 판정이 애매하다.
ss -ulnp | grep 749 # 리눅스, 리스닝 프로세스 확인
sudo nmap -sU --reason -p 749 <IP> # open|filtered / closed 판정 근거 출력
open|filtered 는 응답 없음(차단이거나 조용한 서비스, 구분 불가), closed 는 ICMP Port Unreachable 수신(경로는 뚫림), open 은 실제 UDP 응답을 받은 상태다. 가장 신뢰도 높은 방법은 실제 서비스로 검증하는 것(kadmind 라면 kadmin -p <principal> -s <KDC>)이다.