Usually people manages Linux boxes using Windows clients but sometimes, someone (like me, for example) needs to manage a Windows server from a Linux host (it could be a normal client or another server which wants to talk to Windows).
IMO, Active Directory is one of the best product from Microsoft, since it’s based on a well known standard like X.500 (aka LDAP) and it has a good interoperabilty (although it could be better, see all the problems Samba people had in the past). So, even if there are tools like PHPLdapAdmin which are pretty good, if you need to automate users and groups management, there’s nothing better than a command line tool. Enter adtool.
adtool is very simple to use, but it’s not so simple to have it up&running, because this involves, amongst other things, to activate Secure LDAP in your Active Directory installation. To do this, you can follow this guide which will lead you through all the steps you have to do to enable LDAPS in Windows Server 2003. It may look scary but it works indeed, I used it myself.
Then, install adtool. In Debian/Ubuntu
# aptitude install adtool
Probably adtool is already present in your distribution’s repositories, so use your package manager. In the case it’s not present, simply download the adtool tarball from its homepage and do the usual
$ tar xzvf adtool-1.3.tar.gz
$ cd adtool-1.3
$ ./configure
$ make
# make install
It should be quite straightforward.
Now we have everything installed, so we can configure adtool.
Create /etc/adtool.cfg
or, even better $HOME/.adtool.cfg
because it will contain sensitive information, so lock it up to the user you’re willing to employ to modify Active Directory.
Put this in the config file (adapt to your needs)
uri ldaps://domain-controller.domain.tld
binddn cn=Administrator,cn=Users,dc=domain,dc=tld
bindpw $ADMIN_PASSWORD
searchbase dc=domain,dc=tld
As you can see we are using LDAPS here, because otherwise some adtool features like changing users’ passwords wouldn’t be available.
You don’t necessarily have to use the Administrator account, you can use whatever account you want, it just needs to have the right permissions (create user, change passwords etc).
So you can start poking your AD from the Linux command line, like this:
# create a new user with a dn like cn=$NAME,ou=$DEP,dc=domain,dc=tld
$ adtool usercreate "$NAME" "ou=$DEP,dc=domain,dc=tld"
# set user logon password
$ adtool setpass "$NAME" $my_secret_password
# to unlock the account (locked by default)
$ adtool userunlock "$NAME"
# to disable all the "account options" in the user's account tabe. Amongst them the "Password never expires" which is again enabled by default
$ adtool attributereplace "$NAME" userAccountControl 512
# to set user's mail address
$ adtool attributeadd "$NAME" mail user@domain.tld
# add the user to a group of users
$ adtool groupadduser $my_group "$NAME"
This could be very useful for user scripting and system integration if you’re in a mixed environment, just like we are.
This is excellent! Between Likewise Open, it’s getting a lot easier to interact with the Microsoft world.
Thanks for the writeup!
By the way, I’m having some problems with the “attributeget” flag. I get this result:
$ adtool attributeget cn=OpsMachines,cn=Computers,dc=mydomain,dc=com member
error: Error in ldap_search_s for ad_search: Operations error
Any idea what is going wrong? OpsMachines is a group under Computers. I have run equivalent queries with user account attributes, and I get the same “Operations error”. Initial googling didn’t get me any closer.
Does it work on yours?
Thanks for the information… really helpful
@Matt: Try to use the leftmost CN in the DN you’re looking for, not the whole DN. In your example, try with:
$ adtool attributeget OpsMachines member
it should work (at least, it works for me, I can succesfully enumerate the members of a group)
Hi Vide,
It’s funny I found this tool before your site only last week. I tried getting SSL to work and according to Fig.54 on that page using the ldp tool it’s all fine. But when I use ldaps:// I get the following error:
bind: : Can’t contact LDAP server (-1)
Change it back to ldap and it works. Every had that issue ? Seems very odd especially when I can even use Luma to browse the LDAP entries over port 636. Not sure what’s going on, I’ve even trace packets and I can see it actually talking to the AD box on port 636.
It’s a shame there’s not better debugging modes in adtool, and it seems it’s not been worked on for a while too.
@Félim: to be honest, IIRC, I experienced something similiar during the first 1-2 days of LDAPS implementation.. I touched so many things that I cannot remember and than one day, magically, started to work perfectly. Maybe there could be a problem with the certificates in the Linux client you’re running AD in, try to import your AD CA certificate in your system’s certificates.
Anyway yes, it’s truly a pity that adtool gets so little attention, it’s a very nice tool. I should really start studying (again) C :/
Sorted !
BASE dc=your_server,dc=domain,dc=com
URI ldaps://your_server.domain.com
TLS_REQCERT allow
And it works perfect… obvious I suppose ! oh well !!
[…] For a better guide in setting it up Vide has a great one over at his site. […]
[…] Read more at The eternal fight between admins and computers […]
@Vide
A little late, but that did work. Thanks a million!
–Matt
@Felim I tried your line “TLS_REQCERT” and it didn’t work for me. Like you, I could goto ldap:// and have things work, but I’d like to get ldaps:// working. Did you do anything else at all to get that to work?
If I am joined and editing a group on domain1, but want to add a user from domain2, can I? I’ve tried adding domain2\user and user@domain2.fqdn but it does not seem to like it. Being able to deal with multiple domains would make scripting pretty nice.
@Slonkak Sorry I haven’t checked back in a while. I did add the details to my ldap config as well as to the .adtool.cfg which at the time I didn’t think was required but perhaps it was.
Vide not related but in case it interests you abotu the WMIC tool.
http://felimwhiteley.wordpress.com/2008/10/01/using-python-to-retrieve-wmi-data-using-wmic/
@Slonkak: if you assumed, as I did, that TLS_REQCERT was to be added to adtool.cfg, it actually needs to be added to ldap.conf
Just as an FYI, I was getting the error …
error: Error in ldap_search_s for ad_search: Operations error
…when try to do a search with adtool. I ended up downloading and compiling adtool 1.3 myself and this fixed the issue. I was using adtool 1.2 when I had the issue. This is on Debian Etch.
Tool works very nice. I used the following to enable ssl in AD (TinyCA2):
http://www.directory.fedora.redhat.com/wiki/Howto:WindowsSync
I wasted several hours thinking that the tool wasn’t working, when in fact it was. I repatedly attempted to set a users’ password that didn’t meat the password complexity requirements set by default in AD (thought others might find that tip helpful). Does anyone know how to set a users First and Last name using the tool?
Here is the answer to how to set users’ first, last and display names:
adtool attributereplace jdoe “givenName” John
adtool attributereplace jdoe “sn” Doe
adtool attributereplace jdoe “displayName” “John Doe”
Simon,
I tried adding the TLS_REQCERT to the ldap.conf but still I get the same error
bind: : Can’t contact LDAP server (-1)
error: Error in ldap_bind Can’t contact LDAP server
I am wondering if we have to exchange the cert manually for this to work? Is there any thing I am missing
when i connect to domaint a massage came that your roamaing profile is not available.
Well, Thank you, this was exactly what i was looking for, but what if i have two objects with the same name, i have many such object in my directory, is there a way to point to them using the distinguishedName ? or how to get the second match for example ..?
[…] HOWTO: Managing Active Directory users under Linux with adtool « The eternal fight between adm… – April 16th ( tags: AD activedirectory linux windows cli adtool app utility ) April 16th, 2011, @ 9:00 am | Tags: links | Category: delicious links | Comments are closed | Trackback this Post | 0 views […]
Does anyone know how to list members of a security group ? I tried this in vain.
# adtool list CN=My Admins,OU=My-Users,DC=dc,DC=com
You can list the members of a group with:
adtool attributeget member