Как я могу определить, кто вошел в систему на удаленном компьютере с 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.
Я не уверен, доступны ли вошедшие в систему пользователи в качестве счетчика производительности, но если это так, то это может сработать для вас.