Cách tốt nhất để tìm máy tính mà người dùng đăng nhập lần cuối từ đâu?


23

Tôi hy vọng rằng một nơi nào đó trong Active Directory, "lần đăng nhập cuối cùng từ [máy tính]" được ghi / lưu trữ, hoặc có một nhật ký nào tôi có thể phân tích được?

Mục đích muốn biết PC cuối cùng đăng nhập là để cung cấp hỗ trợ từ xa qua mạng - người dùng của chúng tôi di chuyển không thường xuyên, nhưng tôi muốn biết rằng bất cứ điều gì tôi tư vấn đều cập nhật vào sáng hôm đó (khi họ đăng nhập , có lẽ) tối thiểu.

Tôi cũng đang xem xét các tập lệnh đăng nhập ghi tên người dùng và máy tính đến một vị trí đã biết mà tôi có thể tham khảo, nhưng một số người dùng của chúng tôi không muốn đăng xuất 15 ngày một lần.

Nếu có một giải pháp tao nhã sử dụng các tập lệnh đăng nhập, chắc chắn đề cập đến nó - nhưng nếu nó tình cờ hoạt động chỉ vì mở khóa trạm, điều đó sẽ còn tốt hơn nữa!

Câu trả lời:


26

Là một phần của tập lệnh đăng nhập của chúng tôi, tôi có thông tin đó (và hơn thế nữa) đã đăng nhập vào một chia sẻ ẩn trên máy chủ, với một tệp nhật ký cho mỗi người dùng. Một kịch bản đăng xuất thêm thời gian người dùng đăng xuất vào cùng một tệp nhật ký. Dễ dàng cài đặt, không có chi phí và thông tin có ở định dạng dễ đọc.


Ngoài ra, bằng cách thêm vào nhật ký, bạn có được một hồ sơ lịch sử, đôi khi có thể rất tiện dụng.
John Gardeniers

1
Đã triển khai điều này ngay bây giờ, có thể sẽ chuyển sang một vbs có nhiều tính năng hơn trong tương lai :) Cho đến nay, bằng cách sử dụng tập lệnh đăng nhập lô RẤT đơn giản: echo% date%,% time%,% username%, logon,% computername% >> \\ server \ logon $ \ logons.csv Mở bằng Excel và bạn đã thiết lập!
Garrett

Tập lệnh đăng nhập có chạy như người dùng không, trong trường hợp nào người dùng cũng có thể truy cập và sửa đổi nhật ký?
James Yale

@James, đây là lý do tại sao tôi sử dụng ẩn một chia sẻ ẩn để lưu trữ nhật ký. Tất nhiên, nó sẽ phụ thuộc vào mức độ hiểu biết của người dùng của bạn, vì vị trí có thể đạt được bằng cách đọc kịch bản. Tôi không gặp vấn đề đó với nhóm người dùng hiện tại của mình. :)
John Gardeniers

1
Tôi đã làm một cái gì đó tương tự, ngoại trừ tập lệnh đăng nhập thực hiện cuộc gọi đến một dịch vụ web đã cập nhật cơ sở dữ liệu. Cơ sở dữ liệu có giao diện người dùng web để xem trạng thái hiện tại. Tuy nhiên, nó đã có vấn đề cho người dùng di động.
Nic

10

Chúng tôi thực hiện điều này thông qua tập lệnh đăng nhập để cập nhật mô tả của đối tượng máy tính trong AD.

Bạn cần thực hiện một ủy quyền kiểm soát tùy chỉnh để cho phép "Người dùng được xác thực" viết thuộc tính mô tả của các đối tượng máy tính trong miền / s.

Khi đã xong, tất cả những gì bạn cần là một tập lệnh tạo ra bất kỳ thông tin nào bạn muốn và ghi các thuộc tính vào đối tượng máy tính. Tập lệnh này sau đó được gán làm tập lệnh đăng nhập thông qua đối tượng Chính sách nhóm được liên kết với tên miền.

Chúng tôi đặt dấu thời gian, tên người dùng, IP (s) trong trường mô tả. Dấu thời gian xuất hiện đầu tiên vì nó giúp dễ dàng nhìn thấy nhanh các đối tượng máy tính "cũ" bằng cách sắp xếp trên trường mô tả.

Đây là kịch bản tôi đã viết cho điều này nếu bạn muốn sử dụng nó làm điểm bắt đầu:

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

Làm cách nào để ủy quyền cho người dùng được xác thực viết quyền truy cập vào đối tượng trường mô tả trong AD?
NULL. Ngày

6

Tôi đã phải đạt được kết quả tương tự vì những lý do tương tự; bằng cách nào đó xác định máy nào người dùng cụ thể đăng nhập từ. Tôi muốn biết "trước thực tế" và không thể thay đổi tập lệnh đăng nhập của người dùng như đã thảo luận ở trên.
Tôi đã sử dụng powershell trên DC mà người dùng đang xác thực để phân tích nhật ký sự kiện Bảo mật:

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

Crack mở .csv bằng excel hoặc trình soạn thảo fav của bạn và tìm mục nhập gần đây nhất hiển thị cả Tên tài khoản (Tên người dùng) và Địa chỉ mạng nguồn trong cùng một sự kiện.
Đây có thể không phải là một giải pháp đáng tin cậy 100% (tùy thuộc vào thời gian thuê DHCP, v.v.), nhưng nó hiệu quả với tôi.



4

Tôi chỉ viết tên người dùng (cũng như thông tin khác, như ngày và giờ, một số phiên bản chương trình, v.v.) vào mô tả máy tính bằng cách sử dụng tập lệnh đăng nhập. Bằng cách đó, tôi có thể lấy tất cả thông tin từ Người dùng & Máy tính AD một cách nhanh chóng và dễ dàng, và như một phần thưởng có một cách tốt để xác định PC nào vẫn còn trong AD không được sử dụng trong một thời gian (và do đó rất có thể là máy chết).


3

ThatGraemeGuy , cảm ơn vì kịch bản xuất sắc! Tôi đã phải viết lại nó trong PowerShell, nhưng nó vẫn hoạt động.

$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()

2

Mẹo để biết chắc chắn nơi người dùng đăng nhập lần cuối ngoài các đề xuất từ ​​Adam là tổng hợp nhật ký. Nếu bạn có nhiều bộ điều khiển miền, bạn phải kiểm tra tất cả hoặc tập trung ghi nhật ký và sau đó kiểm tra nhật ký đơn.

Một số, thậm chí có thể là hầu hết, các công cụ của bên thứ ba đủ thông minh để truy vấn tất cả các bộ điều khiển miền. Nhưng nếu bạn đang nghĩ đến việc viết một kịch bản để phân tích nó ra thì tôi không thể tranh luận đủ mạnh để tập trung vào nhật ký của bạn.


1

Lý tưởng nhất, bạn sẽ nắm bắt những điều sau đây cho Nhóm CSIRT của mình để hỗ trợ cho các cuộc xâm lược.

userid đăng nhập bằng tên máy trạm Địa chỉ MAC Địa chỉ IP Ngày / Dấu thời gian đăng nhập (ndp, tương tác, v.v.)

Sau đó kết xuất nó vào lệnh sql vào cơ sở dữ liệu mà chúng có thể truy vấn. Các bit và mảnh được ghi lại ở khắp mọi nơi, nhưng ghi lại điều này giúp tiết kiệm thời gian lấy dữ liệu từ các máy chủ DHCP / WINS, v.v ...


1
Tôi nghĩ rằng điều này là hơi quá mức cho "Này, tên máy tính của Donny là gì?" nhưng có lẽ một ngày nào đó chúng ta sẽ ở cấp độ đó: P
Garrett

0

Cách duy nhất để có thông tin mới nhất là thông tin đăng nhập thông qua. Sử dụng một công cụ như Microsoft Operations Manager hoặc công cụ miễn phí như snare để tổng hợp nhật ký sự kiện thú vị từ máy chủ vào vị trí trung tâm (tệp văn bản thông thường hoặc cơ sở dữ liệu SQL) và sau đó sử dụng các công cụ như logparser hoặc truy vấn SQL để tạo báo cáo bạn muốn.

để tìm ID sự kiện khác nhau cho các sự kiện khác nhau, hãy truy cập Từ điển bách khoa toàn thư

Hãy cho tôi biết, nếu bạn muốn theo lộ trình này, tôi có thể giúp bạn tạo các truy vấn phù hợp cho logparser.


0

Nếu bạn đang tìm kiếm một tài liệu tham khảo lịch sử, bạn có thể thử một công cụ của bên thứ 3 như Logon Central từ Motivate Systems. Nó ghi lại tất cả các đăng nhập người dùng Active Directory và cung cấp giao diện web để khai thác dữ liệu. Nó cũng bao gồm một số biểu đồ khá tốt giúp chuyển số liệu thống kê đăng nhập sang phần trăm sử dụng.


0

Đăng nhập vào AD

Nhiều lần chúng tôi yêu cầu phải biết liệu đăng nhập cụ thể có phải là một phần của nhóm người dùng quảng cáo hay không. Hoặc đôi khi chúng ta cần biết một nhóm AD và muốn biết ai là người đăng nhập.

Có nhiều cách khác nhau để đạt được điều này.

Tôi làm theo bước này để tạo lối tắt trên màn hình của mình, nơi tôi có thể dễ dàng tìm thấy thông tin đăng nhập Vui lòng làm theo quy trình như

BẮT ĐẦU-> CHẠY -> rundll32 DSquery, OpenQueryWindow

Bạn có thể tìm thấy tất cả các AD bạn là một phần của, sử dụng này.

Bắt đầu-> Cài đặt-> Bảng điều khiển -> Công cụ quản trị viên -> Máy tính và người dùng Active Directory Chọn Miền bạn muốn tìm đăng nhập, nhấp chuột phải vào tên miền đó và chọn tùy chọn Tìm kiếm Tìm kiếm.


0

Tôi sẽ thêm điều này như một nhận xét cho câu trả lời của marcusjv ở trên, nhưng tôi không có tiếng tăm nên một câu trả lời riêng biệt sẽ phải làm:

Trong biểu thức đó -AND "Địa chỉ mạng nguồn" sẽ luôn đánh giá thành TRUE

Tôi nghĩ những gì bạn cần là: get-eventlog "Security" | trong đó {$ .Message giống như "* tên người dùng *" -AND $ .Message.contains ("Địa chỉ mạng nguồn")}

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.