AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 44862
Accepted
Garrett
Garrett
Asked: 2009-07-24 13:32:51 +0800 CST2009-07-24 13:32:51 +0800 CST 2009-07-24 13:32:51 +0800 CST

A melhor maneira de encontrar o computador em que um usuário fez logon pela última vez?

  • 772

Espero que em algum lugar do Active Directory o "último logon do [computador]" seja gravado/armazenado ou haja um log que eu possa analisar?

O objetivo de saber o último PC conectado é oferecer suporte remoto pela rede - nossos usuários se movimentam com pouca frequência, mas eu gostaria de saber que o que eu estou consultando estava atualizando naquela manhã (quando eles se conectaram , presumivelmente) no mínimo.

Também estou considerando scripts de login que gravam os nomes de usuário e computador em um local conhecido que eu possa referenciar, mas alguns de nossos usuários não gostam de sair por 15 dias de cada vez.

Se houver uma solução elegante que use scripts de login, mencione-a definitivamente - mas se funcionar apenas para desbloquear a estação, seria ainda melhor!

security active-directory remote-access user-management logon-scripts
  • 12 12 respostas
  • 320000 Views

12 respostas

  • Voted
  1. Best Answer
    John Gardeniers
    2009-07-24T14:24:03+08:002009-07-24T14:24:03+08:00

    Como parte de nosso script de logon, tenho essas informações (e mais) registradas em um compartilhamento oculto em um servidor, com um arquivo de log por usuário. Um script de logoff adiciona a hora em que o usuário fez logoff no mesmo arquivo de log. Fácil de configurar, sem custo e as informações estão em um formato de fácil leitura.

    • 27
  2. ThatGraemeGuy
    2009-07-25T03:03:56+08:002009-07-25T03:03:56+08:00

    Fazemos isso via script de logon que atualiza a descrição do objeto de computador no AD.

    Você precisa executar uma delegação de controle personalizada para permitir que "Usuários autenticados" gravem a propriedade de descrição de objetos de computador no(s) domínio(s).

    Feito isso, tudo o que você precisa é de um script que gere qualquer informação desejada e grave as propriedades no objeto de computador. Esse script é então atribuído como um script de logon por meio de um objeto de Diretiva de Grupo vinculado ao domínio.

    Colocamos um carimbo de data/hora, nome de usuário, IP(s) no campo de descrição. O carimbo de data/hora vem primeiro porque facilita a visualização rápida de objetos de computador "antigos" classificando no campo de descrição.

    Aqui está o script que escrevi para isso, se você quiser usá-lo como ponto de partida:

    On Error Resume Next
    
    Set objSysInfo = CreateObject("ADSystemInfo") 'Bind to AD
    Set objNet = CreateObject("WScript.Network")
    
    strCompDN = objSysInfo.ComputerName 'DN for computer, e.g. "CN=VISTAWORKSTATION,OU=Child OU Name,OU=Parent OU Name,DC=domain,DC=com"
    Set objComp = GetObject("LDAP://" & strCompDN) 'IADsComputer object
    
    strUserDN = objSysInfo.UserName 'DN for user, e.g. "CN=John Smith,OU=Child OU Name,OU=Parent OU Name,DC=domain,DC=com"
    Set objUser = GetObject("LDAP://" & strUserDN) 'IADsUser object
    
    strUsrLogin = LCase(objNet.UserName)
    
    strNow = Now
    strDateStamp = DatePart("yyyy",strNow) & _
        Right("0" & DatePart("m",strNow), 2) & _
        Right("0" & DatePart("d",strNow), 2) & _
        "@" & _
        Right("0" & DatePart("h",strNow), 2) & _
        Right("0" & DatePart("n",strNow), 2)
    
    'RegExp object used to perform a simple match on IP address
    Set objRE = New RegExp
    objRE.IgnoreCase = True
    'Note this regexp pattern isn't "correct" for matching an IPv4 address properly, but since WMI will return an
    'array of IP addresses, this is sufficient to distinguish IPv4 vs IPv6
    objRE.Pattern = "^\d+\.\d+\.\d+\.\d+$"
    
    strIP = ""
    
    'Connect to WMI and retreive all network adapters
    Set objWMI = GetObject("winmgmts:")
    Set colNICs = objWMI.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration")
    
    'Get the IP(s) assigned to whichever network adapter has our default gateway
    If colNICs.Count > 0 Then
        For Each objNIC in colNICs
            If IsArray(objNIC.DefaultIPGateway) Then
                arrIP = objNIC.IPAddress
                For i = 0 To UBound(arrip)
                    If objRE.Test(arrIP(i)) Then strIP = strIP & " " & arrIP(i)
                Next
                strMAC = objNIC.MACAddress
            End If  
        Next
    End If
    
    strIP = Trim(strIP)
    
    objComp.Description = strDateStamp & " " & strUsrLogin & " " & strIP
    objComp.Put "extensionAttribute1", strUsrLogin
    objComp.Put "extensionAttribute2", strIP
    objComp.Put "extensionAttribute3", strMAC
    
    objComp.SetInfo
    
    • 11
  3. marcusjv
    2012-03-01T16:38:00+08:002012-03-01T16:38:00+08:00

    Eu tive que alcançar o mesmo resultado por razões semelhantes; de alguma forma determinar de qual máquina um usuário específico efetuou login. Eu queria saber "antes do fato" e não podia alterar os scripts de login do usuário conforme discutido acima.
    Usei o powershell no DC no qual o usuário estava se autenticando para analisar o log de eventos de segurança:

    get-eventlog "Security" | where {$_.Message -like "*Username*" -AND "Source Network Address"} | export-csv C:\Temp\test.csv

    Abra o .csv com o Excel ou seu editor favorito e procure a entrada mais recente que mostra o Nome da Conta (Nome de Usuário) e o Endereço de Rede de Origem no mesmo evento.
    Isso pode não ser uma solução 100% confiável (dependendo dos tempos de concessão do DHCP, etc.), mas funcionou para mim.

    • 7
  4. Adam Brand
    2009-07-24T13:49:39+08:002009-07-24T13:49:39+08:00

    Você pode habilitar a auditoria para eventos de logon de conta. Esses eventos (incluindo o desbloqueio da estação de trabalho) serão armazenados no log de segurança do DC.

    Também existem ferramentas de terceiros que podem facilitar isso, como True Last Logon .

    • 6
  5. Maximus Minimus
    2009-07-25T01:06:11+08:002009-07-25T01:06:11+08:00

    Eu apenas escrevo o nome do usuário (assim como outras informações, como data e hora, algumas versões do programa e assim por diante) na descrição do computador usando um script de logon. Dessa forma, posso obter todas as informações de usuários e computadores do AD de maneira rápida e fácil e, como bônus, tenho uma boa maneira de identificar quais PCs ainda no AD não são usados ​​há algum tempo (e, portanto, provavelmente são máquinas mortas).

    • 4
  6. Matvey Solodovnikov
    2016-11-24T23:58:08+08:002016-11-24T23:58:08+08:00

    ThatGraemeGuy , obrigado pelo excelente roteiro! Eu tive que reescrevê-lo no PowerShell, mas ainda funciona.

    $CompDN = "(&(objectCategory=computer)(objectClass=computer)(cn=$env:COMPUTERNAME))"
    $strCompDN = [string]([adsisearcher]$CompDN).FindOne().Properties.distinguishedname
    $objComp = [ADSI]("LDAP://"+$strCompDN)
    
    # quit if computer is a server or DC
    if (($strCompDN -like '*Controller*') -or ($strCompDN -like '*SERVER*')) { exit }
    
    $strUsrLogin = $env:username
    $strDateStamp = Get-Date -f 'yyyy-MM-dd@HH:mm'
    $IPPattern = "^\d+\.\d+\.\d+\.\d+$"
    
    $colNICs = gwmi Win32_NetworkAdapterConfiguration
    if ($colNICs.Count -gt 0) {
    foreach ($objNIC in $colNICs){
            if ($objNIC.DefaultIPGateway) {
                $arrIP = $objNIC.IPAddress
                for ($i=0; $i -lt $colNICs.Count; $i++) { 
                if ($arrIP[$i] -match $IPPattern) { $strIP = $arrIP[$i]; $strMAC = $objNIC.MACAddress }
                }
            }
        }
    }
    
    $objComp.Description = $strDateStamp + " - " + $strUsrLogin + " - " + $strIP
    $objComp.extensionAttribute1 = $strUsrLogin
    $objComp.extensionAttribute2 = $strIP
    $objComp.extensionAttribute3 = $strMAC
    $objComp.SetInfo()
    
    • 4
  7. Laura Thomas
    2009-07-24T14:09:24+08:002009-07-24T14:09:24+08:00

    O truque para saber com certeza onde os usuários fizeram login pela última vez, além das sugestões de Adam, é a agregação de logs. Se você tiver vários controladores de domínio, verifique todos eles ou centralize seu registro e verifique o registro único.

    Algumas, talvez até a maioria, ferramentas de terceiros são inteligentes o suficiente para consultar todos os controladores de domínio. Mas se você está pensando em escrever um script para analisá-lo sozinho, não posso argumentar com força suficiente para a centralização de seus logs.

    • 2
  8. Scott
    2009-07-31T07:58:31+08:002009-07-31T07:58:31+08:00

    Idealmente, você capturaria o seguinte para sua equipe CSIRT ajudar nas investigações.

    ID do usuário fazendo login com o nome da estação de trabalho Endereço MAC Endereço IP Data/carimbo de data e hora Tipo de login (rdp, interfactive etc)

    Em seguida, despeje isso em um comando sql em um banco de dados que eles possam consultar. Bits e pedaços são registrados em todo o lugar, mas gravar isso economiza tempo puxando os dados de servidores DHCP/WINS etc...

    • 1
  9. SS64
    2019-10-14T04:59:09+08:002019-10-14T04:59:09+08:00

    Eu ia adicionar isso como um comentário à resposta de marcusjv acima, mas não tenho a reputação, então uma resposta separada terá que servir:

    Nessa expressão -AND "endereço de rede de origem" sempre será avaliado como TRUE

    Acho que o que você precisa é: get-eventlog "Segurança" | onde {$ .Message -like "*username*" -AND $ .Message.contains("Source Network Address")}

    • 1
  10. KAPes
    2009-07-25T23:48:48+08:002009-07-25T23:48:48+08:00

    A única maneira de obter as informações mais recentes é através da coleta de logs. Use uma ferramenta como o Microsoft Operations Manager ou uma ferramenta gratuita como o snare para agregar logs de eventos interessantes do servidor em um local central (arquivos de texto normais ou banco de dados SQL) e, em seguida, use ferramentas como logparser ou consultas SQL para gerar o relatório desejado.

    para encontrar diferentes IDs de eventos para diferentes eventos, acesse a Enciclopédia do Log de Eventos

    Deixe-me saber, se você quiser seguir esse caminho, posso ajudá-lo a criar as consultas apropriadas para o logparser.

    • 0

relate perguntas

  • Protegendo um novo servidor Ubuntu [fechado]

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Resolver o nome do host do endereço IP

    • 8 respostas
  • Marko Smith

    Como posso classificar a saída du -h por tamanho

    • 30 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    Qual é o utilitário de linha de comando no Windows para fazer uma pesquisa reversa de DNS?

    • 14 respostas
  • Marko Smith

    Como verificar se uma porta está bloqueada em uma máquina Windows?

    • 4 respostas
  • Marko Smith

    Qual porta devo abrir para permitir a área de trabalho remota?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    MikeN No Nginx, como posso reescrever todas as solicitações http para https mantendo o subdomínio? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 Qual é a diferença entre colchetes duplos e simples no bash? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch Como altero a senha da minha chave privada? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt Como funciona a sub-rede IPv4? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve