How to configure Ubuntu Linux to use Active Directory authentication - This article discusses AD authentication for Ubuntu Linux. The process was tested on Ubuntu x86 (32 bit) version 10.10. Active Directory is a commonly used directory service based on the LDAP directory access protocol and Kerberos authentication. Both of these protocols have their roots in UNIX and Linux, an so it makes sense that we can configure these protocols on Linux to interoperate with Active Directory.
-->
Note: this article provides configuration help for a version of Ubuntu that will soon be deprecated. To configure the latest version of Ubuntu, please read Ubuntu 11.10 - Logging into Active Directory
The first thing we need to do is install the Kerberos and LDAP modules that we'll need. To do this, open a terminal window and gain root permissions. To do this, type sudo bash
apt-get install krb5-user
apt-get install libpam-krb5
apt-get install libnss-ldap
After installing the modules, we can begin configuring Kerberos and LDAP. Let's start with Kerberos. With our terminal window still open with root access, edit the Kerberos configuration file by typing: vi /etc/krb5.conf and configure the file as shown below:
[libdefaults] default_realm = MYDOMAIN.COM krb4_config = /etc/krb.conf krb4_realms = /etc/krb.realms kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = true
[realms] MYDOMAIN.COM = { kdc = mydomain.com:88 admin_server = mydomain.com default_domain = mydomain.com }
[domain_realm] .mydomain.com = MYDOMAIN.COM mydomain.com = MYDOMAIN.COM
[login] krb4_convert = true krb4_get_tickets = false
Edit the LDAP configuration file by typing vi /etc/ldap.conf and configure the file as shown below:
base dc=mydomain,dc=com uri ldap://adserver1.mydomain.com ldap://adserver2.mydomain.com ldap_version 3
binddn cn=aduser,cn=users,dc=mydomain,dc=com bindpw adUserPassword bind_policy soft bind_timelimit 120
timelimit 120 idle_timelimit 3600 network timeout 20
referrals on scope sub
pam_login_attribute sAMAccountName pam_filter objectCategory=User pam_groupdn cn=adGroup,cn=Users,dc=mydomain,dc=com pam_password ad pam_member_attribute member
nss_base_passwd dc=mydomain,dc=com?Sub?&(objectClass=User)(uidNumber=*) nss_base_shadow dc=mydomain,dc=com?Sub?&(objectClass=User)(uidNumber=*) nss_base_group dc=mydomain,dc=com?Sub?&(objectClass=Group)(gidNumber=*) nss_map_objectclass posixAccount User nss_map_objectclass shadowAccount User nss_map_attribute uid sAMAccountName nss_map_attribute cn sAMAccountName nss_map_attribute uniqueMember member nss_map_attribute homeDirectory unixHomeDirectory nss_map_attribute gecos name nss_map_objectclass posixGroup Group nss_initgroups_ignoreusers root,ldap,named,avahi,haldaemon,dbus,radvd,tomcat,radiusd,news,mailman,nz,myLocalUser
You will need to change the following to suit your environment:
- base: this is the distinguished name of your domain
- uri: these should be valid DNS names of your domain controllers
- binddn: this should be the distinguished name of a user account in your AD that you will use to connect to AD. The user requires no special priviledges.
- bindpw: this is the password of the user used for binddn.
- pam_groupdn: this is the distinguished name of the AD group that the users must be a member of in order to log onto this Ubuntu machine. If you want all users to be able to logon, you can comment out this line by placing a # at the beginning of the line.
- nss_initgroups_ignoreusers: add any local Ubuntu accounts to this list to avoid doing LDAP lookups when these users logon.
To tell Ubuntu to use LDAP to find user accounts, we need to edit the configuration of NSS, the name service switch module, to use both LDAP and the local user database. Type vi /etc/nsswitch.conf and configure the file as shown:
# /etc/nsswitch.conf #
passwd: files ldap group: files ldap shadow: files ldap
hosts: files mdns4_minimal dns mdns4 networks: files
protocols: db files services: db files ethers: db files rpc: db files
netgroup: nis ldap
As you can see, we've added ldap to the passwd, group, shadow, and netgroup entries. Now we can test our LDAP configuration, but first, we need to discuss the Active Directory user accounts that we'll use to logon to Ubuntu.
Active Directory User Configuration
In order to use AD users to logon to Ubuntu, the users must have uidNumber, gidNumber, loginShell, and unixHomeDirectory attributes defined in AD. NSS will then be able to retrieve these attributes when the user logs onto Ubuntu. I'll post tools to set these attributes in AD, but in the mean time you can use ADSIEDIT to set these attributes.
Testing your LDAP and NSS Configuration
Once you have AD users with the required attributes, and you've performed the configurations above, you can test if you can see AD users in the user list. To do this, type getent passwd . You should see both local Ubuntu users as well as any AD users that have the necessary attributes. If you don't see AD users, you've made a mistake in the files.
Adding Kerberos and LDAP to PAM
PAM (the pluggable authentication module) controls what authentication methods are used when a user attempts to logon to Ubuntu. We need to add Kerberos and LDAP to the list of methods PAM will use. In Ubuntu, this is pretty easy. Type pam-auth-update and make sure Kerberos and LDAP are selected as well as everything else in the list, then select OK.
This will mostly configure PAM correctly, however we need to add one line to the configuration. Type vi /etc/pam.d/common-session and add the following line to the configuration:
session required pam_mkhomedir.so skel=/etc/skel/ umask=0077
This will tell PAM to automatically create the user's home directory when they first logon.
Logging On
Now you should be able to log onto Ubuntu using an Active Directory user, assuming that the user has the required attributes set, and is a member of the group specified in pam_groupdn in ldap.conf if one is specified. After logon, open a terminal window and type klist to verify that you automatically got a Kerberos ticket from Active Directory. This will allow you to connect to Windows file shares without being prompted for credentials.
Configuring Ubuntu as a Windows File Server
Often the point of configuring Active Directory authentication for Ubuntu is to use Ubuntu as a file server for Windows users. To do this we'll install Samba, the SMB file sharing module. To install Samba, type apt-get install samba then edit the configuration by typing vi /etc/samba/smb.conf . Configure the file as shown below:
[global] security = ads realm = MYDOMAIN.COM workgroup = MYDOMAIN idmap uid = 10000-20000 idmap gid = 10000-20000 winbind enum users = yes winbind enum groups = yes template homedir = /home/%D/%U template shell = /bin/bash client use spnego = yes client ntlmv2 auth = yes encrypt passwords = yes winbind use default domain = yes restrict anonymous = 2 [temp] path = /temp read only = no [etc] path = /etc read only = yes
Now, we need to join the Ubuntu machine to Active Directory. To do this, type net ads join -U myuser@myrealm . Enter your password when prompted. The user must have the right to join computers to Active Directory. A bug may indicate that the join failed, but this error may be false and the join was successful. To verify that the join was successful, look in the Computers container in Active Directory and find a computer account with the name of the Ubuntu host. If it exists, then the join was successful.
Now you can create a file share. Let's create a /temp directory and share it to Windows users. Create the directory by typing mkdir /temp and then let's set the permissions so everyone has access, by typing chmod 777 /temp . Next, let's edit the Samba configuration to add the directory as a file share by typing vi /etc/samba/smb.conf and add the following lines to the end of the file:
[temp] path = /temp read only = no
After editing the file, restart Samba by typing /etc/init.d/samba restart
Now, from a Windows machine, logged on with an AD user with the correct attributes and group membership, click on the start button, click run, type \\ubuntuhostname\temp and click OK. A window should open to the share, and you should be automatically authenticated via Kerberos. Any files or folders you create in the share will be set with the correct permissions, using your UID and GID from Active Directory.
Final Word
If during this process you run into trouble, try getting your Ubuntu machine up to date by typing apt-get upgrade which will get your machine up to date for your current Ubuntui kernel, and or type apt-get dist-upgrade which will get you up to the latest kernel. Good luck!
Related Posts:
- Gnome 3 and the Future of the Linux Desktop
- Linux Mint 12 vs Ubuntu 11.10
- Rolling Commentary on Popular Linux Distributions
- Learning Man's Linux - Arch Linux
- Another Alternative - Linux Mint Debian Edition (LMDE)
- A Look at Popular Linux Distributions
- Setting Up Gnome Classic on Fedora 16
- Tweaking Gnome Classic on Ubuntu and Mint
- Linksys Wireless Card on Ubuntu and Mint
- Installing VMware Tools on Fedora Linux
2 comments:
Excellent GUIDE! Just tested it successfully on Ubuntu 12.04.02
Only thing I noticed is that it's very slow to login/off and to shut down, when I'm accessing AD users...
Yeah, you can speed things up by setting your LDAP base to an OU - large domains are slower to search through, or by tweaking your search strings. Anyway, this method of AD integration is depricated. The newer way, using SSSD, is shown here: http://www.itadmintools.com/2012/02/ubuntu-1110-logging-into-active.html
Post a Comment