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