mirror of
https://github.com/samba-team/samba.git
synced 2025-01-08 21:18:16 +03:00
6d4b58f622
(This used to be commit d62d7ba46f
)
923 lines
30 KiB
XML
923 lines
30 KiB
XML
<chapter id="domain-member">
|
|
|
|
<chapterinfo>
|
|
&author.jht;
|
|
&author.jeremy;
|
|
&author.jerry;
|
|
|
|
<!-- Authors of the ADS-HOWTO -->
|
|
&author.tridge;
|
|
&author.jelmer;
|
|
</chapterinfo>
|
|
|
|
<title>Domain Membership</title>
|
|
|
|
<para>
|
|
Domain Membership is a subject of vital concern, Samba must be able to
|
|
participate as a member server in a Microsoft Domain security context, and
|
|
Samba must be capable of providing Domain machine member trust accounts,
|
|
otherwise it would not be capable of offering a viable option for many users.
|
|
</para>
|
|
|
|
<para>
|
|
This chapter covers background information pertaining to domain membership,
|
|
Samba configuration for it, and MS Windows client procedures for joining a
|
|
domain. Why is this necessary? Because both are areas in which there exists
|
|
within the current MS Windows networking world and particularly in the
|
|
Unix/Linux networking and administration world, a considerable level of
|
|
mis-information, incorrect understanding, and a lack of knowledge. Hopefully
|
|
this chapter will fill the voids.
|
|
</para>
|
|
|
|
<sect1>
|
|
<title>Features and Benefits</title>
|
|
|
|
<para>
|
|
MS Windows workstations and servers that want to participate in domain
|
|
security need to
|
|
be made Domain members. Participating in Domain security is often called
|
|
<emphasis>Single Sign On</emphasis> or <acronym>SSO</acronym> for short. This
|
|
chapter describes the process that must be followed to make a workstation
|
|
(or another server - be it an <application>MS Windows NT4 / 200x</application>
|
|
server) or a Samba server a member of an MS Windows Domain security context.
|
|
</para>
|
|
|
|
<para>
|
|
Samba-3 can join an MS Windows NT4 style domain as a native member server, an
|
|
MS Windows Active Directory Domain as a native member server, or a Samba Domain
|
|
Control network.
|
|
</para>
|
|
|
|
<para>
|
|
Domain membership has many advantages:
|
|
</para>
|
|
|
|
<itemizedlist>
|
|
<listitem><para>
|
|
MS Windows workstation users get the benefit of SSO
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
Domain user access rights and file ownership / access controls can be set
|
|
from the single Domain SAM (Security Accounts Management) database
|
|
(works with Domain member servers as well as with MS Windows workstations
|
|
that are domain members)
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
Only <application>MS Windows NT4 / 200x / XP Professional</application>
|
|
workstations that are Domain members
|
|
can use network logon facilities
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
Domain Member workstations can be better controlled through the use of
|
|
Policy files (<filename>NTConfig.POL</filename>) and Desktop Profiles.
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
Through the use of logon scripts users can be given transparent access to network
|
|
applications that run off application servers
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
Network administrators gain better application and user access management
|
|
abilities because there is no need to maintain user accounts on any network
|
|
client or server, other than the central Domain database
|
|
(either NT4/Samba SAM style Domain, NT4 Domain that is back ended with an
|
|
LDAP directory, or via an Active Directory infrastructure)
|
|
</para></listitem>
|
|
</itemizedlist>
|
|
|
|
</sect1>
|
|
|
|
<sect1>
|
|
<title>MS Windows Workstation/Server Machine Trust Accounts</title>
|
|
|
|
<para>
|
|
A machine trust account is an account that is used to authenticate a client
|
|
machine
|
|
(rather than a user) to the Domain Controller server. In Windows terminology,
|
|
this is known as a "Computer Account."
|
|
</para>
|
|
|
|
<para>
|
|
The password of a machine trust account acts as the shared secret for
|
|
secure communication with the Domain Controller. This is a security
|
|
feature to prevent an unauthorized machine with the same NetBIOS name
|
|
from joining the domain and gaining access to domain user/group
|
|
accounts. Windows NT, 200x, XP Professional clients use machine trust
|
|
accounts, but Windows 9x / Me / XP Home clients do not. Hence, a
|
|
Windows 9x / Me / XP Home client is never a true member of a domain
|
|
because it does not possess a machine trust account, and thus has no
|
|
shared secret with the domain controller.
|
|
</para>
|
|
|
|
<para>
|
|
A Windows NT4 PDC stores each machine trust account in the Windows Registry.
|
|
The introduction of MS Windows 2000 saw the introduction of Active Directory,
|
|
the new repository for machine trust accounts.
|
|
</para>
|
|
|
|
<para>
|
|
A Samba PDC, however, stores each machine trust account in two parts,
|
|
as follows:
|
|
|
|
<itemizedlist>
|
|
<listitem><para>
|
|
A Domain Security Account (stored in the
|
|
<parameter>passdb backend</parameter> that has been configured in the
|
|
&smb.conf; file. The precise nature of the account information that is
|
|
stored depends on the type of backend database that has been chosen.
|
|
</para>
|
|
|
|
<para>
|
|
The older format of this data is the <filename>smbpasswd</filename> database
|
|
which contains the unix login ID, the Unix user identifier (UID), and the
|
|
LanMan and NT encrypted passwords. There is also some other information in
|
|
this file that we do not need to concern ourselves with here.
|
|
</para>
|
|
|
|
<para>
|
|
The two newer database types are called <emphasis>ldapsam</emphasis>,
|
|
<emphasis>tdbsam</emphasis>. Both store considerably more data than the
|
|
older <filename>smbpasswd</filename> file did. The extra information
|
|
enables new user account controls to be used.
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
A corresponding Unix account, typically stored in
|
|
<filename>/etc/passwd</filename>. Work is in progress to allow a
|
|
simplified mode of operation that does not require Unix user accounts, but
|
|
this may not be a feature of the early releases of Samba-3.
|
|
</para></listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
|
|
<para>
|
|
There are three ways to create machine trust accounts:
|
|
</para>
|
|
|
|
<itemizedlist>
|
|
<listitem><para>
|
|
Manual creation from the Unix/Linux command line. Here, both the Samba and
|
|
corresponding Unix account are created by hand.
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
Using the MS Windows NT4 Server Manager (either from an NT4 Domain member
|
|
server, or using the Nexus toolkit available from the Microsoft web site.
|
|
This tool can be run from any MS Windows machine so long as the user is
|
|
logged on as the administrator account.
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
"On-the-fly" creation. The Samba machine trust account is automatically
|
|
created by Samba at the time the client is joined to the domain.
|
|
(For security, this is the recommended method.) The corresponding Unix
|
|
account may be created automatically or manually.
|
|
</para></listitem>
|
|
</itemizedlist>
|
|
|
|
<sect2>
|
|
<title>Manual Creation of Machine Trust Accounts</title>
|
|
|
|
<para>
|
|
The first step in manually creating a machine trust account is to manually
|
|
create the corresponding Unix account in <filename>/etc/passwd</filename>.
|
|
This can be done using <command>vipw</command> or another 'add user' command
|
|
that is normally used to create new Unix accounts. The following is an example for a Linux based Samba server:
|
|
</para>
|
|
|
|
<para>
|
|
&rootprompt;<userinput>/usr/sbin/useradd -g 100 -d /dev/null -c <replaceable>"machine nickname"</replaceable> -s /bin/false <replaceable>machine_name</replaceable>$ </userinput>
|
|
</para>
|
|
|
|
<para>
|
|
&rootprompt;<userinput>passwd -l <replaceable>machine_name</replaceable>$</userinput>
|
|
</para>
|
|
|
|
<para>
|
|
On *BSD systems, this can be done using the <command>chpass</command> utility:
|
|
</para>
|
|
|
|
<para>
|
|
&rootprompt;<userinput>chpass -a "<replaceable>machine_name</replaceable>$:*:101:100::0:0:Workstation <replaceable>machine_name</replaceable>:/dev/null:/sbin/nologin"</userinput>
|
|
</para>
|
|
|
|
<para>
|
|
The <filename>/etc/passwd</filename> entry will list the machine name
|
|
with a "$" appended, won't have a password, will have a null shell and no
|
|
home directory. For example a machine named 'doppy' would have an
|
|
<filename>/etc/passwd</filename> entry like this:
|
|
</para>
|
|
|
|
<programlisting>
|
|
doppy$:x:505:501:<replaceable>machine_nickname</replaceable>:/dev/null:/bin/false
|
|
</programlisting>
|
|
|
|
<para>
|
|
Above, <replaceable>machine_nickname</replaceable> can be any
|
|
descriptive name for the client, i.e., BasementComputer.
|
|
<replaceable>machine_name</replaceable> absolutely must be the NetBIOS
|
|
name of the client to be joined to the domain. The "$" must be
|
|
appended to the NetBIOS name of the client or Samba will not recognize
|
|
this as a machine trust account.
|
|
</para>
|
|
|
|
<para>
|
|
Now that the corresponding Unix account has been created, the next step is to create
|
|
the Samba account for the client containing the well-known initial
|
|
machine trust account password. This can be done using the <ulink
|
|
url="smbpasswd.8.html"><command>smbpasswd(8)</command></ulink> command
|
|
as shown here:
|
|
</para>
|
|
|
|
<para>
|
|
<screen>
|
|
&rootprompt;<userinput>smbpasswd -a -m <replaceable>machine_name</replaceable></userinput>
|
|
</screen>>
|
|
</para>
|
|
|
|
<para>
|
|
where <replaceable>machine_name</replaceable> is the machine's NetBIOS
|
|
name. The RID of the new machine account is generated from the UID of
|
|
the corresponding Unix account.
|
|
</para>
|
|
|
|
<warning>
|
|
<title>Join the client to the domain immediately</title>
|
|
|
|
<para>
|
|
Manually creating a machine trust account using this method is the
|
|
equivalent of creating a machine trust account on a Windows NT PDC using
|
|
the <application>Server Manager</application>. From the time at which the
|
|
account is created to the time which the client joins the domain and
|
|
changes the password, your domain is vulnerable to an intruder joining
|
|
your domain using a machine with the same NetBIOS name. A PDC inherently
|
|
trusts members of the domain and will serve out a large degree of user
|
|
information to such clients. You have been warned!
|
|
</para>
|
|
</warning>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Using NT4 Server Manager to Add Machine Accounts to the Domain</title>
|
|
|
|
<para>
|
|
If the machine from which you are trying to manage the domain is an
|
|
<application>MS Windows NT4 workstation</application>
|
|
then the tool of choice is the package called <command>SRVTOOLS.EXE</command>.
|
|
When executed in the target directory this will unpack
|
|
<command>SrvMge.exe</command> and <command>UsrMgr.exe</command> (both are
|
|
Domain Management tools for MS Windows NT4 workstation.
|
|
</para>
|
|
|
|
<para>
|
|
If your workstation is any other MS Windows product you should download the
|
|
<command>Nexus.exe</command> package from the Microsoft web site. When executed
|
|
from the target directory this will unpack the same tools but for use on
|
|
<application>MS Windows 9x/Me/200x/XP</application>.
|
|
</para>
|
|
|
|
<para>
|
|
Launch the <command>srvmgr.exe</command> (Server Manager for Domains) and follow these steps:
|
|
</para>
|
|
|
|
<procedure>
|
|
<title>Server Manager Account Machine Account Management</title>
|
|
<step><para>
|
|
From the menu select <guimenu>Computer</guimenu>
|
|
</para></step>
|
|
|
|
<step><para>
|
|
Click on <guimenuitem>Select Domain</guimenuitem>
|
|
</para></step>
|
|
|
|
<step><para>
|
|
Click on the name of the domain you wish to administer in the
|
|
<guilabel>Select Domain</guilabel> panel and then click
|
|
<guibutton>OK</guibutton>.
|
|
</para></step>
|
|
|
|
<step><para>
|
|
Again from the menu select <guimenu>Computer</guimenu>
|
|
</para></step>
|
|
|
|
<step><para>
|
|
Select <guimenuitem>Add to Domain</guimenuitem>
|
|
</para></step>
|
|
|
|
<step><para>
|
|
In the dialog box, click on the radio button to
|
|
<guilabel>Add NT Workstation of Server</guilabel>, then
|
|
enter the machine name in the field provided, then click the
|
|
<guibutton>Add</guibutton> button.
|
|
</para></step>
|
|
</procedure>
|
|
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>"On-the-Fly" Creation of Machine Trust Accounts</title>
|
|
|
|
<para>
|
|
The second (and recommended) way of creating machine trust accounts is
|
|
simply to allow the Samba server to create them as needed when the client
|
|
is joined to the domain.
|
|
</para>
|
|
|
|
<para>Since each Samba machine trust account requires a corresponding Unix account, a method
|
|
for automatically creating the Unix account is usually supplied; this requires configuration of the
|
|
<ulink url="smb.conf.5.html#ADDMACHINESCRIPT">add machine script</ulink> option in
|
|
<filename>smb.conf</filename>. This method is not required, however; corresponding Unix
|
|
accounts may also be created manually.
|
|
</para>
|
|
|
|
|
|
<para>
|
|
Below is an example for a RedHat Linux system.
|
|
</para>
|
|
|
|
<para><programlisting>
|
|
[global]
|
|
# <...remainder of parameters...>
|
|
add machine script = /usr/sbin/useradd -d /dev/null -g 100 -s /bin/false -M %u
|
|
</programlisting></para>
|
|
|
|
|
|
</sect2>
|
|
|
|
|
|
<sect2><title>Making an MS Windows Workstation or Server a Domain Member</title>
|
|
|
|
<para>
|
|
The procedure for making an MS Windows workstation of server a member of the domain varies
|
|
with the version of Windows:
|
|
</para>
|
|
|
|
<sect3>
|
|
<title>Windows 200x XP Professional</title>
|
|
|
|
<para>
|
|
When the user elects to make the client a domain member, Windows 200x prompts for
|
|
an account and password that has privileges to create machine accounts in the domain.
|
|
A Samba administrative account (i.e., a Samba account that has root privileges on the
|
|
Samba server) must be entered here; the operation will fail if an ordinary user
|
|
account is given.
|
|
</para>
|
|
|
|
<para>
|
|
Note: For security reasons the password for this administrative account should be set
|
|
to a password that is other than that used for the root user in the
|
|
<filename>/etc/passwd</filename>.
|
|
</para>
|
|
|
|
<para>
|
|
The name of the account that is used to create domain member machine accounts can be
|
|
anything the network administrator may choose. If it is other than <emphasis>root</emphasis>
|
|
then this is easily mapped to root using the file pointed to be the &smb.conf; parameter
|
|
<parameter>username map = /etc/samba/smbusers</parameter>.
|
|
</para>
|
|
|
|
<para>
|
|
The session key of the Samba administrative account acts as an
|
|
encryption key for setting the password of the machine trust
|
|
account. The machine trust account will be created on-the-fly, or
|
|
updated if it already exists.
|
|
</para>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Windows NT4</title>
|
|
|
|
<para>
|
|
If the machine trust account was created manually, on the
|
|
Identification Changes menu enter the domain name, but do not
|
|
check the box <guilabel>Create a Computer Account in the Domain</guilabel>.
|
|
In this case, the existing machine trust account is used to join the machine
|
|
to the domain.
|
|
</para>
|
|
|
|
<para>
|
|
If the machine trust account is to be created
|
|
on-the-fly, on the Identification Changes menu enter the domain
|
|
name, and check the box <guilabel>Create a Computer Account in the
|
|
Domain</guilabel>. In this case, joining the domain proceeds as above
|
|
for Windows 2000 (i.e., you must supply a Samba administrative account when
|
|
prompted).
|
|
</para>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Samba</title>
|
|
|
|
<para>Joining a samba client to a domain is documented in
|
|
the <link linkend="domain-member">Domain Member</link> chapter.
|
|
</para>
|
|
</sect3>
|
|
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1>
|
|
<title>Domain Member Server</title>
|
|
|
|
<para>
|
|
This mode of server operation involves the samba machine being made a member
|
|
of a domain security context. This means by definition that all user
|
|
authentication will be done from a centrally defined authentication regime.
|
|
The authentication regime may come from an NT3/4 style (old domain technology)
|
|
server, or it may be provided from an Active Directory server (ADS) running on
|
|
MS Windows 2000 or later.
|
|
</para>
|
|
|
|
<para>
|
|
<emphasis>
|
|
Of course it should be clear that the authentication back end itself could be
|
|
from any distributed directory architecture server that is supported by Samba.
|
|
This can be LDAP (from OpenLDAP), or Sun's iPlanet, of NetWare Directory
|
|
Server, etc.
|
|
</emphasis>
|
|
</para>
|
|
|
|
<para>
|
|
Please refer to the <link linkend="samba-pdc">Samba as a Primary Domain
|
|
Controller chapter</link> for more information regarding how to create a domain
|
|
machine account for a domain member server as well as for information
|
|
regarding how to enable the samba domain member machine to join the domain and
|
|
to be fully trusted by it.
|
|
</para>
|
|
|
|
<sect2>
|
|
<title>Joining an NT4 type Domain with Samba-3</title>
|
|
|
|
<para>
|
|
<table frame="all"><title>Assumptions</title>
|
|
<tgroup align="left" cols="2">
|
|
<tbody>
|
|
<row><entry>NetBIOS name:</entry><entry>SERV1</entry></row>
|
|
<row><entry>Win2K/NT domain name:</entry><entry>DOM</entry></row>
|
|
<row><entry>Domain's PDC NetBIOS name:</entry><entry>DOMPDC</entry></row>
|
|
<row><entry>Domain's BDC NetBIOS names:</entry><entry>DOMBDC1 and DOMBDC2</entry></row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</para>
|
|
|
|
<para>
|
|
First, you must edit your &smb.conf; file to tell Samba it should
|
|
now use domain security.
|
|
</para>
|
|
|
|
<para>
|
|
Change (or add) your <ulink url="smb.conf.5.html#SECURITY">
|
|
<parameter>security</parameter></ulink> line in the [global] section
|
|
of your &smb.conf; to read:
|
|
</para>
|
|
|
|
<para>
|
|
<programlisting>
|
|
security = domain
|
|
</programlisting>
|
|
</para>
|
|
|
|
<para>
|
|
Next change the <ulink url="smb.conf.5.html#WORKGROUP"><parameter>
|
|
workgroup</parameter></ulink> line in the <parameter>[global]</parameter>
|
|
section to read:
|
|
</para>
|
|
|
|
<para>
|
|
<programlisting>
|
|
workgroup = DOM
|
|
</programlisting>
|
|
</para>
|
|
|
|
<para>
|
|
as this is the name of the domain we are joining.
|
|
</para>
|
|
|
|
<para>
|
|
You must also have the parameter <ulink url="smb.conf.5.html#ENCRYPTPASSWORDS">
|
|
<parameter>encrypt passwords</parameter></ulink> set to <constant>yes
|
|
</constant> in order for your users to authenticate to the NT PDC.
|
|
</para>
|
|
|
|
<para>
|
|
Finally, add (or modify) a <ulink url="smb.conf.5.html#PASSWORDSERVER">
|
|
<parameter>password server</parameter></ulink> line in the [global]
|
|
section to read:
|
|
</para>
|
|
|
|
<para>
|
|
<programlisting>
|
|
password server = DOMPDC DOMBDC1 DOMBDC2
|
|
</programlisting>
|
|
</para>
|
|
|
|
<para>
|
|
These are the primary and backup domain controllers Samba
|
|
will attempt to contact in order to authenticate users. Samba will
|
|
try to contact each of these servers in order, so you may want to
|
|
rearrange this list in order to spread out the authentication load
|
|
among domain controllers.
|
|
</para>
|
|
|
|
<para>
|
|
Alternatively, if you want smbd to automatically determine
|
|
the list of Domain controllers to use for authentication, you may
|
|
set this line to be:
|
|
</para>
|
|
|
|
<para>
|
|
<programlisting>
|
|
password server = *
|
|
</programlisting>
|
|
</para>
|
|
|
|
<para>
|
|
This method, allows Samba to use exactly the same mechanism that NT does. This
|
|
method either broadcasts or uses a WINS database in order to
|
|
find domain controllers to authenticate against.
|
|
</para>
|
|
|
|
<para>
|
|
In order to actually join the domain, you must run this command:
|
|
</para>
|
|
|
|
<para>
|
|
<screen>
|
|
<prompt>root# </prompt><userinput>net join -S DOMPDC -U<replaceable>Administrator%password</replaceable></userinput>
|
|
</screen>
|
|
</para>
|
|
|
|
<para>
|
|
If the <option>-S DOMPDC</option> argument is not given then
|
|
the domain name will be obtained from &smb.conf;.
|
|
</para>
|
|
|
|
<para>
|
|
As we are joining the domain DOM and the PDC for that domain
|
|
(the only machine that has write access to the domain SAM database)
|
|
is DOMPDC. The <replaceable>Administrator%password</replaceable> is
|
|
the login name and password for an account which has the necessary
|
|
privilege to add machines to the domain. If this is successful
|
|
you will see the message:
|
|
</para>
|
|
|
|
<para>
|
|
<computeroutput>Joined domain DOM.</computeroutput>
|
|
or <computeroutput>Joined 'SERV1' to realm 'MYREALM'</computeroutput>
|
|
</para>
|
|
|
|
<para>
|
|
in your terminal window. See the <ulink url="net.8.html">
|
|
net(8)</ulink> man page for more details.
|
|
</para>
|
|
|
|
<para>
|
|
This process joins the server to the domain without having to create the machine
|
|
trust account on the PDC beforehand.
|
|
</para>
|
|
|
|
<para>
|
|
This command goes through the machine account password
|
|
change protocol, then writes the new (random) machine account
|
|
password for this Samba server into a file in the same directory
|
|
in which an smbpasswd file would be stored - normally :
|
|
</para>
|
|
|
|
<para>
|
|
<filename>/usr/local/samba/private/secrets.tdb</filename>
|
|
</para>
|
|
|
|
<para>
|
|
This file is created and owned by root and is not
|
|
readable by any other user. It is the key to the domain-level
|
|
security for your system, and should be treated as carefully
|
|
as a shadow password file.
|
|
</para>
|
|
|
|
<para>
|
|
Finally, restart your Samba daemons and get ready for
|
|
clients to begin using domain security!
|
|
</para>
|
|
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Why is this better than security = server?</title>
|
|
|
|
<para>
|
|
Currently, domain security in Samba doesn't free you from
|
|
having to create local Unix users to represent the users attaching
|
|
to your server. This means that if domain user <constant>DOM\fred
|
|
</constant> attaches to your domain security Samba server, there needs
|
|
to be a local Unix user fred to represent that user in the Unix
|
|
filesystem. This is very similar to the older Samba security mode
|
|
<ulink url="smb.conf.5.html#SECURITYEQUALSSERVER">security = server</ulink>,
|
|
where Samba would pass through the authentication request to a Windows
|
|
NT server in the same way as a Windows 95 or Windows 98 server would.
|
|
</para>
|
|
|
|
<para>
|
|
Please refer to the <ulink url="winbind.html">Winbind
|
|
paper</ulink> for information on a system to automatically
|
|
assign UNIX uids and gids to Windows NT Domain users and groups.
|
|
</para>
|
|
|
|
<para>
|
|
The advantage to domain-level security is that the
|
|
authentication in domain-level security is passed down the authenticated
|
|
RPC channel in exactly the same way that an NT server would do it. This
|
|
means Samba servers now participate in domain trust relationships in
|
|
exactly the same way NT servers do (i.e., you can add Samba servers into
|
|
a resource domain and have the authentication passed on from a resource
|
|
domain PDC to an account domain PDC).
|
|
</para>
|
|
|
|
<para>
|
|
In addition, with <parameter>security = server</parameter> every Samba
|
|
daemon on a server has to keep a connection open to the
|
|
authenticating server for as long as that daemon lasts. This can drain
|
|
the connection resources on a Microsoft NT server and cause it to run
|
|
out of available connections. With <parameter>security = domain</parameter>,
|
|
however, the Samba daemons connect to the PDC/BDC only for as long
|
|
as is necessary to authenticate the user, and then drop the connection,
|
|
thus conserving PDC connection resources.
|
|
</para>
|
|
|
|
<para>
|
|
And finally, acting in the same manner as an NT server
|
|
authenticating to a PDC means that as part of the authentication
|
|
reply, the Samba server gets the user identification information such
|
|
as the user SID, the list of NT groups the user belongs to, etc.
|
|
</para>
|
|
|
|
<note>
|
|
<para>
|
|
Much of the text of this document
|
|
was first published in the Web magazine
|
|
<ulink url="http://www.linuxworld.com">LinuxWorld</ulink> as the article <ulink
|
|
url="http://www.linuxworld.com/linuxworld/lw-1998-10/lw-10-samba.html">Doing
|
|
the NIS/NT Samba</ulink>.
|
|
</para>
|
|
</note>
|
|
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1>
|
|
<title>Samba ADS Domain Membership</title>
|
|
|
|
<para>
|
|
This is a rough guide to setting up Samba 3.0 with kerberos authentication against a
|
|
Windows2000 KDC.
|
|
</para>
|
|
|
|
<sect2>
|
|
<title>Setup your <filename>smb.conf</filename></title>
|
|
|
|
<para>
|
|
You must use at least the following 3 options in &smb.conf;:
|
|
</para>
|
|
|
|
<para><programlisting>
|
|
realm = your.kerberos.REALM
|
|
security = ADS
|
|
encrypt passwords = yes
|
|
</programlisting></para>
|
|
|
|
<para>
|
|
In case samba can't figure out your ads server using your realm name, use the
|
|
<parameter>ads server</parameter> option in <filename>smb.conf</filename>:
|
|
<programlisting>
|
|
ads server = your.kerberos.server
|
|
</programlisting>
|
|
</para>
|
|
|
|
<note><para>
|
|
You do <strong>not</strong> need a smbpasswd file, and older clients will be authenticated as
|
|
if <parameter>security = domain</parameter>, although it won't do any harm and
|
|
allows you to have local users not in the domain. It is expected that the above
|
|
required options will change soon when active directory integration will get
|
|
better.
|
|
</para></note>
|
|
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Setup your <filename>/etc/krb5.conf</filename></title>
|
|
|
|
<para>
|
|
The minimal configuration for <filename>krb5.conf</filename> is:
|
|
</para>
|
|
|
|
<para><programlisting>
|
|
[realms]
|
|
YOUR.KERBEROS.REALM = {
|
|
kdc = your.kerberos.server
|
|
}
|
|
</programlisting></para>
|
|
|
|
<para>
|
|
Test your config by doing a <userinput>kinit
|
|
<replaceable>USERNAME</replaceable>@<replaceable>REALM</replaceable></userinput> and
|
|
making sure that your password is accepted by the Win2000 KDC.
|
|
</para>
|
|
|
|
<note><para>
|
|
The realm must be uppercase or you will get <errorname>Cannot find KDC for
|
|
requested realm while getting initial credentials</errorname> error
|
|
</para></note>
|
|
|
|
<note><para>
|
|
Time between the two servers must be synchronized. You will get a
|
|
<errorname>kinit(v5): Clock skew too great while getting initial credentials</errorname>
|
|
if the time difference is more than five minutes.
|
|
</para></note>
|
|
|
|
<para>
|
|
You also must ensure that you can do a reverse DNS lookup on the IP
|
|
address of your KDC. Also, the name that this reverse lookup maps to
|
|
must either be the netbios name of the KDC (ie. the hostname with no
|
|
domain attached) or it can alternatively be the netbios name
|
|
followed by the realm.
|
|
</para>
|
|
|
|
<para>
|
|
The easiest way to ensure you get this right is to add a
|
|
<filename>/etc/hosts</filename> entry mapping the IP address of your KDC to
|
|
its netbios name. If you don't get this right then you will get a
|
|
<errorname>local error</errorname> when you try to join the realm.
|
|
</para>
|
|
|
|
<para>
|
|
If all you want is kerberos support in &smbclient; then you can skip
|
|
straight to <link linkend="ads-test-smbclient">Test with &smbclient;</link> now.
|
|
<link linkend="ads-create-machine-account">Creating a computer account</link>
|
|
and <link linkend="ads-test-server">testing your servers</link>
|
|
is only needed if you want kerberos support for &smbd; and &winbindd;.
|
|
</para>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="ads-create-machine-account">
|
|
<title>Create the computer account</title>
|
|
|
|
<para>
|
|
As a user that has write permission on the Samba private directory
|
|
(usually root) run:
|
|
<programlisting>
|
|
<userinput>net join -U Administrator%password</userinput>
|
|
</programlisting>
|
|
</para>
|
|
|
|
<sect3>
|
|
<title>Possible errors</title>
|
|
|
|
<para>
|
|
<variablelist>
|
|
<varlistentry><term><errorname>ADS support not compiled in</errorname></term>
|
|
<listitem><para>Samba must be reconfigured (remove config.cache) and recompiled
|
|
(make clean all install) after the kerberos libs and headers are installed.
|
|
</para></listitem></varlistentry>
|
|
|
|
<varlistentry><term><errorname>net join prompts for user name</errorname></term>
|
|
<listitem><para>You need to login to the domain using <userinput>kinit
|
|
<replaceable>USERNAME</replaceable>@<replaceable>REALM</replaceable></userinput>.
|
|
<replaceable>USERNAME</replaceable> must be a user who has rights to add a machine
|
|
to the domain. </para></listitem></varlistentry>
|
|
</variablelist>
|
|
</para>
|
|
|
|
</sect3>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="ads-test-server">
|
|
<title>Test your server setup</title>
|
|
|
|
<para>
|
|
If the join was successful, you will see a new computer account with the
|
|
NetBIOS name of your Samba server in Active Directory (in the "Computers"
|
|
folder under Users and Computers.
|
|
</para>
|
|
|
|
<para>
|
|
On a Windows 2000 client try <userinput>net use * \\server\share</userinput>. You should
|
|
be logged in with kerberos without needing to know a password. If
|
|
this fails then run <userinput>klist tickets</userinput>. Did you get a ticket for the
|
|
server? Does it have an encoding type of DES-CBC-MD5 ?
|
|
</para>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="ads-test-smbclient">
|
|
<title>Testing with &smbclient;</title>
|
|
|
|
<para>
|
|
On your Samba server try to login to a Win2000 server or your Samba
|
|
server using &smbclient; and kerberos. Use &smbclient; as usual, but
|
|
specify the <parameter>-k</parameter> option to choose kerberos authentication.
|
|
</para>
|
|
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Notes</title>
|
|
|
|
<para>
|
|
You must change administrator password at least once after DC
|
|
install, to create the right encoding types
|
|
</para>
|
|
|
|
<para>
|
|
W2k doesn't seem to create the _kerberos._udp and _ldap._tcp in
|
|
their defaults DNS setup. Maybe fixed in service packs?
|
|
</para>
|
|
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1>
|
|
<title>Common Errors</title>
|
|
|
|
<para>
|
|
In the process of adding / deleting / re-adding domain member machine accounts there are
|
|
many traps for the unwary player and there are many "little" things that can go wrong.
|
|
It is particularly interesting how often subscribers on the samba mailing list have concluded
|
|
after repeated failed attempts to add a machine account that it is necessary to "re-install"
|
|
MS Windows on t he machine. In truth, it is seldom necessary to reinstall because of this type
|
|
of problem. The real solution is often very simple, and with understanding of how MS Windows
|
|
networking functions. easily overcome.
|
|
</para>
|
|
|
|
<sect2>
|
|
<title>Can Not Add Machine Back to Domain</title>
|
|
|
|
<para>
|
|
<emphasis>Problem:</emphasis> A Windows workstation was reinstalled. The original domain machine
|
|
account was deleted and added immediately. The workstation will not join the domain if I use
|
|
the same machine name. Attempts to add the machine fail with a message that the machine already
|
|
exists on the network - I know it doen't. Why is this failing?
|
|
</para>
|
|
|
|
<para>
|
|
The original name is still in the NetBIOS name cache and must expire after machine account
|
|
deletion BEFORE adding that same name as a domain member again. The best advice is to delete
|
|
the old account and then to add the machine with a new name.
|
|
</para>
|
|
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Adding Machine to Domain Fails</title>
|
|
|
|
<para>
|
|
Adding a Windows 200x or XP Professional machine to the Samba PDC Domain fails with a
|
|
message that, <errorname>The machine could not be added at this time, there is a network problem.
|
|
Please try again later.</errorname> Why?
|
|
</para>
|
|
|
|
<para>
|
|
You should check that there is an <parameter>add machine script</parameter> in your &smb.conf;
|
|
file. If there is not, please add one that is appropriate for your OS platform. If a script
|
|
has been defined you will need to debug it's operation. Increase the <parameter>log level</parameter>
|
|
in the &smb.conf; file to level 10, then try to rejoin the domain. Check the logs to see which
|
|
operation is failing.
|
|
</para>
|
|
|
|
<para>
|
|
Possible causes include:
|
|
</para>
|
|
|
|
<itemizedlist>
|
|
<listitem><para>
|
|
The script does not actually exist, or could not be located in the path specified.
|
|
</para>
|
|
|
|
<para>
|
|
<emphasis>Corrective Action:</emphasis> Fix it. Make sure that when run manually
|
|
that the script will add both the Unix system account _and_ the Samba SAM account.
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
The machine could not be added to the Unix system accounts file <filename>/etc/passwd</filename>
|
|
</para>
|
|
|
|
<para>
|
|
<emphasis>Corrective Action:</emphasis> Check that the machine name is a legal Unix
|
|
system account name. ie: If the Unix utility <command>useradd</command> is called
|
|
then make sure that the machine name you are trying to add can be added using this
|
|
tool. <command>Useradd</command> on some systems will not allow any upper case characters
|
|
nor will it allow spaces in the name.
|
|
</para></listitem>
|
|
</itemizedlist>
|
|
|
|
</sect2>
|
|
|
|
</sect1>
|
|
</chapter>
|