Similar to PAM password sync, Samba can use LDAP as a backend for managing users. This tutorial sumarizes the steps necessary to use OpenLDAP as an authentication backend.
The configuration uses a single OpenLDAP server to authenticate against and multiple classic primary domain controllers; this will allow managing domain assets using a central server and without the requirement for client machines to join the domain using Kerberos.
smbldap-tools
- can be installed in Debian with aptitude install smbldap-tools
.
Copy the Samba LDAP schema (found in Debian at /usr/share/doc/samba/examples/LDAP/samba.schema.gz
) to /etc/ldap/schema
:
zcat /usr/share/doc/samba/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema
Create a temporary file anywhere named samba.conf
with the contents:
include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/samba.schema
then create a directory /tmp/slapd.d/
to hold the converted files:
mkdir -p /tmp/slapd.d
finally issue:
slaptest -f samba.conf -F /tmp/slapd.d/
If successful, the output should read:
config file testing succeeded
Next, copy the schema into the OpenLDAP configuration directory, adjust permissions and restart the server:
cp "/tmp/slapd.d/cn=config/cn=schema/cn={4}samba.ldif" "/etc/ldap/slapd.d/cn=config/cn=schema" chown openldap:openldap "/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}samba.ldif" /etc/init.d/openldap restart
To check that the schema is loaded, issue:
ldapsearch -LLLQY EXTERNAL -H ldapi:/// -b cn=schema,cn=config "(objectClass=olcSchemaConfig)" dn
Amongst the listed object, there should be:
dn: cn={4}samba,cn=schema,cn=config
Install the samba LDAP tools by issuing:
aptitude install smbldap-tools
and create the directory /etc/smbldap-tools
if it does not exist.
Next copy smbldap_bind.conf
and smbldap.conf
from the smbldap-tools package to /etc/smbldap-tools
:
cp /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf /etc/smbldap-tools/smbldap_bind.conf zcat /usr/share/doc/smbldap-tools/examples/smbldap.conf.gz > /etc/smbldap-tools/smbldap.conf
The files can now be edited to suit the local configuration.
Edit /etc/smbldap_bind.conf
and change the slaveDN
, masterDN
and passwords for both. If there is no backup OpenLDAP server, then the master DN will be used.
Edit /etc/smbldap-tools/smbldap.conf
and change:
suffix="ou=samba,dc=example,dc=com" SID="S-1-5-21-2252255531-4061614174-2474224977"
where:
dc=example,dc=com
is the base DN,samba
is an organizational unit that must be created on the OpenLDAP server.SID
is the local SID retrieved with the command net getlocalsid
- the rest of the tutorial will assume that S-1-5-21-2252255531-4061614174-2474224977
is the configured SID.
The consequence of defining an additional out
instead of the base DN is that all Samba related objects will be created as children of the samba
organizational unit whilst letting the OpenLDAP server clean.
To create the samba
organisational unit, issue:
cat >> sambaout.ldiff <<EOF version: 1 # Entry 1: ou=samba,dc=example,dc=com dn: ou=samba,dc=example,dc=com objectclass: organizationalUnit objectclass: top ou: samba EOF
which should create the file sambaou.ldiff
. After editing sambaou.ldiff
and setting appropriate values for dn
, the file can be imported by issuing:
ldapadd -x -D "cn=admin,dc=example,dc=com" -W -H ldap://SERVER.TLD -f samba.ldiff
where:
cn=admin,dc=example,dc=com
is the administrative DN and,SERVER.TLD
is the server name or IP of the OpenLDAP server.
Other interesting settings in /etc/smbldap-tools/smbldap.conf
include:
ldapTLS
which should be set to 0
if not using TLS,masterLDAP
and slaveLDAP
should be changed to the local OpenLDAP server(s),With the Samba LDAP tools configured, issue:
smbldap-populate
which, amongst other things, should print out the domain SID on the fist line and prompt for a root password.
An example template for configuring Samba is provided on the Samba templates page. The following configuration has to be added to the Global
section of the Samba configuration:
server role = classic primary domain controller passdb backend = ldapsam:ldap://example.com ldap suffix = ou=samba,dc=example,dc=com ldap admin dn = cn=admin,dc=example,dc=com ldap ssl = off ldap user suffix = ou=People ldap group suffix = ou=Groups ldap machine suffix = ou=Computers ldap idmap suffix = ou=Idmap ldap password sync = yes
With the configuration in place, restart Samba by issuing:
/etc/init.d/samba restart
Next, the password for the root DN of the OpenLDAP server:
smbpasswd -W
By issuing:
net getdomainsid
a domain SID is retrieved along the lines of S-1-5-21-2252255531-4061614174-2474224977
. The domain SID S-1-5-21-2252255531-4061614174-2474224977
has to be the same for all machines so issue the command:
net setdomainsid S-1-5-21-2252255531-4061614174-2474224977
on all machines that want to use the same LDAP server for authentication.
Managing users and groups can be done with the smbldap-*
commands of the smbldap-tools
package. For instance, adding an user would require issuing:
smbldap-useradd -a -P -m test
where:
-a
instructs LDAP to create Windows objects in OpenLDAP,-P
once the user is created, the smbldap-passwd
command is issued to change the user's password,-m
creates a home directory for the user,test
is the user name
all created users will be part of the Domain Users
LDAP group. To change the groups that the user belongs to the smbldap-usermod
tool can be used.