从Linux中确定在Windows计算机上login的用户

我如何确定谁是从Linuxlogin到远程Windows XP计算机的? 我没有域或远程计算机上的pipe理员访问权限。

我可以使用PsTools的 PsLoggedOn -L \\computer从单独的Windows计算机上执行此操作

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

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

连接到\\ computer.company.com的registry...
 fixme:reg:RegConnectRegistryW连接到L“computer.company.com”不受支持。

我开始研究winexe ,但看起来我需要远程计算机上的pipe理权限才能使其工作。

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

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

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

给出当前在registry中加载的用户的安全标识符列表:

 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查找活动目录条目。 这可能只适用于域用户; 我不确定它是否适用于使用本地帐户login的用户。 看来,如果有多个SID,唯一有效的是具有相应的“_Classes”条目的那个。

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

这给出了一些错误,但仍然导致打印用户的整个Active Directory信息。 这很慢,可能是由于错误,所以我可能会cachingSID到用户名映射。

 [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字段包含用户名(至less对于我已经testing过的用户)。

我发现这个问题,同时寻找解决scheme完全相同的问题。 盯着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中的领域和工作组设置是正确的。

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

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

我不确定login的用户是否可以作为性能计数器,但是如果是这样的话,那么这可能对您有用。