자바스크립트를 활성화 해주세요

p036 Powershell로 ActiveDirectory 다루기 사전

 ·  ☕ 5 min read

액티브디렉터리는?

액티브 디렉터리(Active Directory, 줄여서 AD)는 마이크로소프트가 윈도우용 환경에서 사용하기 위해 개발한 LDAP 디렉터리 서비스의 기능이다. 주 목적은 윈도우 기반의 컴퓨터들을 위한 인증 서비스를 제공하는 것이다.

위키페디아 액티브 디렉터리

즉, 풀어서 쓰면, 다음 두가지입니다.

  • 디렉토리 서비스이다.
  • 주 목적은 인증 서비스이다.

디렉토리 서비스는?

In computing, directory service or name service maps the names of network resources to their respective network addresses. It is a shared information infrastructure for locating, managing, administering and organizing everyday items and network resources, which can include volumes, folders, files, printers, users, groups, devices, telephone numbers and other objects.

Wikipedia Directory Service

directory service or name service

즉, directory service와 name service는 같은 것입니다. 그런데 우리는 이미 잘 알고 있는 name service 가 있습니다. DNS(Domain Name Service)요. 아이피를 알기쉬운 알파벳이름으로 맵핑해주는 서비스죠.

즉, 풀어서 쓰면, 다음 두가지입니다.

  • 전자 전화번호부 같은 것이다.
  • 네트웍상에서 컴퓨터뿐만 아니라, 폴더, 유저, 그룹등도 관리할 수 있다.

디렉토리 서비스와 LDAP은 같은 것?

네. 초창기에 디렉토리서비스 프로토콜이 너무 구현하기 어렵게 되어 있어서 미시건대학에서 TCP/IP기반으로 다시 고쳐쓴 것이 LDAP이라고 합니다.

내가 쓸 일이 있을까?

아. 그렇군요. 그런데, 내가 액티브 디렉터리 서비스를 쓸 일이 있을까요?

글로벌한 인터넷이아닌, 회사단위등의 네트웍에 공통적으로 사용해야 하는 것에 이름을 부여하여 관리할 경우가 있습니다.

  • 인트라넷 DNS를 운영한다거나,
  • 인트라넷 사이트에 로그인할 때의 인증을 컴퓨터 로그인 할 때의 인증으로 통합하고 싶다거나,
  • 보안상의 목적으로 어떤 어플리케이션은 도메인에 등록된 디바이스에서만 동작하게 실행하고 싶다거나,
  • 회사의 얄미운 사람이 컴퓨터에 로그인 못하게 일부러 로그인 실패를 연발해서 (내 자리 말고 다른 사람 자리에 가서) User Account를 Lock 시켜버리거나 (스마트카드 로그인이 필요해지는 이유가 됩니다.),
  • 인트라넷에 어딘가에 몰래 액티브디렉토리를 설치해두고, 다른사람의 컴퓨터를 이 도메인에 등록시키고 유저를 만들어서, 다른 사람컴퓨터에 원격으로 로그인 해서 살펴보거나 (이러시면 안됩니다.)
  • Threshold(로그인 실패시 Lock걸리게 하는 제한횟수)가 설정되어 있지 않으면, 패스워드 무한반복으로 패스워드를 알아내거나 (아 이건 액티브 디렉터리와 그다지 관계없습니다. 점점 이상한 방향으로 가네요.)

등등을 사용할 경우가 발생합니다.

저는 주로, 액티브 디렉토리 인증을 Wrap하는 마이크로 서비스를 만들어 인트라넷 인증과 통합시켜, 따로 로그인 인증을 구현하고 싶지 않을 때 사용합니다.

Active Directory 설치

1
install-windowsfeature AD-Domain-Services

Forest 설치

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
Import-Module ADDSDeployment
Install-ADDSForest `
-CreateDnsDelegation:$false `
-DatabasePath "C:\Windows\NTDS" `
-DomainMode "WinThreshold" `
-DomainName "tkim.info" `
-DomainNetbiosName "TKIM" `
-ForestMode "WinThreshold" `
-InstallDns:$true `
-LogPath "C:\Windows\NTDS" `
-NoRebootOnCompletion:$false `
-SysvolPath "C:\Windows\SYSVOL" `
-Force:$true

Get-ADDomain

tkim.info의 도메인을 구하기

1
Get-ADDomain -Identity tkim.info

현재 컴퓨터의 도메인을 구하기

1
Get-ADDomain -Current LocalComputer

현재 로그인 유저의 도메인을 구하기

Get-ADDomain -Current LoggedOnUser

Get-ADForest

tkim.info의 Forest을 구하기

1
Get-ADForest -Identity tkim.info

현재 컴퓨터의 Forest을 구하기

1
Get-ADForest -Current LocalComputer

현재 로그인 유저의 도메인을 구하기

1
Get-ADForest -Current LoggedOnUser

Get-ADGroup

SAM Account 이름으로 Group구하기

1
Get-ADGroup -Identity Administrators

SID로 구하기

1
Get-ADGroup -Identity S-1-5-32-544 -Properties member

Filter해 구하기

1
Get-ADGroup -Filter 'GroupCategory -eq "Security" -and GroupScope -ne "DomainLocal"'

특정 검색기반으로 구하기

1
Get-ADGroup -Server localhost:60000 -Filter "GroupScope -eq 'DomainLocal'" -SearchBase "DC=AppNC"

Get-ADOrganizationalUnit

특정 조직 단위 구하기

1
2
3
4
5
6
Get-ADOrganizationalUnit -Filter 'Name -like "*"' | Format-Table Name, DistinguishedName -A
```powershell

Distinguished Name으로 구하기
```powershell
Get-ADOrganizationalUnit -Identity 'OU=AsiaPacific,OU=Sales,OU=UserAccounts,DC=FABRIKAM,DC=COM' | Format-Table Name,Country,PostalCode,City,StreetAddress,State -A

자식(child) OU 구하기

1
Get-ADOrganizationalUnit -LDAPFilter '(name=*)' -SearchBase 'OU=Sales,OU=UserAccounts,DC=FABRIKAM,DC=COM' -SearchScope OneLevel | Format-Table Name,Country,PostalCode,City,StreetAddress,State

Get-ADTrust

모든 Trust 구하기

1
Get-ADTrust -Filter *
1
Get-ADTrust -Identity "corp.contoso.com"

Get-ADUser

모든 ADUser 구하기

1
Get-ADUser -Filter *

이름으로 일부 ADUser 구하기

1
Get-ADUser -Filter { Name -like "test*" }

특정 ADUser의 모든 Property 구하기

1
Get-ADUser -Identity yuta -Properties *

LdapFilter파라메터를 사용하는 ADUser를 구하기

1
Get-ADUser -LDAPFilter "(name=tkim*)"

LdapFilter파라메터를 사용하는 ADUser를 구하기

1
Get-ADUser -LDAPFilter "(name=tkim*)" -SearchScope Subtree -SearchBase "OU=IT,DC=tkim,DC=info"

비활성 ADUser 구하기 NG

1
2
3
Measure-Command  {
    Get-ADUser -Filter * | where {! $_.Enabled} | ft  # bad
}

비활성 ADUser 구하기 OK

1
2
3
Measure-Command  {
    Get-ADUser -Filter {Enabled -eq $false} | ft
}

이메일주소로 ADUser 구하기

1
Get-ADUser -Filter {EmailAddress -like "hiro*"}

특정 조직단위에 속해있는 ADUser구하기

1
Get-ADUser -Filter * -SearchBase "OU=IT,DC=corp,DC=contoso,DC=com"

특정 조건의 ADUser를 구해서 특정 Property만 출력하기

1
Get-ADUser -Filter {physicalDeliveryOfficeName -eq "서울" } -Properties physicalDeliveryOfficeName

Identity파라메터를 사용하는 ADUser를 구하기

1
Get-ADUser -Identity "S-1-5-21-4193795416-3281483866-4073542180-1000"

OU의 ADUser를 구해서 csv에 export하기

1
get-aduser -filter {objectClass -eq "user"} -searchbase "OU=ActiveUsers,DC=hogehoge,DC=jp" -properties * | select CanonicalName,CN,Created,DisplayName,Enabled,GivenName,LastLogonDate,mail,Name,PasswordLastSet,SamAccountName,sn,Surname,UserPrincipalName | export-csv -encoding default userlist.csv

Enable-ADAccount

ADUser를 유효화

1
Enable-ADAccount -Identity tkim

Get-ADUser로부터 유효화

1
Get-ADUser -Identity tkim | Enable-ADAccount

Disble-ADAccount

ADUser를 무효화

1
Disable-ADAccount -Identity tkim

Get-ADUser로부터 무효화

1
Disable-ADUser -Identity tkim | Enable-ADAccount

Add-ADFineGrainedPasswordPolicySubject

비밀번호 정책 오브젝트(PSO)을 사용자 오브젝트 또는 그룹 오브젝트에 적용

1
Add-ADFineGrainedPasswordPolicySubject -Identity '비밀번호 10문자' -Subjects 'CN=user1,CN=Users,DC=chase,DC=local'
1
Add-ADFineGrainedPasswordPolicySubject -Identity '비밀번호 10문자' -Subjects test2,test3

Add-ADGroupMember

1
Add-ADGroupMember -Identity "Domain Admins" -Members "user1"

Enable-ADOptionalFeature

휴지통 기능을 유효화

1
Enable-ADOptionalFeature 'Recycle Bin Feature' -Scope ForestOrConfigurationSet -Target chase.local

Get-ADDefaultDomainPasswordPolicy

도메인의 비밀번호 정책을 구하기

1
Get-ADDefaultDomainPasswordPolicy

Get-ADDefaultDomainPasswordPolicy

현재 로그인 유저의 DomainPasswordPolicy 구하기

1
Get-ADDefaultDomainPasswordPolicy -Current LoggedOnUser

현재 컴퓨터의 DomainPasswordPolicy 구하기

1
Get-ADDefaultDomainPasswordPolicy -Current LocalComputer

현재 도메인의 DomainPasswordPolicy 구하기

1
Get-ADDefaultDomainPasswordPolicy -Identity fabrikam.com

Search-ADAccount

모든 Disabled된 ADUser와 ADComputer, 서비스 어카운트 구하기

1
Search-ADAccount -AccountDisabled | ft

모든 Disabled된 ADUser만 구하기

1
Search-ADAccount -AccountDisabled -UsersOnly | FT Name,ObjectClass -A

만기된 모든 Object구하기

1
Search-ADAccount -AccountExpired | FT Name,ObjectClass -A

지정된 시간 이내에 비밀번호 만기예정인 Object구하기

1
Search-ADAccount -AccountExpiring -TimeSpan 6.00:00:00 | FT Name,ObjectClass -A

비밀번호 유효기간이 지난 Account구하기

1
Search-ADAccount -PasswordExpired | FT Name,ObjectClass -A

모든 Lockout된 Account 구하기

1
Search-ADAccount -LockedOut | FT Name,ObjectClass -A

기타

  • Add-ADCentralAccessPolicyMember
  • Add-ADComputerServiceAccount
  • Add-ADDomainControllerPasswordReplicationPolicy
  • Add-ADFineGrainedPasswordPolicySubject
  • Add-ADGroupMember
  • Add-ADPrincipalGroupMembership
  • Add-ADResourcePropertyListMember
  • Clear-ADAccountExpiration
  • Clear-ADClaimTransformLink
  • Disable-ADAccount
  • Disable-ADOptionalFeature
  • Enable-ADAccount
  • Enable-ADOptionalFeature
  • Get-ADAccountAuthorizationGroup
  • Get-ADAccountResultantPasswordReplicationPolicy
  • Get-ADAuthenticationPolicy
  • Get-ADAuthenticationPolicySilo
  • Get-ADCentralAccessPolicy
  • Get-ADCentralAccessRule
  • Get-ADClaimTransformPolicy
  • Get-ADClaimType
  • Get-ADComputer
  • Get-ADComputerServiceAccount
  • Get-ADDCCloningExcludedApplicationList
  • Get-ADDefaultDomainPasswordPolicy
  • Get-ADDomain
  • Get-ADDomainController
  • Get-ADDomainControllerPasswordReplicationPolicy
  • Get-ADDomainControllerPasswordReplicationPolicyUsage
  • Get-ADFineGrainedPasswordPolicy
  • Get-ADFineGrainedPasswordPolicySubject
  • Get-ADForest
  • Get-ADGroup
  • Get-ADGroupMember
  • Get-ADObject
  • Get-ADOptionalFeature
  • Get-ADOrganizationalUnit
  • Get-ADPrincipalGroupMembership
  • Get-ADReplicationAttributeMetadata
  • Get-ADReplicationConnection
  • Get-ADReplicationFailure
  • Get-ADReplicationPartnerMetadata
  • Get-ADReplicationQueueOperation
  • Get-ADReplicationSite
  • Get-ADReplicationSiteLink
  • Get-ADReplicationSiteLinkBridge
  • Get-ADReplicationSubnet
  • Get-ADReplicationUpToDatenessVectorTable
  • Get-ADResourceProperty
  • Get-ADResourcePropertyList
  • Get-ADResourcePropertyValueType
  • Get-ADRootDSE
  • Get-ADServiceAccount
  • Get-ADTrust
  • Get-ADUser
  • Get-ADUserResultantPasswordPolicy
  • Grant-ADAuthenticationPolicySiloAccess
  • Install-ADServiceAccount
  • Move-ADDirectoryServer
  • Move-ADDirectoryServerOperationMasterRole
  • Move-ADObject
  • New-ADAuthenticationPolicy
  • New-ADAuthenticationPolicySilo
  • New-ADCentralAccessPolicy
  • New-ADCentralAccessRule
  • New-ADClaimTransformPolicy
  • New-ADClaimType
  • New-ADComputer
  • New-ADDCCloneConfigFile
  • New-ADFineGrainedPasswordPolicy
  • New-ADGroup
  • New-ADObject
  • New-ADOrganizationalUnit
  • New-ADReplicationSite
  • New-ADReplicationSiteLink
  • New-ADReplicationSiteLinkBridge
  • New-ADReplicationSubnet
  • New-ADResourceProperty
  • New-ADResourcePropertyList
  • New-ADServiceAccount
  • New-ADUser
  • Remove-ADAuthenticationPolicy
  • Remove-ADAuthenticationPolicySilo
  • Remove-ADCentralAccessPolicy
  • Remove-ADCentralAccessPolicyMember
  • Remove-ADCentralAccessRule
  • Remove-ADClaimTransformPolicy
  • Remove-ADClaimType
  • Remove-ADComputer
  • Remove-ADComputerServiceAccount
  • Remove-ADDomainControllerPasswordReplicationPolicy
  • Remove-ADFineGrainedPasswordPolicy
  • Remove-ADFineGrainedPasswordPolicySubject
  • Remove-ADGroup
  • Remove-ADGroupMember
  • Remove-ADObject
  • Remove-ADOrganizationalUnit
  • Remove-ADPrincipalGroupMembership
  • Remove-ADReplicationSite
  • Remove-ADReplicationSiteLink
  • Remove-ADReplicationSiteLinkBridge
  • Remove-ADReplicationSubnet
  • Remove-ADResourceProperty
  • Remove-ADResourcePropertyList
  • Remove-ADResourcePropertyListMember
  • Remove-ADServiceAccount
  • Remove-ADUser
  • Rename-ADObject
  • Reset-ADServiceAccountPassword
  • Restore-ADObject
  • Revoke-ADAuthenticationPolicySiloAccess
  • Search-ADAccount
  • Set-ADAccountAuthenticationPolicySilo
  • Set-ADAccountControl
  • Set-ADAccountExpiration
  • Set-ADAccountPassword
  • Set-ADAuthenticationPolicy
  • Set-ADAuthenticationPolicySilo
  • Set-ADCentralAccessPolicy
  • Set-ADCentralAccessRule
  • Set-ADClaimTransformLink
  • Set-ADClaimTransformPolicy
  • Set-ADClaimType
  • Set-ADComputer
  • Set-ADDefaultDomainPasswordPolicy
  • Set-ADDomain
  • Set-ADDomainMode
  • Set-ADFineGrainedPasswordPolicy
  • Set-ADForest
  • Set-ADForestMode
  • Set-ADGroup
  • Set-ADObject
  • Set-ADOrganizationalUnit
  • Set-ADReplicationConnection
  • Set-ADReplicationSite
  • Set-ADReplicationSiteLink
  • Set-ADReplicationSiteLinkBridge
  • Set-ADReplicationSubnet
  • Set-ADResourceProperty
  • Set-ADResourcePropertyList
  • Set-ADServiceAccount
  • Set-ADUser
  • Show-ADAuthenticationPolicyExpression
  • Sync-ADObject
  • Test-ADServiceAccount
  • Uninstall-ADServiceAccount
  • Unlock-ADAccount

레퍼런스

공유하기

tkim
글쓴이
tkim
Software Engineer