如何在 Samba 中获取所有域用户的最后 Windows 域登录时间?

如何在 Samba 中获取所有域用户的最后 Windows 域登录时间?

我们运行 samba 作为主域控制器,并使用 ldap 进行用户帐户设置。正如标题所述,我正在寻找一种简单的方法来获取每个域用户的最后登录时间。

可以生成一个脚本来从 pam 或 ldap 中查找所有用户名并 grep samba 日志文件,这可能容易出错。我猜已经有了这样做的预期方法。

那么,如何获取任何/所有 Windows 机器上每个用户的最后登录时间?

答案1

我已经有一段时间没有使用 samba + LDAP 了,但我记得模式中有 sambaLogonTime 和 sambaLogoffTime 属性。

samba-ldap 操作指南提到这些属性

不过,我不确定这些是否会自动填充。此链接表明它们不是,尽管这已经很老了。我不需要使用这些属性,所以我并没有真正关注它们

答案2

我确实意识到这是一个非常非常古老的问题。我今天也遇到了同样的情况,结果发现有一种方法可以在较新版本的 Samba 中提取此问题。(我的情况是 Zentyal 服务器)

无论如何,您需要的是 LDB 数据库,它提供 Samba 用于域身份验证的 LDAP(-light)。在我的服务器上,它位于/var/lib/samba/private/sam.ldb.d/您想要的文件中,该文件是以您的基本 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 提供了公式。

答案3

快速而肮脏的解决方案是“合并”机器日志文件并 grep 登录

grep -A 1 make_connection_snum /var/log/samba/log.* > logons.txt

因此,您可以获得登录时访问其主目录的条目。按时间和用户排序似乎是一个简单的 perl 脚本的工作。

相关内容