it-swarm-tr.com

Bir kullanıcının en son oturum açtığı bilgisayarı bulmanın en iyi yolu?

Active Directory'de bir yerde "[bilgisayar] 'dan son oturum açılmış" yazıldığını/saklandığını veya ayrıştırabileceğim bir günlük olduğunu umuyorum?

Son oturum açmış PC'yi bilmek istemenin amacı, ağ üzerinden uzaktan destek sunmaktır - kullanıcılarımız oldukça seyrek hareket eder, ancak danışmanlık yaptığım her şeyin o sabah (oturum açtıklarında) güncellediğini bilmek istiyorum muhtemelen).

Ayrıca, referans verebileceğim bilinen bir konuma kullanıcı ve bilgisayar adlarını yazan giriş komut dosyalarını da düşünüyorum, ancak bazı kullanıcılarımız bir kerede 15 gün çıkış yapmayı sevmiyor.

Giriş komut dosyalarını kullanan zarif bir çözüm varsa, kesinlikle belirtin - ancak sadece istasyonun kilidini açmak için işe yararsa, bu daha da iyi olurdu!

24
Garrett

Oturum açma komut dosyamızın bir parçası olarak, bu bilgiler (ve daha fazlası) kullanıcı başına bir günlük dosyasıyla bir sunucuda gizli bir paylaşımda oturum açmış durumda. Oturum kapatma komut dosyaları, kullanıcının aynı günlük dosyasına oturumu kapattığı zamanı ekler. Kurulumu kolay, ücretsizdir ve bilgi kolay okunabilir bir formattadır.

26
John Gardeniers

Bunu, bilgisayar nesnesinin AD'deki açıklamasını güncelleyen oturum açma komut dosyası aracılığıyla yaparız.

"Kimliği Doğrulanmış Kullanıcılar" ın etki alanlarına/bilgisayarlarına bilgisayar nesnelerinin açıklama özelliğini yazmasına izin vermek için özel bir denetim temsilcisi seçmeniz gerekir.

Bu yapıldıktan sonra, ihtiyacınız olan tek şey istediğiniz bilgiyi üreten ve özellikleri bilgisayar nesnesine yazan bir komut dosyasıdır. Bu komut dosyası daha sonra, etki alanına bağlı bir Grup İlkesi nesnesi aracılığıyla bir oturum açma komut dosyası olarak atanır.

Açıklama alanına bir zaman damgası, kullanıcı adı, IP (ler) koyduk. Zaman damgası önce gelir, çünkü açıklama alanında sıralama yaparak "eski" bilgisayar nesnelerini hızlı bir şekilde görmeyi kolaylaştırır.

Başlangıç ​​noktası olarak kullanmak istiyorsanız, bunun için yazdığım komut dosyası:

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
10
ThatGraemeGuy

Benzer sonuçları aynı nedenlerle elde etmek zorunda kaldım; bir şekilde belirli bir kullanıcının hangi makineden giriş yaptığını belirler. "Gerçeklerden önce" bilmek istedim ve yukarıda tartışıldığı gibi kullanıcı giriş komut dosyalarını değiştiremedim.
Powershell'i, kullanıcının Güvenlik olay günlüğünü ayrıştırmak için kimlik doğrulaması yaptığı DC) üzerinde kullandım:

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

.Csv dosyasını Excel veya fav düzenleyicinizle açın ve aynı etkinlik içinde hem Hesap Adı'nı (Kullanıcı Adı) hem de Kaynak Ağ Adresini gösteren en son girişi arayın.
Bu% 100 güvenilir bir çözüm olmayabilir (DHCP kiralama sürelerine bağlı olarak, vb.), Ama benim için çalıştı.

6
marcusjv

Hesap oturum açma olayları için denetimi etkinleştir yapabilirsiniz. Bu etkinlikler (iş istasyonunun kilidini açma dahil) DC'nin güvenlik günlüğüne kaydedilir.

Bunu kolaylaştırabilecek üçüncü taraf araçları da vardır, örneğin True Last Logon .

6
Adam Brand

Ben sadece bir oturum açma komut dosyası kullanarak bilgisayar açıklamasına kullanıcı adı (yanı sıra tarih ve saat, diğer program sürümleri ve benzeri gibi diğer bilgileri) yazıyorum. Bu şekilde, AD Kullanıcıları ve Bilgisayarları'ndan tüm bilgileri hızlı ve kolay bir şekilde alabilirim ve bir bonus olarak, hala AD'de hangi bilgisayarların bir süredir kullanılmadığını (ve muhtemelen ölü makineler olduklarını) tanımlamanın iyi bir yolu var.

4
Maximus Minimus

ThatGraemeGuy, mükemmel senaryo için teşekkürler! PowerShell'de yeniden yazmak zorunda kaldım, ama yine de çalışıyor.

$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 '[email protected]: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()
3

Kullanıcıların Adam'ın önerileri dışında en son nerede oturum açtıklarını bilmenin hilesi günlük toplamadır. Birden fazla etki alanı denetleyiciniz varsa, bunların tümünü denetlemeniz veya günlüğünüzü merkezileştirmeniz ve ardından tek günlüğü denetlemeniz gerekir.

Bazıları, hatta çoğu üçüncü taraf araçları bile tüm etki alanı denetleyicilerini sorgulayacak kadar akıllıdır. Ancak kendiniz ayrıştırmak için bir senaryo yazmayı düşünüyorsanız, günlüklerinizin merkezileştirilmesi için yeterince güçlü bir şekilde tartışamam.

2
Laura Thomas

İdeal olarak, CSIRT Ekibinizin davetlere yardımcı olması için aşağıdakileri yakalarsınız.

iş istasyonu adıyla oturum açma kullanıcı kimliği MAC adresi IP adresi Tarih/Zaman damgası oturum açma türü (rdp, etkileşimli vb.)

Sonra bunu bir sql komutuna sorgulayabilecekleri bir veritabanına dökün. Bitler ve parçalar her yerde günlüğe kaydedilir, ancak bunu kaydetmek DHCP/WINS sunucularından vb.

1
Scott

Bunu yukarıdaki marcusjv'nin cevabına bir yorum olarak ekleyecektim, ancak ayrı bir cevabın yapması gerekecek şekilde itibarım yok:

Bu ifadede -AND "Kaynak Ağ Adresi" her zaman DOĞRU olarak değerlendirilir

Sanırım neye ihtiyacınız olduğunu: get-eventlog "Güvenlik" | burada {$ . Mesaj benzeri "* kullanıcı adı *" -AND $. Message.contains ("Kaynak Ağ Adresi")}

1
SS64

ind AD'de giriş yapın

Çoğu zaman, belirli giriş bilgilerinin reklam kullanıcı grubunun bir parçası olup olmadığını bilmemiz gerekir. Veya bazen bir AD grubunu bilmemiz gerekir ve tüm girişlerin kimlerin parçası olduğunu bilmek istedik.

Bunu başarmanın birçok farklı yolu vardır.

Masaüstümde giriş bilgilerini kolayca bulabileceğim bir kısayol oluşturmak için bu adımı izliyorum.

BAŞLAT-> ÇALIŞTIR -> rundll32 dsquery, OpenQueryWindow

Bunu kullanarak parçası olduğunuz tüm AD'leri bulabilirsiniz.

Başlat-> Ayarlar-> Denetim Masası -> Yönetici Araçları -> Active Directory Kullanıcısı ve Bilgisayarları Oturum açmak istediğiniz Etki Alanını seçin, o etki alanına sağ tıklayın ve “Bul” seçeneğini seçin.

0
Lepide

En son bilgilere sahip olmanın tek yolu günlük aramadır. İlginç olay günlüklerini sunucudan merkezi bir yere (normal metin dosyaları veya SQL veritabanı) toplamak için Microsoft Operations Manager gibi bir araç veya tuzak gibi ücretsiz bir araç kullanın ve ardından istediğiniz raporu oluşturmak için logparser veya SQL sorguları gibi araçları kullanın.

farklı etkinlikler için farklı etkinlik kimlikleri bulmak için gidin Etkinlik Günlüğü Ansiklopedisi

Bu rotayı takip etmek isterseniz logparser için uygun sorguları oluşturmanıza yardımcı olabilirim.

0
KAPes

Tarihsel bir referans arıyorsanız, Motivate Systems'tan Logon Central gibi bir üçüncü taraf aracını deneyebilirsiniz. Tüm Active Directory kullanıcı oturumlarını kaydeder ve veri madenciliği için bir web arayüzü sağlar. Ayrıca, oturum açma istatistiklerini yüzde kullanıma çeviren oldukça iyi grafikler de içerir.

0
Scott