Determine o usuário conectado no computador Windows a partir do Linux

1

Como posso determinar quem está conectado a um computador Windows XP remoto do Linux? Eu não tenho acesso de administrador no domínio ou no computador remoto.

Eu posso fazer isso em um computador Windows separado usando PsLoggedOn -L \computer de PsTools

Eu tentei usar nmblookup -A remotecomputer , mas vejo apenas entradas para o computador e o domínio, não uma entrada <03> para o usuário.

Eu também tentei executar o PsLoggedOn sob o wine; Eu recebo um erro:

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

Comecei a pesquisar no winexe , mas parece que precisaria de direitos administrativos no computador remoto para que ele funcionasse.

    
por Justin 27.10.2010 / 22:16

3 respostas

4

Descobri como fazer isso usando o Samba no computador com Linux.

Eu instalei e configurei o Kerberos e o Samba para acessar o domínio. Eu modifiquei /etc/samba/smb.conf , /etc/krb5.conf e /etc/hosts . Em seguida, usei alguns comandos net de um script ( net é uma interface de linha de comando para o Samba):

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

fornecendo uma lista dos identificadores de segurança para os usuários atualmente carregados no registro:

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

Em seguida, executo o comando net ads sid para procurar entradas do diretório ativo com base no SID do usuário. Isso pode funcionar apenas para usuários do domínio; Não tenho certeza se funciona para usuários conectados usando uma conta local. Parece que, se houver vários SIDs, o único que funciona é aquele que tem uma entrada "_Classes" correspondente.

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

Isso gera alguns erros, mas ainda resulta na impressão de informações inteiras do Active Directory do usuário. É razoavelmente lento, possivelmente devido aos erros, portanto, posso armazenar em cache o mapeamento de SID para nome de usuário.

[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
...

O campo mailNickname contém o nome do usuário (pelo menos para os usuários que testei até agora).

    
por 08.12.2010 / 16:22
2

Encontrei esta questão enquanto procurava uma solução para o mesmo problema. Olhando fixamente com a resposta de Justin acima, eu finalmente encontrei esse pedaço de Perl. $ Comp é o nome do computador que queremos interrogar.

$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;

Se a velocidade é um problema, como era para o Justin, verifique se as configurações do grupo e do grupo de trabalho estão corretas em smb.conf.

    
por 04.04.2012 / 07:16
0

Você consegue instalar software no computador remoto?

Nesse caso, você pode instalar o agente Opsview , (cliente nagios) aqui: link que permitirá consultar qualquer um dos contadores de desempenho do MS.

Não tenho certeza se os usuários conectados estão disponíveis como um contador de desempenho, mas se for, isso pode funcionar para você.

    
por 27.10.2010 / 22:53