Назад | Перейти на главную страницу

Определить вошедшего в систему пользователя на компьютере с Windows из Linux

Как я могу определить, кто вошел в систему на удаленном компьютере с Windows XP из Linux? У меня нет прав администратора в домене или на удаленном компьютере.

Я могу сделать это с отдельного компьютера с Windows, используя PsLoggedOn -L \\computer из PsИнструменты

Я пробовал использовать nmblookup -A remotecomputer, но я вижу только записи для компьютера и домена, а не <03> запись для пользователя.

Я также пробовал запускать PsLoggedOn под вином; Я получаю сообщение об ошибке:

Connecting to Registry of \\computer.company.com...
fixme:reg:RegConnectRegistryW Connect to L"computer.company.com" is not supported.

Я начал изучать Winexe, но похоже, что мне потребуются права администратора на удаленном компьютере, чтобы он заработал.

Я нашел, как это сделать с помощью Samba на компьютере с Linux.

Я установил и настроил 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 'username@AD.COMPANY.COM%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».

net ads sid 'S-1-5-21-8915387-325552579-1798637320-7772' -W COMPANY -U 'username@AD.COMPANY.COM%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 содержит имя пользователя (по крайней мере, для пользователей, которых я тестировал до сих пор).

Я нашел этот вопрос, когда искал решение той же проблемы. Глядя на ответ Джастина выше, я, наконец, придумал этот бит 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;

Если скорость является проблемой, как это было для Джастина, проверьте правильность настроек области и рабочей группы в smb.conf.

Умеете ли вы устанавливать программное обеспечение на удаленный компьютер?

Если да, вы можете установить Агент Opsview, (клиент nagios) отсюда: http://www.opsview.com/downloads/opsview-agents это позволит вам запросить любой из счетчиков производительности MS.

Я не уверен, доступны ли вошедшие в систему пользователи в качестве счетчика производительности, но если это так, то это может сработать для вас.