77 lines
3.8 KiB
Markdown
77 lines
3.8 KiB
Markdown
|
|
# AD 계정 잠금 해제 툴 (AD Account Unlocker)
|
||
|
|
|
||
|
|
Active Directory(AD) 환경에서 잠긴 사용자 계정을 관리하기 위한 PowerShell 기반 GUI 툴. 잠긴 계정 목록 조회, 잠금 해제, 잠금 출처 추적 기능을 제공한다.
|
||
|
|
|
||
|
|
## 주요 기능
|
||
|
|
|
||
|
|
* **잠긴 AD 계정 목록 조회**: 도메인 내 잠긴 모든 사용자 계정 목록 실시간 조회.
|
||
|
|
* **간편한 계정 잠금 해제**: 선택한 사용자의 계정 잠금을 버튼 클릭으로 해제.
|
||
|
|
* **계정 잠금 출처 추적**: 계정 잠금을 유발한 컴퓨터(IP 또는 이름)를 추적하여 원인 파악 지원.
|
||
|
|
* **사용자 검색**: 표시 이름, 로그온 ID 등으로 전체 AD 사용자 검색 기능 제공.
|
||
|
|
* **직관적인 다크 모드 GUI**: 관리자 편의를 위한 다크 테마 인터페이스.
|
||
|
|
* **실시간 작업 로그**: 모든 작업의 성공 및 실패 여부를 로그 창에 실시간 표시.
|
||
|
|
|
||
|
|
## 사용 전제 조건
|
||
|
|
|
||
|
|
1. **Active Directory 모듈**: 스크립트 실행 컴퓨터에 `ActiveDirectory` PowerShell 모듈 설치 필요. (RSAT의 일부)
|
||
|
|
2. **실행 권한**:
|
||
|
|
* AD 사용자 조회 및 계정 잠금 해제 권한.
|
||
|
|
* 도메인 컨트롤러(DC)의 보안 이벤트 로그(Event ID 4740, 4625) 원격 조회 권한.
|
||
|
|
3. **실행 환경**: 도메인에 가입된 Windows PC.
|
||
|
|
4. **.NET Framework**: .NET Framework 4.5 이상 필요. (최신 Windows에 기본 설치됨)
|
||
|
|
|
||
|
|
## 사용법
|
||
|
|
|
||
|
|
### 방법 1: PowerShell 스크립트(.ps1) 직접 실행
|
||
|
|
|
||
|
|
1. `AccountUnlocker.ps1` 스크립트 파일을 PC에 저장.
|
||
|
|
2. PowerShell을 **관리자 권한으로** 실행.
|
||
|
|
3. 필요 시 PowerShell 실행 정책 변경: `Set-ExecutionPolicy RemoteSigned -Scope Process`
|
||
|
|
4. 스크립트가 있는 경로로 이동 후 아래와 같이 실행.
|
||
|
|
```powershell
|
||
|
|
.\AccountUnlocker.ps1
|
||
|
|
```
|
||
|
|
|
||
|
|
### 방법 2: 실행 파일(.exe)로 패키징
|
||
|
|
|
||
|
|
`PS2EXE` 모듈을 사용하여 스크립트를 단일 실행 파일로 변환 가능.
|
||
|
|
|
||
|
|
**1단계: PS2EXE 모듈 설치 (최초 1회)**
|
||
|
|
|
||
|
|
관리자 권한 PowerShell에서 아래 명령어로 `PS2EXE` 설치.
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
Install-Module -Name PS2EXE
|
||
|
|
```
|
||
|
|
|
||
|
|
**2단계: 스크립트 패키징**
|
||
|
|
|
||
|
|
스크립트 경로에서 아래 명령어로 `.exe` 파일 생성.
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
Invoke-PS2EXE -InputFile ".\AccountUnlocker.ps1" -OutputFile ".\ADLockUser.exe" -noConsole -title "AD 계정 잠 금 해제 툴" -product "AD Management Tools" -company "TigErJin" -requireAdmin
|
||
|
|
```
|
||
|
|
* `-noConsole`: 콘솔 창 없이 GUI만 실행.
|
||
|
|
* `-title`, `-product`, `-company`: 파일 속성 정보 지정.
|
||
|
|
* `-requireAdmin`: 실행 시 관리자 권한 자동 요구.
|
||
|
|
|
||
|
|
**3단계: 프로그램 실행**
|
||
|
|
|
||
|
|
생성된 `ADLockUser.exe` 파일 실행.
|
||
|
|
|
||
|
|
## 스크립트 주요 로직 설명
|
||
|
|
|
||
|
|
### `Get-LockedADAccounts`
|
||
|
|
* 도메인의 PDC(Primary Domain Controller) 에뮬레이터에 쿼리하여 가장 정확한 잠긴 계정 목록을 가져온다.
|
||
|
|
* `Search-ADAccount -LockedOut`으로 잠긴 계정을 찾고 `Get-ADUser`로 상세 정보(표시 이름, 마지막 로그온 등)를 추가 조회.
|
||
|
|
|
||
|
|
### `Unlock-ADUserAccount`
|
||
|
|
* 선택된 계정의 `SamAccountName`을 받아 PDC를 대상으로 `Unlock-ADAccount` cmdlet을 실행.
|
||
|
|
* 성공/실패 여부를 반환하여 GUI에 로그를 기록.
|
||
|
|
|
||
|
|
### `Get-ADLockoutEvent` (잠금 출처 추적)
|
||
|
|
이 기능은 2단계에 걸쳐 잠금 원인을 추적한다.
|
||
|
|
1. **1단계 (Event ID 4740 조회)**: 모든 DC를 대상으로 보안 로그에서 **Event ID 4740 (계정 잠김)** 이벤트를 검색. 이를 통해 잠금 시간, 발생 DC, 호출자 컴퓨터 이름을 확인.
|
||
|
|
|
||
|
|
2. **2단계 (Event ID 4625 조회)**: 4740 이벤트의 '호출자 컴퓨터 이름'이 명확하지 않을 경우, 해당 DC에서 잠금 직전의 **Event ID 4625 (로그온 실패)** 이벤트를 추가 검색. 이 로그의 네트워크 주소(IP) 정보를 통해 실제 인증 실패가 발생한 출처를 특정.
|