각 서버에 로그인한 사람의 목록을 가져옵니다.

각 서버에 로그인한 사람의 목록을 가져옵니다.

여러 서버에 대해 Windows 서버에 로그인한 사용자 목록을 얻을 수 있도록 Active Directory나 SMS 등을 쿼리하는 방법을 찾고 있습니다. Linux에서 lastlog 파일을 확인하는 것과 같습니다. 사용자 이름 외에는 시간이나 다른 것이 필요하지 않습니다.

다음과 같이 간단한 출력이 있는 것: SERVERNAME: shatnerw, nimoyl, kelleyd,

이것에 대한 어떤 의견이라도 좋을 것입니다. "VB 스크립트에서 이 함수를 사용하세요"라고 해도 마찬가지입니다.

고마워요, ablackhat님

편집: 지금까지 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList의 레지스트리에 정보가 있는 것으로 나타났습니다. 괜찮은 가이드가 있습니다. 이제 원격으로 쿼리하는 방법을 찾아야 합니다.

답변1

프로필 목록만 원한다면 PowerShell이 ​​가장 좋은 방법일 것입니다.

$Server = 'RemoteServer'
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Server)

그러면 $reg가 HKLM의 원격 레지스트리 개체에 대한 소유자로 인스턴스화됩니다. 원하는 부분을 얻으려면 다음을 수행하십시오.

$ProfileList = $Reg.OpenSubKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList')

그러면 $ProfileList가 프로필 자체의 하위 키로 채워집니다. 그런 다음 사용자 목록을 추출하려면 다음을 수행하십시오.

Write-Host "`n$Server: " -nonewline
ForEach ($SID in $ProfileList.GetValueNames()) {
    $ProfileKey = $ProfileList.OpenSubKey($SID)
    # Get the ProfileImagePath key
    $ProfileKey.GetValue("ProfileImagePath")
    # Break the path up into an array, using \ as the delimiter
    $PathBits = $ProfileKey.Split("\")
    # The last element of the array is our user, find the last element
    $LastIndex = $PathBits.Count - 1
    # Dump the last element to something useful
    $User = $PathBits[$LastIndex]
    # Output the user
    write-host " $User" -nonewline
}

아니면 그에 가까운 것. 내 머리 꼭대기에서 벗어났습니다.

답변2

모니터링하려는 서버에 적용되는 GPO를 만들고 컴퓨터 구성 > 정책 > Windows 설정 > 보안 설정 > 로컬 정책 > 감사 정책에서 요구 사항에 따라 성공 및/또는 실패 시 "로그온 이벤트 감사"를 활성화합니다.

모니터링하는 서버가 DC인 경우 계정 로그온 이벤트 감사를 활성화하지 마세요. 누군가 자신의 도메인 사용자 계정으로 로그온하면 도메인 컨트롤러에서 계정 로그온 이벤트가 생성되므로 이벤트가 너무 많이 표시됩니다.

즉, 사용자가 컴퓨터에 로그온할 때 "로그온 이벤트"가 생성되고, 사용자가 자신의 도메인 사용자 계정으로 로그온하지만 로그온하는 컴퓨터가 아닌 경우 도메인 컨트롤러에 "계정 로그온 이벤트"가 생성됩니다. 대화식으로 계정 로그온 이벤트도 생성합니다. 이것이 모니터링하려는 것입니다. EventForwarding(지원 가능한 서버의 경우)과 결합하면 자체 이벤트 로그를 모니터링하거나 SNMP 트랩을 사용하여 이벤트를 포착 evntwin.exe하고 이를 SNMP 모니터링/경고 시스템에 전달할 수 있습니다.

사용자 워크스테이션에서는 실제로 PHP/MySQL이 설치된 내부 서버에 숨겨진 IE 프로세스를 여는 VBScript를 사용합니다. 이는 단순히 사용자 이름을 데이터베이스에 덤프하는 것뿐입니다. VB스크립트:

Set oIE = CreateObject("InternetExplorer.Application")
Set oNet = CreateObject("WScript.Network")

sComputerName = oNet.ComputerName
sUsername = oNet.UserName

oIE.Navigate "http://intranet/logon/logon.php?un=" & Trim(sUsername) & "&ma=" & Trim(sComputerName)

Do While oIE.Busy = True

WScript.Sleep 500

Loop

oIE.Quit
Set oIE = Nothing
WScript.Quit

분명히 이를 위해서는 웹 서버, PHP 및 MySQL 데이터베이스가 필요하므로 관심이 있는 내용이 있으면 알려주시면 해당 부분도 자세히 조사하겠습니다. GPO를 사용하여 이를 적용할 수도 있지만 한 가지 주의할 점은 GPO의 사용자 구성 섹션에서만 실행할 수 있다는 것입니다.

그래서 두 가지 옵션이 있습니다. HTH.

편집: 위에서 언급한 PHP 스크립트는 다음과 같습니다. 정말 쉽습니다.

mysql_connect('mysqlserver', 'username', 'password');
mysql_select_db('database');

$un = trim(addslashes($_GET['un']));
$ma = trim(addslashes($_GET['ma']));

mysql_query("INSERT INTO userlist (user_logon_name, machine_name, logon_time) VALUES ('$un', '$ma', now())");

echo "User ". $_GET['un']. " logged on.";

건배

관련 정보