원본보기 : The LastLogonTimeStamp Attribute” ? “What it was designed for and how it works”

http://blogs.technet.com/askds/archive/2009/04/15/the-lastlogontimestamp-attribute-what-it-was-designed-for-and-how-it-works.aspx

 

 

워렌(Warren)입니다. Windows Server 2003에서 lastLogontimeStamp 특성이 소개되었습니다. 관리자는 사용자나 컴퓨터 계정이 최근에 도메인에 로그온 했는지 알기위해lastLogontimeStamp 특성을 사용할 수 있습니다. 이 정보를 통해 관리자는 어떤 계정인지 알 수 있고 관리작업이 필요한지 판단할 수 있습니다. 

 

 

의도적인 사용

 

lastLogontimeStamp 특성의 의도적인 사용은 사용하지 않는 컴퓨터와 사용자 계정을 밝혀내는데 도움이 되기 때문에 주목하는 것이 중요합니다. lastLogon 특성은 로그온 정보에 대한 실제 시간을 제공하도록 설계되어 있지 않습니다. lastLogontimeStamp의 기본 설정은 현재 날짜에서 9~14일 후가 될 것입니다.

 

만약 "실시간" 로그온을 추적하고 싶다면 원하는 로그온 이벤트(528 - Windows XP/2003 그리고4624 Windows Vista/2008) DC의 보안 이벤트 로그에서 쿼리하면 된다. 더 자세한 정보는 Eric Fitzgerald블로그을 참조하기 바란다.(감사에 관련된 것이다)

 

실시간 데이터를 위한 최고의 방법은 중앙집중적인 데이터베이스로 모든 도메인 컨트롤러의 보안 이벤트 로그를 수집하는 이벤트 로그 수집 서비스를 사용하는 것입니다. 그런다음 원하는 로그온 이벤트를 위해 단일 데이터베이스에서 쿼리를 할 수 있습니다. 보안 이벤트 로그 수집을 위한 Microsoft의 솔루션은 감사 수집 서비스(Audit Collection Services)입니다. 타사의 솔루션도 또한 많이 있습니다.

 

 

Windows 2000에서 어떻게 동작하는가

 

Windows Server 2003 이전에는 관리자는 최근 로그온한 사용자나 컴퓨터 계정을 확인하기 위해 lastLogon 특성을 사용했습니다. 이 프로세스는 시간 낭비였는데 lastLogon 특성은 도메인 컨트롤러가 로그온 요청을 검증할 때만 업데이트되기 때문이었습니다. lastLogon 특성은 복제되지 않습니다. 따라서 과거에는 모든 도메인 컨트롤러에서 lastLogon 특성을 쿼리해서 사용자나 컴퓨터 계정의 최근의 로그온을 판단했고 lastLogon의 가장 최근의 날짜는 회신된 모든 값으로부터 결정되었습니다. Windows Server 2003 이후에서는 lastLogon 은 더이상 같은 동작을 하지 않습니다. 그것은 도메인 컨트롤러가 검증될때만 업데이트되고 복제되지 않습니다.

 

 

Windows Server 2003 이후에서는 어떻게 동작하는가

 

반대로 lastLogontimeStamp 특성은 복제되어서 모든 도메인 컨트롤러가 특성에 대한 같은 값을 가지게 됩니다.(복제이후) 따라서 특정 시간에 로그인 하지 않은 모든 사용자나 컴퓨터를 단일 도메인 컨트롤러에서 쿼리할 수 있습니다.

 

 

요구사항

 

llastLogontimeStamp이 업데이트되기 위해서는 Windows Server 2003 도메인 기능 수준이어야 합니다.

 

 

lastLogontimeStamp 특성에 업데이트를 하는 로그온 유형

 

lastLogontimeStamp는 모든 로그온 유형이나 모든 로그온에 대하여 업데이트 하지 않습니다. 좋은 소식은 관리자가 신경쓰는 로그온 유형은 항상 업데이트되고 사용하지 않는 계정을 구분하는 작업을 수행하는데 충분핟다는 것입니다.

 

Interactive logons Network logons lastLogontimeStamp를 업데이트할 것입니다. 따라서 만약 사용자가 interactive 로그온을 하고, 네트워크 공유를 탐색하고, 이메일 서버에 접근하고 LDAP 쿼리를 수행하면, lastLogontimeStamp 특성은 바른 상태로 업데이트 될 것입니다. (그 상태에 대해서는 lastLogontimeStamp의 업데이트와 복제 섹션에서 다룰 것입니다)

 

Windows Server 2003 SP1에서는 다음과 같은 종류의 로그온은 lastLogontimeStamp에 업데이트되지 않습니다.

 

l  Microsoft Internet Information Services (IIS)를 통한 인증서 맵핑

l  IIS를 통한 Microsoft .NET 맵핑

 

[2009 7 19일 업데이트 - repro시 논쟁의 여지가 있기 때문에 리스트의 아이템 하나를 삭제했습니다]

 

====================================================

 

lastLogontimeStamp의 업데이트와 복제

 

 

첫째로 ms-DS-Logon-Time-Sync-Interval 특성을 알게됩니다. 이것은 도메인 NC의 특성이고 lastLogontimeStamp 특성이 개별로(날짜) 업데이트되는 것을 통제합니다. 기본값은 14이고 코드에 설정되어 있습니다. ADSIEDIT.MSC에서 이 특성을 살펴보면 "Not Set"을 볼수 있으니 놀라지 마세요. 이것은 기본값으로 시스템에서 14를 사용한다는 의미입니다.

 

lastLogontimeStamp 특성은 도메인에 사용자나 컴퓨터가 로그온할때마다 매번 업데이트되지 않습니다. 값을 업데이트하는 것을 결정하는 것은 현재 날짜 빼기 (ms-DS-Logon-Time-Sync-Interval attribute 빼기 임의의 5% )에 기반합니다. 만약 결과가 lastLogontimeStamp 과 같거나 크다면 특성을 업데이트합니다. lastLogontimeStamp 복제를 위한 특별한 고려는 없습니다. 만약 특성이 업데이트되면 다른 특성 업데이트처럼 복제될 것입니다. 이것은 긴급한 복제가 아닙니다.

 

 

lastLogontimeStampUpdate가 업데이트 되는 과정입니다.

 

1. (ms-DS-Logon-Time-Sync-Interval의 값은 기본값인 14라고 가정합니다.)

 

2. 사용자는 도메인에 로그온합니다.

 

3. 사용자의 lastLogontimeStamp 특성 값을 가져옵니다.

 

4. 14 - (5% 임의값) = X

 

5. 현재 날짜 - lastLogontimeStamp의 값 = Y

 

6. X ≤ Y - lastLognTimeStamp 업데이트 함

 

7. X > Y - lastLogontimeStamp 업데이트 하지 않음

 

 

왜 임의값을 사용하는가?

 

높은 복제 부담이 있는 도메인 컨트롤러에서 대량의 사용자가 동시에 lastLogontimeStamp 특성을 업데이트하는 것을 방지하기 위해서 임의값을 사용합니다. lastLogontimeStamp 특성의 목적은 실시간 로그온 정보를 제공하는 것이 아니라 사용하지 않는 계정을 찾기위한 것이라는 것을 기억하세요.

 

 

lastLogontimeStamp의 업데이트 빈도 조정하기

 

lastLogontimeStamp의 업데이트 빈도를 변경하거나 원할경우 완전히 사용하지 않는 것도 가능합니다. 만약 다른 시간 간격이 필요하다면 msDS-LogonTimeSyncInterval 특성의 값을 5~100,000사이로 조절할 수 있습니다. 최대 값은 100,000 일입니다... 또는 대략 280년 정도 되죠... 그리고 최대 값은 코드에 설정되어있고 스키마에는 없습니다.

 

제 경험으로는 기본 설정은 대부분의 사람들에게 적합하고 업데이트 간격을 변경할 필요는 없었습니다. 제가 대화를 나눈 대부분의 고객은 계정이 30일 또는 그 이상일 경우 잠재적으로 사용하지 않는 것으로 간주했습니다.

 

참고 : 만약 msDS-LogonTimeSyncInterval 5일 이하라면, 임의값은 영향을 주지 않습니다.

 

 

이 기능을 사용하지 않으려면 어떻게 할까요?

 

만약 msDS-LogonTimeSyncInterval 기능을 사용하지 않으려면 msDS-LogonTimeSyncInterval 특성을 0으로 설정하면 됩니다.

 

개인적으로 lastLogontimeStamp의 업데이트 빈도를 변경하는 비즈니스 니즈를 이야기한적이 없습니다. 업데이트 프로세스 동작방식을 설명드렸고 특성은 모든 도메인 컨트롤러에 복제됩니다. 만약 정말로 사용하지 않는 계정에 대해 9~14일보다 최근의 timestamp가 필요하다면 DC 작업을 모니터링하기를 제안합니다. 이것은 대규모 환경에 적합합니다.

 

=======================================

 

혼란 없애기 - LastLogontimeStamp 검증하기는 도메인내의 모든 도메인 컨트롤러에 동기화됩니다.

 

오랫동안 고객은 (일반적으로 매우 오래된 날짜를) 표시하는 도구에 불만이 있었습니다. 이것은 대부분 관리자가 lastLogontimeStamp 특성 대신에 lastLogon 특성을 쿼리하는 도구를 사용했기 때문입니다.

 

예를 들어 계정 잠금 도구에 포함된 acctinfo.dll lastLogontimeStamp 데이터가 아닌 lastLogon 특성 데이터를 표시합니다. 일부 경우에서 도구가 표시하는 날짜는 월 또는 년 또는 아무것도 표시하지 않습니다. 이것은 lastLogon 특성을 쿼리하기 때문이고 찾고자하는 사용자는 참고되는 도메인 컨트롤러에서 인증받지 않았거나(이 경우는 null입니다) 참조되는 도메인 컨트롤러에서 매우 오랫동안 인증받지 않았을 경우입니다.

 

 

 

lastLogontimeStamp의 동기화 확인방법

 

lastLogonTimeStamp이 업데이트되고 원하는데로 복제된 것을 검증하려면 repadmin.exe showattr 스위치를 통해 할 수 있습니다. 아래는 이것에 대한 예제입니다. lastLogontimeStamp 9~14일 사이에 업데이트되고 도메인내의 모든 도메인 컨트롤러에 복제되는 것을 보여줍니다. 이것은 사용하지 않는 계정을 관리하는 예제는 아닙니다.

 

1. 한명의 사용자에 대하 모든 도메인 컨트롤러에서 lastLogontimeStamp의 값을 repadmin을 통해 확인합니다.

 

repadmin /showattr * (DN of the target user) /attrs:lastLogontimeStamp >lastLogontimeStamp.txt

 

예제

 

repadmin /showattr * CN=user1,OU=accounting,DC=domain,dc=com /attrs:lastLogontimeStamp >lastLogontimeStamp.txt

 

 

2. lastLogontimeStamp 특성에 데이터가 없는 사용자를 포함하여 도메인 내의 모든 사용자의 lastLogontimeStamp repadmin을 통해 덤프합니다.

 

repadmin /showattr * /subtree /filter:"(&(objectCategory=Person)(objectClass=user))" /attrs:lastLogontimeStamp >lastLogontimeStamp.txt

 

 

3. 특성이 복제된 사용자의 lastLogonTimeStamp를 덤프합니다.

 

repadmin /showattr * dc=domain,dc=com /subtree /filter:"((&(lastLogontimeStamp=*)(objectCategory=Person)(objectClass=user)))" /attrs:lastLogontimeStamp > lastLogontimeStamp-2-22-2009.txt

 

 

- Warren ‘For Once not DFSR’ Williams