Ldap

如何獲取 Samba 中所有域使用者的最後一次 Windows 域登錄時間?

  • July 29, 2021

我們將 samba 作為主域控制器執行,使用 ldap 進行使用者帳戶設置。正如標題所說,我正在尋找一種簡單的方法來獲取每個域使用者的最後登錄時間。

可以生成一個腳本來從 pam 或 ldap 中查找所有使用者名並 grep samba 日誌文件,這可能容易出錯。我想已經有一種預期的方式來做到這一點。

那麼,如何在任何/所有 Windows 機器上獲取每個使用者的最後登錄時間?

我有一段時間沒有使用 samba + LDAP,但我記得架構中有 sambaLogonTime 和 sambaLogoffTime 屬性。

samba-ldap howto提到了這些屬性

但是,我不確定這些是否會自動填充。該連結表明它們不是,儘管現在已經很老了。我不需要使用這些屬性,所以我並沒有真正關注它們

我確實意識到這是一個非常古老的問題。我今天處於同樣的位置,事實證明有一種方法可以在新版本的 Samba 中提取它。(我的案例是 Zentyal 伺服器)

無論如何,您需要的是 LDB 數據庫,它提供 Samba 用於域身份驗證的 LDAP(-light)。在我的伺服器上,它位於/var/lib/samba/private/sam.ldb.d/您想要的文件中,該文件是以您的 Base DN 命名的文件。因此,如果您的基本 DN 是,DC=MY,DC=ORGANISATION,DC=com那麼文件將是DC\=MY\,DC\=ORGANISATION,DC\=com.ldb.

為了查詢某個使用者的資訊,使用他們的全名使用ldbsearch。就我而言,如果我想找到使用者 Joe SixPack:

ldbsearch -H /var/lib/samba/private/sam.ldb.d/DC\=MY\,DC\=ORGANISATION,DC\=com.ldb "CN=Joe Sixpack"

這將為您提供有關指定使用者的所有已知資訊。如果您只想他們最後一次登錄,只需指定屬性:

ldbsearch -H /var/lib/samba/private/sam.ldb.d/DC\=MY\,DC\=ORGANISATION,DC\=com.ldb "CN=Joe Sixpack" lastLogon

lastlogon 的格式是“從 1601 年 1 月 1 日的 0 小時到正在儲存的日期/時間已經過去的 100 納秒間隔數”。我不太明白這意味著什麼,但有一篇Microsoft Technet 文章提供了 Excel 公式。

引用自:https://serverfault.com/questions/248274