Obtenha uma lista de quem efetuou login em cada servidor

1

Estou procurando uma maneira de consultar o Active Directory ou o SMS ou algo assim para obter uma lista de usuários que fizeram login em um servidor Windows para vários servidores. Seria como verificar o arquivo lastlog no Linux. Eu não preciso do tempo ou de qualquer outra coisa, exceto o nome do usuário.

Algo com uma saída tão simples quanto: SERVERNAME: shatnerw, nimoyl, kelleyd,

Qualquer entrada sobre isso seria ótima. Mesmo que seja "use esta função no script VB".

Obrigado ablackhat

Edit: Até agora eu encontrei a informação está no registro em NT \ CurrentVersion \ ProfileList HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows. Tem o guia que está bem. Agora preciso descobrir uma maneira de consultá-lo remotamente.

    
por ablackhat 16.12.2010 / 20:54

2 respostas

1

Se você quiser apenas a lista de perfis, o PowerShell provavelmente é sua melhor aposta.

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

Isso irá instanciar $ reg como um titular para o objeto de registro remoto no HKLM. Para chegar ao bit que você quer:

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

Isso preencherá $ ProfileList com as subchaves dos próprios perfis. Então, para extrair a lista de usuários:

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
}

Ou algo próximo disso. Está fora do topo da minha cabeça.

    
por 16.12.2010 / 22:27
0

Crie um GPO que se aplique aos servidores que você deseja monitorar e, em Configuração do computador > Políticas > Configurações do Windows > Configurações de segurança > Políticas locais > Política de Auditoria, ative "Auditar Eventos de Logon" em Sucesso e / ou Falha, dependendo de seus requisitos.

Não ative os eventos de logon da conta de auditoria, se os servidores que você está monitorando forem DCs. Os eventos de logon da conta são gerados em controladores de domínio quando alguém faz logon com sua conta de usuário de domínio para ver muitos eventos.

Em suma, um "Evento de logon" é criado quando um usuário faz logon em um computador, um "Evento de logon da conta" é criado em um controlador de domínio quando um usuário faz logon com sua conta de usuário de domínio, mas o computador ao qual eles faça logon para gerar interativamente um evento de logon da conta também. Isto é o que você deseja monitorar. Juntamente com o EventForwarding (para seus servidores capacitados), você pode monitorar seu próprio log de eventos ou usar traps SNMP para capturar os eventos usando evntwin.exe e encaminhá-los para um sistema de monitoramento / alerta SNMP.

Nas estações de trabalho dos usuários, eu uso um VBScript que abre um processo oculto do IE para um servidor interno com PHP / MySQL instalado, o que simplesmente faz o dump do nome de usuário entrar no banco de dados e é isso. O VBScript:

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

Obviamente, você precisa do servidor web, PHP e banco de dados MySQL para isso, então, se é algo que você está interessado, me avise e vou extrair esses bits também. Você pode aplicar isso usando um GPO também, mas com uma ressalva, ele só pode ser executado na seção Configuração do usuário do seu GPO.

Então, duas opções para você lá. HTH.

Edit: Aqui está o script PHP mencionado acima. Fácil mesmo.

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.";

Felicidades

    
por 16.12.2010 / 22:14