从 Linux 确定 Windows 计算机上的登录用户

从 Linux 确定 Windows 计算机上的登录用户

如何确定谁从 Linux 登录到远程 Windows XP 计算机?我没有域或远程计算机的管理员访问权限。

我可以使用PsLoggedOn -L \\computer来自工具

我尝试使用nmblookup -A remotecomputer,但我只看到计算机和域的条目,而看不到<03>用户的条目。

我也尝试在 wine 下运行 PsLoggedOn;我收到一个错误:

正在连接到 \\computer.company.com 的注册表...
fixme:reg:RegConnectRegistryW 不支持连接到 L“computer.company.com”。

我开始调查操作系统,但看起来我需要远程计算机上的管理权限才能使其正常工作。

答案1

我找到了如何在 Linux 计算机上使用 Samba 来做到这一点。

我安装并配置了 Kerberos 和 Samba 来访问域。我修改了/etc/samba/smb.conf/etc/krb5.conf/etc/hosts。然后我使用net脚本中的一些命令(net是 Samba 的命令行界面):

net rpc registry enumerate 'HKEY_USERS' -S xpcomputer.ad.company.com -U '[email protected]%password'

给出一个列表安全标识符对于当前已加载到注册表中的用户:

Keyname   = .DEFAULT
Modtime   = Thu, 02 Dec 2010 14:31:14 EST

Keyname   = S-1-5-19
Modtime   = Thu, 02 Dec 2010 14:31:16 EST

Keyname   = S-1-5-19_Classes
Modtime   = Thu, 02 Dec 2010 14:31:16 EST

Keyname   = S-1-5-20
Modtime   = Thu, 02 Dec 2010 14:31:16 EST

Keyname   = S-1-5-20_Classes
Modtime   = Thu, 02 Dec 2010 14:31:16 EST

Keyname   = S-1-5-21-8915387-325552579-1798637320-4573
Modtime   = Fri, 03 Dec 2010 22:53:39 EST

Keyname   = S-1-5-21-8915387-325552579-1798637320-7772
Modtime   = Wed, 08 Dec 2010 07:51:26 EST

Keyname   = S-1-5-21-8915387-325552579-1798637320-7772_Classes
Modtime   = Wed, 08 Dec 2010 07:51:26 EST

Keyname   = S-1-5-18
Modtime   = Thu, 02 Dec 2010 14:31:14 EST

然后,我运行net ads sid命令根据用户 SID 查找活动目录条目。这可能只适用于域用户;我不确定它是否适用于使用本地帐户登录的用户。似乎如果有多个 SID,则唯一有效的是具有相应“_Classes”条目的 SID。

net ads sid 'S-1-5-21-8915387-325552579-1798637320-7772' -W COMPANY -U '[email protected]%password'

这会产生一些错误,但仍然会打印用户的完整 Active Directory 信息。速度相当慢,可能是因为错误,所以我可能会缓存 SID 到用户名的映射。

[2010/12/08 10:03:00,  0] libads/kerberos.c:882(create_local_private_krb5_conf_for_domain)
  create_local_private_krb5_conf_for_domain: smb_mkstemp failed, for file /var/run/samba/smb_tmp_krb5.HpBqKJ. Errno Permission denied
[2010/12/08 10:03:02,  0] libads/kerberos.c:882(create_local_private_krb5_conf_for_domain)
  create_local_private_krb5_conf_for_domain: smb_mkstemp failed, for file /var/run/samba/smb_tmp_krb5.BCzT0T. Errno Permission denied
Got 1 replies

objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: [Lastname], [Firstname]
sn: [Lastname]
c: US
physicalDeliveryOfficeName: ...
telephoneNumber: ...
...(many more  fields)...
mailNickname: FLastname
...

mailNickname 字段包含用户名(至少对于我迄今为止测试过的用户而言)。

答案2

我在寻找完全相同问题的解决方案时发现了这个问题。看着上面 Justin 的回答,我终于想出了这个 Perl 代码。$Comp 是我们希望查询的计算机的名称。

$Res = `/usr/bin/net rpc registry enumerate 'HKEY_USERS' -S $Comp -U 'user\@domain\%password' | /bin/grep _Classes`;
 # For this application we're only interested in one entry and don't care if there are more
$Res =~ /= (.+)_Classes/;
$Sid = $1;
$Res = `/usr/bin/net ads sid -W domain -I IP_address_of_DC -U 'user\@domain\%password' "$Sid"`;
$Res =~ /sAMAccountName: (.*)/;
$User = $1; # The user logon ID
$Res = `/usr/bin/net ads search "(sAMAccountName=$User)" -U 'user\@domain\%password'`;
$Res =~ /displayName: (.*)/;
# The user's display name, which is what we're after
$Name = $1;

如果速度是一个问题,就像 Justin 一样,请检查以确保 smb.conf 中的领域和工作组设置正确。

答案3

您能在远程计算机上安装软件吗?

如果是的话,您可以安装Opsview 代理,(nagios 客户端)从这里:http://www.opsview.com/downloads/opsview-agents这将允许您查询任何 MS 性能计数器。

我不确定登录用户是否可用作性能计数器,但如果可以,那么这可能对您有用。

相关内容