如何确定谁从 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 性能计数器。
我不确定登录用户是否可用作性能计数器,但如果可以,那么这可能对您有用。