Computer >> 컴퓨터 >  >> 체계 >> Windows Server

Active Directory에서 UserAccountControl 속성 값 변환

사용자 계정 컨트롤 Active Directory에서 사용자 및 컴퓨터 개체의 가장 중요한 특성 중 하나입니다. 이 속성은 AD 도메인의 계정 상태를 결정합니다. 계정이 활성 상태인지 잠겨 있는지, 다음 로그온 시 암호 변경 옵션이 활성화되었는지 여부, 사용자가 암호를 변경할 수 있는지 여부 등. 그러나 모든 관리자가 그렇지는 않습니다. UserAccountControl 속성이 작동하는 방식과 AD에서 사용되는 용도에 대해 완전히 알고 있습니다.

Active Directory의 UserAccountControl 속성/플래그

Active Directory 사용자 및 컴퓨터(ADUC, dsa.msc)에서 AD 계정의 속성을 엽니다. ) 콘솔을 열고 계정으로 이동합니다. 탭. 계정 옵션의 사용자 속성 그룹에 주의하십시오. 부분. 여기에서 다음 옵션을 볼 수 있습니다.

  • 사용자는 다음 로그온 시 비밀번호를 변경해야 합니다.
  • 사용자는 비밀번호를 변경할 수 없습니다.
  • 비밀번호는 만료되지 않습니다. 기본적으로 AD의 도메인 암호 정책은 사용자가 주기적으로 암호를 변경하도록 요구합니다.
  • 가역 암호화를 사용하여 비밀번호를 저장합니다(안전하지 않음).
  • 계정이 비활성화되었습니다.
  • 대화형 로그온에는 스마트 카드가 필요합니다.
  • 계정이 민감하여 위임할 수 없습니다.
  • 이 계정에 Kerberos DES 암호화 유형을 사용합니다.
  • 이 계정은 Kerberos AES 128/256비트 암호화를 지원합니다.
  • Kerberos 사전 인증이 필요하지 않습니다.

Active Directory에서 UserAccountControl 속성 값 변환

이러한 각 사용자 계정 속성은 기본적으로 1(True ) 또는 0(False ). 그러나 이러한 값은 별도의 AD 속성으로 저장되지 않고 대신 UserAccountControl 속성이 사용됩니다.

위에 지정된 모든 옵션의 총 값은 UserAccountControl 값에 저장됩니다. 기인하다. 이러한 모든 옵션을 다른 사용자 특성에 저장하는 대신 단일 Active Directory 특성이 사용됩니다. UserAccountControl은 비트마스크입니다. 각 비트는 별도의 플래그이며 켜기 값을 가집니다. (True) 또는 해제 (거짓). 활성화된 계정 옵션에 따라 사용자는 다른 UserAccountControl 속성 값을 갖게 됩니다. 해당 특성 편집기 탭에서 또는 PowerShell의 Get-ADUser cmdlet을 사용하여 특성의 현재 값을 볼 수 있습니다.

get-aduser jkelly -properties *|select name,UserAccountControl | ft

Active Directory에서 UserAccountControl 속성 값 변환

Active Directory에서 UserAccountControl 속성 값 변환

이 예에서 속성 값은 0x10202입니다. (십진수 값은 66050입니다. ). 이 숫자는 무엇을 의미합니까?

AD 계정의 사용 가능한 플래그 표는 다음과 같습니다. 각 플래그는 특정 UserAccountControl 비트에 해당하며 UserAccountControl 값은 모든 플래그의 합과 같습니다.

UserAccountControl 플래그 16진수 값 소수값 SCRIPT(로그온 스크립트 실행)0x00011ACCOUNTDISABLE(계정이 비활성화됨) 0x00022HOMEDIR_REQUIRED(홈 폴더가 필요함) 0x00088LOCKOUT(계정이 잠겨 있음) 0x001016PASSWD_NOTREQD를 사용하는 사용자 PTCOWED0x001016PASSWD_NOTREQD(비밀번호가 필요하지 않음)0x002032CHWD 암호화) 0x0080128TEMP_DUPLICATE_ACCOUNT (기본 계정 다른 도메인에있는 사용자의 계정) 0x0100256NORMAL_ACCOUNT (A 기본 계정, 일반적인 활성 계정) 0x0200512INTERDOMAIN_TRUST_ACCOUNT0x08002048WORKSTATION_TRUST_ACCOUNT0x10004096SERVER_TRUST_ACCOUNT0x20008192DONT_EXPIRE_PASSWORD (사용자가 만료되지 않는 암호로 계정) 0x1000065536MNS_LOGON_ACCOUNT0x20000131072SMARTCARD_REQUIRED가 (네트워크에 로그온하려면 사용자는 스마트 카드가 필요합니다.)0x40000262144TRUSTED_FOR_DELEGATION0x80000524288NOT_DELEGATED0x1000001048576USE_DES_KEY_000번째 사전 인증이 필요하지 않습니다. 4194304PASSWORD_EXPIRED(사용자 암호가 만료됨) 0x8000008388608TRUSTED_TO_AUTH_FOR_DELEGATION0x100000016777216PARTIAL_SECRETS_ACCOUNT0x0400000067108864

예를 들어 암호 변경 요구 사항이 비활성화된 일반 계정이 있습니다. userAccountControl 값은 다음과 같이 계산됩니다.

NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) = 66048

따라서 내 예제(66050)의 userAccountControl 값은 다음과 같이 얻었습니다.

NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) + ACCOUNTDISABLE (2) = 66050

비활성화된 사용자 계정의 userAccountControl 값은 514입니다.

(NORMAL_ACCOUNT (512)+ ACCOUNTDISABLE (2) = 514

일반적인 도메인 개체에 대한 기본 UserAccountControl 값:

  • 일반 AD 사용자:0x200(512),
  • 도메인 컨트롤러:0x82000(532480),
  • 워크스테이션/서버:0x1000(4096).

LDAP 필터를 사용하여 특정 useraccountcontrol 값이 있는 AD 개체에서 개체를 선택할 수 있습니다. 예를 들어 모든 활성(일반) 계정을 표시하려면:

Get-ADUser -Properties * -ldapFilter "(useraccountcontrol=512)"

비활성화된 모든 사용자 계정 목록 표시:

Get-ADUser -Properties * -ldapFilter "(useraccountcontrol=514)"

만료되지 않는 비밀번호 옵션이 있는 계정 목록:

Get-ADUser -Properties * -ldapFilter "(useraccountcontrol=66048)"

다음 명령을 사용하여 표에서 필요한 비트를 합산하고 AD 개체를 선택할 수 있습니다.

$UserAccountControl_hex= 0x10000 + 0x0080 + 0x200000
Get-ADUser -Filter {UserAccountControl -band$UserAccountControl_hex}

PowerShell 스크립트로 UserAccountControl 값 디코딩

좀 더 편리하게 하기 위해 UserAccountControl 비트마스크 값을 사람이 볼 수 있는 형식으로 자동 변환하는 도구를 갖고 싶습니다. UserAccountControl 속성의 10진수 값을 사용하고 활성화된 계정 옵션 목록을 반환하는 간단한 PowerShell 함수를 작성해 보겠습니다. UserAccountControl은 비트 마스크이므로 각 비트에 텍스트 설명을 할당할 수 있습니다.

이 PowerShell 함수 DecodeUserAccountControl 를 작성했습니다. UserAccountControl 값을 읽을 수 있는 형식으로 변환하려면:

Function DecodeUserAccountControl ([int]$UAC)
{
$UACPropertyFlags = @(
"SCRIPT",
"ACCOUNTDISABLE",
"RESERVED",
"HOMEDIR_REQUIRED",
"LOCKOUT",
"PASSWD_NOTREQD",
"PASSWD_CANT_CHANGE",
"ENCRYPTED_TEXT_PWD_ALLOWED",
"TEMP_DUPLICATE_ACCOUNT",
"NORMAL_ACCOUNT",
"RESERVED",
"INTERDOMAIN_TRUST_ACCOUNT",
"WORKSTATION_TRUST_ACCOUNT",
"SERVER_TRUST_ACCOUNT",
"RESERVED",
"RESERVED",
"DONT_EXPIRE_PASSWORD",
"MNS_LOGON_ACCOUNT",
"SMARTCARD_REQUIRED",
"TRUSTED_FOR_DELEGATION",
"NOT_DELEGATED",
"USE_DES_KEY_ONLY",
"DONT_REQ_PREAUTH",
"PASSWORD_EXPIRED",
"TRUSTED_TO_AUTH_FOR_DELEGATION",
"RESERVED",
"PARTIAL_SECRETS_ACCOUNT"
"RESERVED"
"RESERVED"
"RESERVED"
"RESERVED"
"RESERVED"
)
return (0..($UACPropertyFlags.Length) | ?{$UAC -bAnd [math]::Pow(2,$_)} | %{$UACPropertyFlags[$_]}) -join ” | ”
}

UserAccountControl의 값 66050이 의미하는 바를 확인해 보겠습니다.

DecodeUserAccountControl 66050

보시다시피 스크립트는 이 사용자에 대해 다음 플래그가 활성화되었음을 반환했습니다.

담당자 | NORMAL_ACCOUNT | DONT_EXPIRE_PASSWORD

Active Directory에서 UserAccountControl 속성 값 변환

Get-ADUser 또는 Get-ADComputer cmdlet을 사용하여 편리한 형식으로 AD 계정에 대한 정보를 가져올 때 동일한 스크립트를 사용하여 즉석에서 UserAccountControl 값을 디코딩할 수 있습니다. 예:

get-aduser ms-pam -properties *|select @{n='UsrAcCtrl';e={DecodeUserAccountControl($_.userAccountControl)}}

담당자 | NORMAL_ACCOUNT | DONT_EXPIRE_PASSWORD

get-adcomputer rome-dc01 -properties *|select @{n='UsrAcCtrl';e={DecodeUserAccountControl($_.userAccountControl)}}

SERVER_TRUST_ACCOUNT | TRUSTED_FOR_DELEGATION

Active Directory에서 UserAccountControl 속성 값 변환

PowerShell을 사용하여 AD에서 UserAccoutControl 속성을 설정하는 방법은 무엇입니까?

Set-ADUser 및 Set-ADComputer PowerShell cmdlet을 사용하여 Active Directory에서 UserAccountControl 특성의 개별 옵션을 변경할 수 있습니다. 이러한 cmdlet에는 모두 별도의 옵션이 있습니다. 예:

  • 위임되지 않은 계정
  • AllowReversiblePasswordEncryption
  • 비밀번호를 변경할 수 없음
  • ChangePasswordAtLogon
  • KerberosEncryptionType
  • 비밀번호가 만료되지 않음
  • 비밀번호가 필요하지 않음
  • PrincipalsAllowedToDelegateToAccount
AD의 컴퓨터 계정 암호는 컴퓨터와 도메인 간의 신뢰 관계를 제공합니다.

따라서 일부 사용자 옵션을 변경하려면 다음 명령을 사용해야 합니다.

Set-ADUser jkelly –CannotChangePassword:$true -PasswordNeverExpires:$true

또는 일반 Set-UserAccountControl을 사용할 수 있습니다. cmdlet:

Set-ADAccountControl -Identity jkelly -CannotChangePassword $True -PasswordNeverExpires $True

Active Directory에서 UserAccountControl 속성 값 변환

UserAccountControl 속성을 통해 정확한 값을 설정하여 이러한 사용자 계정 옵션을 모두 직접 활성화할 수도 있습니다.

Set-ADUser jkelly -Replace @{UserAccountControl= 66048}