~zulcss/samba/server-dailies-3.0.37

« back to all changes in this revision

Viewing changes to docs-xml/Samba3-HOWTO/TOSHARG-Group-Mapping.xml

  • Committer: Chuck Short
  • Date: 2010-09-28 20:24:01 UTC
  • Revision ID: zulcss@ubuntu.com-20100928202401-tgh438aoatxv3zp3
Initial commit

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?xml version="1.0" encoding="iso-8859-1"?>
 
2
<!DOCTYPE chapter PUBLIC "-//Samba-Team//DTD DocBook V4.2-Based Variant V1.0//EN" "http://www.samba.org/samba/DTD/samba-doc">
 
3
<chapter id="groupmapping">
 
4
<chapterinfo>
 
5
        &author.jht;
 
6
        <author>
 
7
                <firstname>Jean Fran�ois</firstname><surname>Micouleau</surname>
 
8
        </author>
 
9
        &author.jerry;
 
10
</chapterinfo>
 
11
<title>Group Mapping: MS Windows and UNIX</title>
 
12
 
 
13
 
 
14
        <para>
 
15
<indexterm significance="preferred"><primary>groups</primary><secondary>mapping</secondary></indexterm>
 
16
<indexterm><primary>SID</primary></indexterm>
 
17
<indexterm><primary>associations</primary></indexterm>
 
18
<indexterm><primary>UNIX groups</primary></indexterm>
 
19
<indexterm><primary>groupmap</primary></indexterm>
 
20
<indexterm><primary>net</primary></indexterm>
 
21
        Starting with Samba-3, new group mapping functionality is available to create associations
 
22
        between Windows group SIDs and UNIX group GIDs. The <command>groupmap</command> subcommand
 
23
        included with the &net; tool can be used to manage these associations.
 
24
        </para>
 
25
 
 
26
        <para>
 
27
<indexterm><primary>group mapping</primary></indexterm>
 
28
<indexterm><primary>domain groups</primary></indexterm>
 
29
        The new facility for mapping NT groups to UNIX system groups allows the administrator to decide
 
30
        which NT domain groups are to be exposed to MS Windows clients. Only those NT groups that map
 
31
        to a UNIX group that has a value other than the default (<constant>-1</constant>) will be exposed
 
32
        in group selection lists in tools that access domain users and groups.
 
33
        </para>
 
34
 
 
35
        <warning>
 
36
        <para>
 
37
        <indexterm><primary>domain admin group</primary></indexterm>
 
38
<indexterm><primary>Windows group</primary></indexterm>
 
39
        The <parameter>domain admin group</parameter> parameter has been removed in Samba-3 and should no longer
 
40
        be specified in &smb.conf;. In Samba-2.2.x, this parameter was used to give the listed users membership in the
 
41
        <constant>Domain Admins</constant> Windows group, which gave local admin rights on their workstations
 
42
        (in default configurations).
 
43
        </para>
 
44
        </warning>
 
45
 
 
46
<sect1>
 
47
<title>Features and Benefits</title>
 
48
 
 
49
        <para>
 
50
        Samba allows the administrator to create MS Windows NT4/200x group accounts and to
 
51
        arbitrarily associate them with UNIX/Linux group accounts.
 
52
        </para>
 
53
 
 
54
        <para>
 
55
        <indexterm><primary>UID</primary></indexterm>
 
56
        <indexterm><primary>GID</primary></indexterm>
 
57
        <indexterm><primary>idmap uid</primary></indexterm>
 
58
<indexterm><primary>MMC</primary></indexterm>
 
59
<indexterm><primary>winbindd</primary></indexterm>
 
60
<indexterm><primary>ID range</primary></indexterm>
 
61
<indexterm><primary>group accounts</primary></indexterm>
 
62
        Group accounts can be managed using the MS Windows NT4 or MS Windows 200x/XP Professional MMC tools.
 
63
        Appropriate interface scripts should be provided in &smb.conf; if it is desired that UNIX/Linux system
 
64
        accounts should be automatically created when these tools are used. In the absence of these scripts, and
 
65
        so long as <command>winbindd</command> is running, Samba group accounts that are created using these
 
66
        tools will be allocated UNIX UIDs and GIDs from the ID range specified by the
 
67
        <smbconfoption name="idmap uid"/>/<smbconfoption name="idmap gid"/>
 
68
        parameters in the &smb.conf; file.
 
69
        </para>
 
70
 
 
71
        <figure id="idmap-sid2gid">
 
72
                <title>IDMAP: Group SID-to-GID Resolution.</title>
 
73
                <imagefile scale="50">idmap-sid2gid</imagefile>
 
74
        </figure>
 
75
 
 
76
        <figure id="idmap-gid2sid">
 
77
                <title>IDMAP: GID Resolution to Matching SID.</title>
 
78
        <imagefile scale="50">idmap-gid2sid</imagefile>
 
79
        </figure>
 
80
 
 
81
        <para>
 
82
        <indexterm><primary>IDMAP</primary></indexterm>
 
83
<indexterm><primary>SID-to-GID</primary></indexterm>
 
84
<indexterm><primary>net</primary><secondary>groupmap</secondary></indexterm>
 
85
<indexterm><primary>group mappings</primary></indexterm>
 
86
        In both cases, when winbindd is not running, only locally resolvable groups can be recognized. Please refer to
 
87
        <link linkend="idmap-sid2gid">IDMAP: Group SID-to-GID Resolution</link> and <link
 
88
        linkend="idmap-gid2sid">IDMAP: GID Resolution to Matching SID</link>.  The <command>net groupmap</command> is
 
89
        used to establish UNIX group to NT SID mappings as shown in <link linkend="idmap-store-gid2sid">IDMAP: storing
 
90
        group mappings</link>.
 
91
        </para>
 
92
 
 
93
        <figure id="idmap-store-gid2sid">
 
94
                <title>IDMAP Storing Group Mappings.</title>
 
95
                <imagefile scale="50">idmap-store-gid2sid</imagefile>
 
96
        </figure>
 
97
 
 
98
        <para>
 
99
        <indexterm><primary>groupadd</primary></indexterm>
 
100
        <indexterm><primary>groupdel</primary></indexterm>
 
101
<indexterm><primary>shadow utilities</primary></indexterm>
 
102
<indexterm><primary>groupmod</primary></indexterm>
 
103
        Administrators should be aware that where &smb.conf; group interface scripts make
 
104
        direct calls to the UNIX/Linux system tools (the shadow utilities, <command>groupadd</command>,
 
105
        <command>groupdel</command>, and <command>groupmod</command>), the resulting UNIX/Linux group names will be subject
 
106
        to any limits imposed by these tools. If the tool does not allow uppercase characters
 
107
        or space characters, then the creation of an MS Windows NT4/200x-style group of
 
108
        <literal>Engineering Managers</literal> will attempt to create an identically named
 
109
        UNIX/Linux group, an attempt that will of course fail.
 
110
        </para>
 
111
 
 
112
        <para>
 
113
        <indexterm><primary>GID</primary></indexterm>
 
114
        <indexterm><primary>SID</primary></indexterm>
 
115
        There are several possible workarounds for the operating system tools limitation. One
 
116
        method is to use a script that generates a name for the UNIX/Linux system group that
 
117
        fits the operating system limits and that then just passes the UNIX/Linux group ID (GID)
 
118
        back to the calling Samba interface. This will provide a dynamic workaround solution.
 
119
        </para>
 
120
 
 
121
        <para>
 
122
<indexterm><primary>net</primary><secondary>groupmap</secondary></indexterm>
 
123
        Another workaround is to manually create a UNIX/Linux group, then manually create the
 
124
        MS Windows NT4/200x group on the Samba server, and then use the <command>net groupmap</command>
 
125
        tool to connect the two to each other.
 
126
        </para>
 
127
 
 
128
</sect1>
 
129
 
 
130
<sect1>
 
131
<title>Discussion</title>
 
132
 
 
133
        <para>
 
134
<indexterm><primary>Windows NT4/200x</primary></indexterm>
 
135
<indexterm><primary>group privileges</primary></indexterm>
 
136
        When you install <application>MS Windows NT4/200x</application> on a computer, the installation
 
137
        program creates default users and groups, notably the <constant>Administrators</constant> group,
 
138
        and gives that group privileges necessary to perform essential system tasks,
 
139
        such as the ability to change the date and time or to kill (or close) any process running on the
 
140
        local machine.
 
141
        </para>
 
142
        
 
143
        <para>
 
144
        <indexterm><primary>Administrator</primary></indexterm>
 
145
        The <constant>Administrator</constant> user is a member of the <constant>Administrators</constant> group, and thus inherits
 
146
        <constant>Administrators</constant> group privileges. If a <constant>joe</constant> user is created to be a member of the
 
147
        <constant>Administrators</constant> group, <constant>joe</constant> has exactly the same rights as the user
 
148
        <constant>Administrator</constant>.
 
149
        </para>
 
150
 
 
151
        <para>
 
152
<indexterm><primary>domain member</primary></indexterm>
 
153
<indexterm><primary>Domain Admins</primary></indexterm>
 
154
<indexterm><primary>inherits rights</primary></indexterm>
 
155
<indexterm><primary>PDC</primary></indexterm>
 
156
        When an MS Windows NT4/200x/XP machine is made a domain member, the <quote>Domain Admins</quote> group of the
 
157
        PDC is added to the local <constant>Administrators</constant> group of the workstation. Every member of the
 
158
        <constant>Domain Admins</constant> group inherits the rights of the local <constant>Administrators</constant> group when
 
159
        logging on the workstation.
 
160
        </para>
 
161
 
 
162
        <para>
 
163
<indexterm><primary>Domain Admins</primary></indexterm>
 
164
<indexterm><primary>PDC</primary></indexterm>
 
165
        The following steps describe how to make Samba PDC users members of the <constant>Domain Admins</constant> group.
 
166
        </para>
 
167
 
 
168
        <orderedlist>
 
169
                <listitem><para>
 
170
                Create a UNIX group (usually in <filename>/etc/group</filename>); let's call it <constant>domadm</constant>.
 
171
                </para></listitem>
 
172
 
 
173
                <listitem><para>
 
174
<indexterm><primary>/etc/group</primary></indexterm>
 
175
                Add to this group the users that must be <quote>Administrators</quote>. For example,
 
176
                if you want <constant>joe, john</constant>, and <constant>mary</constant> to be administrators,
 
177
                your entry in <filename>/etc/group</filename> will look like this:
 
178
                </para>
 
179
 
 
180
                <para><programlisting>
 
181
                domadm:x:502:joe,john,mary
 
182
                </programlisting>
 
183
                </para></listitem>
 
184
 
 
185
                <listitem><para>
 
186
                Map this domadm group to the <quote>Domain Admins</quote> group by executing the command:
 
187
                </para>
 
188
 
 
189
                <para>
 
190
<screen>
 
191
&rootprompt;<userinput>net groupmap add ntgroup="Domain Admins" unixgroup=domadm rid=512 type=d</userinput>
 
192
</screen>
 
193
                </para>
 
194
                
 
195
                <para>
 
196
                <indexterm><primary>Domain Admins group</primary></indexterm>
 
197
                The quotes around <quote>Domain Admins</quote> are necessary due to the space in the group name.
 
198
                Also make sure to leave no white space surrounding the equal character (=).
 
199
                </para></listitem>
 
200
        </orderedlist>
 
201
 
 
202
        <para>
 
203
        Now <constant>joe, john</constant>, and <constant>mary</constant> are domain administrators.
 
204
        </para>
 
205
 
 
206
        <para>
 
207
        <indexterm><primary>groups</primary><secondary>domain</secondary></indexterm>
 
208
        It is possible to map any arbitrary UNIX group to any Windows NT4/200x group as well as
 
209
        to make any UNIX group a Windows domain group. For example, if you wanted to include a
 
210
        UNIX group (e.g., acct) in an ACL on a local file or printer on a Domain Member machine,
 
211
        you would flag that group as a domain group by running the following on the Samba PDC:
 
212
        </para>
 
213
 
 
214
        <para>
 
215
<screen>
 
216
&rootprompt;<userinput>net groupmap add rid=1000 ntgroup="Accounting" unixgroup=acct type=d</userinput>
 
217
</screen>
 
218
        The <literal>ntgroup</literal> value must be in quotes if it contains space characters to prevent
 
219
        the space from being interpreted as a command delimiter.
 
220
        </para>
 
221
 
 
222
        <para>
 
223
<indexterm><primary>RID</primary></indexterm>
 
224
<indexterm><primary>assigned RID</primary></indexterm>
 
225
        Be aware that the RID parameter is an unsigned 32-bit integer that should
 
226
        normally start at 1000. However, this RID must not overlap with any RID assigned
 
227
        to a user. Verification for this is done differently depending on the passdb backend
 
228
        you are using. Future versions of the tools may perform the verification automatically,
 
229
        but for now the burden is on you.
 
230
        </para>
 
231
 
 
232
        <sect2>
 
233
        <title>Warning: User Private Group Problems</title>
 
234
 
 
235
        <para>
 
236
<indexterm><primary>group accounts</primary></indexterm>
 
237
<indexterm><primary>Red Hat Linux</primary></indexterm>
 
238
<indexterm><primary>private groups</primary></indexterm>
 
239
        Windows does not permit user and group accounts to have the same name.
 
240
        This has serious implications for all sites that use private group accounts.
 
241
        A private group account is an administrative practice whereby users are each
 
242
        given their own group account. Red Hat Linux, as well as several free distributions
 
243
        of Linux, by default create private groups.
 
244
        </para>
 
245
 
 
246
        <para>
 
247
<indexterm><primary>UNIX/Linux group</primary></indexterm>
 
248
<indexterm><primary>Windows group</primary></indexterm>
 
249
        When mapping a UNIX/Linux group to a Windows group account, all conflict can
 
250
        be avoided by assuring that the Windows domain group name does not overlap
 
251
        with any user account name.
 
252
        </para>
 
253
 
 
254
        </sect2>
 
255
 
 
256
        <sect2>
 
257
        <title>Nested Groups: Adding Windows Domain Groups to Windows Local Groups</title>
 
258
 
 
259
        <indexterm><primary>groups</primary><secondary>nested</secondary></indexterm>
 
260
 
 
261
        <para>
 
262
<indexterm><primary>nested groups</primary></indexterm>
 
263
        This functionality is known as <constant>nested groups</constant> and was first added to
 
264
        Samba-3.0.3.
 
265
        </para>
 
266
 
 
267
        <para>
 
268
<indexterm><primary>nested groups</primary></indexterm>
 
269
        All MS Windows products since the release of Windows NT 3.10 support the use of nested groups.
 
270
        Many Windows network administrators depend on this capability because it greatly simplifies security
 
271
        administration.
 
272
        </para>
 
273
 
 
274
        <para>
 
275
<indexterm><primary>nested group</primary></indexterm>
 
276
<indexterm><primary>group membership</primary></indexterm>
 
277
<indexterm><primary>domain security</primary></indexterm>
 
278
<indexterm><primary>domain member server</primary></indexterm>
 
279
<indexterm><primary>local groups</primary></indexterm>
 
280
<indexterm><primary>domain global groups</primary></indexterm>
 
281
<indexterm><primary>domain global users</primary></indexterm>
 
282
        The nested group architecture was designed with the premise that day-to-day user and group membership
 
283
        management should be performed on the domain security database. The application of group security
 
284
        should be implemented on domain member servers using only local groups. On the domain member server,
 
285
        all file system security controls are then limited to use of the local groups, which will contain
 
286
        domain global groups and domain global users.
 
287
        </para>
 
288
 
 
289
        <para>
 
290
<indexterm><primary>individual domain user</primary></indexterm>
 
291
<indexterm><primary>domain group settings</primary></indexterm>
 
292
<indexterm><primary>Account Unknown</primary></indexterm>
 
293
        You may ask, What are the benefits of this arrangement? The answer is obvious to those who have plumbed
 
294
        the dark depths of Windows networking architecture. Consider for a moment a server on which are stored
 
295
        200,000 files, each with individual domain user and domain group settings. The company that owns the
 
296
        file server is bought by another company, resulting in the server being moved to another location, and then
 
297
        it is made a member of a different domain. Who would you think now owns all the files and directories?
 
298
        Answer: Account Unknown.
 
299
        </para>
 
300
 
 
301
        <para>
 
302
<indexterm><primary>directory access control</primary></indexterm>
 
303
<indexterm><primary>local groups</primary></indexterm>
 
304
<indexterm><primary>ACL</primary></indexterm>
 
305
<indexterm><primary>Account Unknown</primary></indexterm>
 
306
        Unraveling the file ownership mess is an unenviable administrative task that can be avoided simply
 
307
        by using local groups to control all file and directory access control. In this case, only the members
 
308
        of the local groups will have been lost. The files and directories in the storage subsystem will still
 
309
        be owned by the local groups. The same goes for all ACLs on them. It is administratively much simpler
 
310
        to delete the <constant>Account Unknown</constant> membership entries inside local groups with appropriate
 
311
        entries for domain global groups in the new domain that the server has been made a member of.
 
312
        </para>
 
313
 
 
314
        <para>
 
315
<indexterm><primary>nested groups</primary></indexterm>
 
316
<indexterm><primary>administrative privileges</primary></indexterm>
 
317
<indexterm><primary>domain member workstations</primary></indexterm>
 
318
<indexterm><primary>domain member servers</primary></indexterm>
 
319
<indexterm><primary>member machine</primary></indexterm>
 
320
<indexterm><primary>full rights</primary></indexterm>
 
321
<indexterm><primary>Domain Admins</primary></indexterm>
 
322
<indexterm><primary>local administrative privileges</primary></indexterm>
 
323
        Another prominent example of the use of nested groups involves implementation of administrative privileges
 
324
        on domain member workstations and servers. Administrative privileges are given to all members of the
 
325
        built-in local group <constant>Administrators</constant> on each domain member machine. To ensure that all domain
 
326
        administrators have full rights on the member server or workstation, on joining the domain, the
 
327
        <constant>Domain Admins</constant> group is added to the local Administrators group. Thus everyone who is
 
328
        logged into the domain as a member of the Domain Admins group is also granted local administrative
 
329
        privileges on each domain member.
 
330
        </para>
 
331
 
 
332
        <para>
 
333
<indexterm><primary>nested groups</primary></indexterm>
 
334
<indexterm><primary>auxiliary members</primary></indexterm>
 
335
<indexterm><primary>/etc/group</primary></indexterm>
 
336
<indexterm><primary>winbind</primary></indexterm>
 
337
        UNIX/Linux has no concept of support for nested groups, and thus Samba has for a long time not supported
 
338
        them either. The problem is that you would have to enter UNIX groups as auxiliary members of a group in
 
339
        <filename>/etc/group</filename>. This does not work because it was not a design requirement at the time
 
340
        the UNIX file system security model was implemented. Since Samba-2.2, the winbind daemon can provide
 
341
        <filename>/etc/group</filename> entries on demand by obtaining user and group information from the domain
 
342
        controller that the Samba server is a member of.
 
343
        </para>
 
344
 
 
345
        <para>
 
346
<indexterm><primary>/etc/group</primary></indexterm>
 
347
<indexterm><primary>libnss_winbind</primary></indexterm>
 
348
<indexterm><primary>local groups</primary></indexterm>
 
349
<indexterm><primary>Domain Users</primary></indexterm>
 
350
<indexterm><primary>alias group</primary></indexterm>
 
351
        In effect, Samba supplements the <filename>/etc/group</filename> data via the dynamic
 
352
        <command>libnss_winbind</command> mechanism. Beginning with Samba-3.0.3, this facility is used to provide
 
353
        local groups in the same manner as Windows. It works by expanding the local groups on the
 
354
        fly as they are accessed. For example, the <constant>Domain Users</constant> group of the domain is made
 
355
        a member of the local group <constant>demo</constant>. Whenever Samba needs to resolve membership of the
 
356
        <constant>demo</constant> local (alias) group, winbind asks the domain controller for demo members of the Domain Users
 
357
        group. By definition, it can only contain user objects, which can then be faked to be member of the
 
358
        UNIX/Linux group <constant>demo</constant>.
 
359
        </para>
 
360
 
 
361
        <para>
 
362
<indexterm><primary>nested groups</primary></indexterm>
 
363
<indexterm><primary>winbindd</primary></indexterm>
 
364
<indexterm><primary>NSS</primary></indexterm>
 
365
<indexterm><primary>winbind</primary></indexterm>
 
366
<indexterm><primary>local groups</primary></indexterm>
 
367
<indexterm><primary>Domain User Manager</primary></indexterm>
 
368
<indexterm><primary>net</primary><secondary>rpc</secondary><tertiary>group</tertiary></indexterm>
 
369
        To enable the use of nested groups, <command>winbindd</command> must be used with NSS winbind.
 
370
        Creation and administration of the local groups is done best via the Windows Domain User Manager or its
 
371
        Samba equivalent, the utility <command>net rpc group</command>. Creating the local group
 
372
        <constant>demo</constant> is achieved by executing:
 
373
        <screen>
 
374
        &rootprompt; net rpc group add demo -L -Uroot%not24get
 
375
        </screen>
 
376
<indexterm><primary>addmem</primary></indexterm>
 
377
<indexterm><primary>delmem</primary></indexterm>
 
378
        Here the -L switch means that you want to create a local group. It may be necessary to add -S and -U
 
379
        switches for accessing the correct host with appropriate user or root privileges. Adding and removing
 
380
        group members can be done via the <constant>addmem</constant> and <constant>delmem</constant> subcommands of
 
381
        <command>net rpc group</command> command. For example, addition of <quote>DOM\Domain Users</quote> to the
 
382
        local group <constant>demo</constant> is done by executing:
 
383
        <screen>
 
384
        net rpc group addmem demo "DOM\Domain Users"
 
385
        </screen>
 
386
<indexterm><primary>getent group demo</primary></indexterm>
 
387
<indexterm><primary>trusted domain</primary></indexterm>
 
388
<indexterm><primary>foreign domain</primary></indexterm>
 
389
<indexterm><primary>local access permissions</primary></indexterm>
 
390
        Having completed these two steps, the execution of <command>getent group demo</command> will show demo
 
391
        members of the global <constant>Domain Users</constant> group as members of  the group
 
392
        <constant>demo</constant>.  This also works with any local or domain user. In case the domain DOM trusts
 
393
        another domain, it is also possible to add global users and groups of the trusted domain as members of
 
394
        <constant>demo</constant>. The users from the foreign domain who are members of the group that has been
 
395
        added to the <constant>demo</constant> group now have the same local access permissions as local domain
 
396
        users have. 
 
397
        </para>
 
398
 
 
399
        </sect2>
 
400
 
 
401
        <sect2>
 
402
        <title>Important Administrative Information</title>
 
403
 
 
404
        <para>
 
405
        Administrative rights are necessary in two specific forms:
 
406
        </para>
 
407
 
 
408
        <orderedlist>
 
409
                <listitem><para>For Samba-3 domain controllers and domain member servers/clients.</para></listitem>
 
410
                <listitem><para>To manage domain member Windows workstations.</para></listitem>
 
411
        </orderedlist>
 
412
 
 
413
        <para>
 
414
<indexterm><primary>rights and privileges</primary></indexterm>
 
415
<indexterm><primary>domain member client</primary></indexterm>
 
416
<indexterm><primary>group account</primary></indexterm>
 
417
        Versions of Samba up to and including 3.0.10 do not provide a means for assigning rights and privileges
 
418
        that are necessary for system administration tasks from a Windows domain member client machine, so
 
419
        domain administration tasks such as adding, deleting, and changing user and group account information, and
 
420
        managing workstation domain membership accounts, can be handled by any account other than root.
 
421
        </para>
 
422
 
 
423
        <para>
 
424
<indexterm><primary>privilege management</primary></indexterm>
 
425
<indexterm><primary>delegated</primary></indexterm>
 
426
<indexterm><primary>Administrator</primary></indexterm>
 
427
        Samba-3.0.11 introduced a new privilege management interface (see <link linkend="rights">User Rights and Privileges</link>)
 
428
        that permits these tasks to be delegated to non-root (i.e., accounts other than the equivalent of the
 
429
        MS Windows Administrator) accounts.
 
430
        </para>
 
431
 
 
432
        <para>
 
433
<indexterm><primary>mapped</primary></indexterm>
 
434
<indexterm><primary>Domain Admins</primary></indexterm>
 
435
        Administrative tasks on a Windows domain member workstation can be done by anyone who is a member of the
 
436
        <constant>Domain Admins</constant> group. This group can be mapped to any convenient UNIX group.
 
437
        </para>
 
438
 
 
439
        <sect3>
 
440
        <title>Applicable Only to Versions Earlier than 3.0.11</title>
 
441
 
 
442
        <para>
 
443
<indexterm><primary>privilege</primary></indexterm>
 
444
        Administrative tasks on UNIX/Linux systems, such as adding users or groups, requires
 
445
        <constant>root</constant>-level privilege. The addition of a Windows client to a Samba domain involves the
 
446
        addition of a user account for the Windows client.
 
447
        </para>
 
448
 
 
449
        <para>
 
450
<indexterm><primary>system security</primary></indexterm>
 
451
<indexterm><primary>privileges</primary></indexterm>
 
452
        Many UNIX administrators continue to request that the Samba Team make it possible to add Windows workstations, or 
 
453
        the ability to add, delete, or modify user accounts, without requiring <constant>root</constant> privileges. 
 
454
        Such a request violates every understanding of basic UNIX system security.
 
455
        </para>
 
456
 
 
457
        <para>
 
458
<indexterm><primary>privileges</primary></indexterm>
 
459
<indexterm><primary>/etc/passwd</primary></indexterm>
 
460
<indexterm><primary>Domain Server Manager</primary></indexterm>
 
461
<indexterm><primary>Domain User Manager</primary></indexterm>
 
462
<indexterm><primary>manage share-level ACL</primary></indexterm>
 
463
<indexterm><primary>share-level ACLs</primary></indexterm>
 
464
        There is no safe way to provide access on a UNIX/Linux system without providing
 
465
        <constant>root</constant>-level privileges. Provision of <constant>root</constant> privileges can be done
 
466
        either by logging on to the Domain as the user <constant>root</constant> or by permitting particular users to
 
467
        use a UNIX account that has a UID=0 in the <filename>/etc/passwd</filename> database. Users of such accounts
 
468
        can use tools like the NT4 Domain User Manager and the NT4 Domain Server Manager to manage user and group
 
469
        accounts as well as domain member server and client accounts. This level of privilege is also needed to manage
 
470
        share-level ACLs.
 
471
        </para>
 
472
 
 
473
        </sect3>
 
474
 
 
475
        </sect2>
 
476
 
 
477
        <sect2>
 
478
        <title>Default Users, Groups, and Relative Identifiers</title>
 
479
 
 
480
        <para>
 
481
        <indexterm><primary>Relative Identifier</primary><see>RID</see></indexterm>
 
482
        <indexterm><primary>RID</primary></indexterm>
 
483
<indexterm><primary>Windows NT4/200x/XP</primary></indexterm>
 
484
<indexterm><primary>well-known RID</primary></indexterm>
 
485
<indexterm><primary>domain groups</primary></indexterm>
 
486
<indexterm><primary>tdbsam</primary></indexterm>
 
487
<indexterm><primary>LDAP</primary></indexterm>
 
488
<indexterm><primary>NT groups</primary></indexterm>
 
489
        When first installed, Windows NT4/200x/XP are preconfigured with certain user, group, and
 
490
        alias entities. Each has a well-known RID. These must be preserved for continued
 
491
        integrity of operation. Samba must be provisioned with certain essential domain groups that require
 
492
        the appropriate RID value. When Samba-3 is configured to use <constant>tdbsam</constant>, the essential
 
493
        domain groups are automatically created. It is the LDAP administrator's responsibility to create
 
494
        (provision) the default NT groups.
 
495
        </para>
 
496
 
 
497
        <para>
 
498
<indexterm><primary>default users</primary></indexterm>
 
499
<indexterm><primary>default groups</primary></indexterm>
 
500
<indexterm><primary>default aliases</primary></indexterm>
 
501
<indexterm><primary>RID</primary></indexterm>
 
502
        Each essential domain group must be assigned its respective well-known RID. The default users, groups,
 
503
        aliases, and RIDs are shown in <link linkend="WKURIDS">Well-Known User Default RIDs</link>.
 
504
        </para>
 
505
 
 
506
        <note><para>
 
507
<indexterm><primary>passdb backend</primary></indexterm>
 
508
<indexterm><primary>LDAP</primary></indexterm>
 
509
<indexterm><primary>ldapsam</primary></indexterm>
 
510
<indexterm><primary>domain groups</primary></indexterm>
 
511
<indexterm><primary>RID</primary></indexterm>
 
512
        It is the administrator's responsibility to create the essential domain groups and to assign each
 
513
        its default RID.
 
514
        </para></note>
 
515
 
 
516
        <para>
 
517
<indexterm><primary>domain groups</primary></indexterm>
 
518
<indexterm><primary>RID</primary></indexterm>
 
519
        It is permissible to create any domain group that may be necessary; just make certain that the essential
 
520
        domain groups (well known) have been created and assigned their default RIDs. Other groups you create may
 
521
        be assigned any arbitrary RID you care to use.
 
522
        </para>
 
523
 
 
524
        <para>
 
525
        Be sure to map each domain group to a UNIX system group. That is the only way to ensure that the group
 
526
        will be available for use as an NT domain group.
 
527
        </para>
 
528
 
 
529
        <para>
 
530
        <table frame="all" id="WKURIDS">
 
531
        <title>Well-Known User Default RIDs</title>
 
532
                <tgroup cols="4" align="left">
 
533
                        <colspec align="left"/>
 
534
                        <colspec align="left"/>
 
535
                        <colspec align="left"/>
 
536
                        <colspec align="center"/>
 
537
                        <thead>
 
538
                                <row>
 
539
                                        <entry>Well-Known Entity</entry>
 
540
                                        <entry>RID</entry>
 
541
                                        <entry>Type</entry>
 
542
                                        <entry>Essential</entry>
 
543
                                </row>
 
544
                        </thead>
 
545
                        <tbody>
 
546
                                <row>
 
547
                                        <entry>Domain Administrator</entry>
 
548
                                        <entry>500</entry>
 
549
                                        <entry>User</entry>
 
550
                                        <entry>No</entry>
 
551
                                </row>
 
552
                                <row>
 
553
                                        <entry>Domain Guest</entry>
 
554
                                        <entry>501</entry>
 
555
                                        <entry>User</entry>
 
556
                                        <entry>No</entry>
 
557
                                </row>
 
558
                                <row>
 
559
                                        <entry>Domain KRBTGT</entry>
 
560
                                        <entry>502</entry>
 
561
                                        <entry>User</entry>
 
562
                                        <entry>No</entry>
 
563
                                </row>
 
564
                                <row>
 
565
                                        <entry>Domain Admins</entry>
 
566
                                        <entry>512</entry>
 
567
                                        <entry>Group</entry>
 
568
                                        <entry>Yes</entry>
 
569
                                </row>
 
570
                                <row>
 
571
                                        <entry>Domain Users</entry>
 
572
                                        <entry>513</entry>
 
573
                                        <entry>Group</entry>
 
574
                                        <entry>Yes</entry>
 
575
                                </row>
 
576
                                <row>
 
577
                                        <entry>Domain Guests</entry>
 
578
                                        <entry>514</entry>
 
579
                                        <entry>Group</entry>
 
580
                                        <entry>Yes</entry>
 
581
                                </row>
 
582
                                <row>
 
583
                                        <entry>Domain Computers</entry>
 
584
                                        <entry>515</entry>
 
585
                                        <entry>Group</entry>
 
586
                                        <entry>No</entry>
 
587
                                </row>
 
588
                                <row>
 
589
                                        <entry>Domain Controllers</entry>
 
590
                                        <entry>516</entry>
 
591
                                        <entry>Group</entry>
 
592
                                        <entry>No</entry>
 
593
                                </row>
 
594
                                <row>
 
595
                                        <entry>Domain Certificate Admins</entry>
 
596
                                        <entry>517</entry>
 
597
                                        <entry>Group</entry>
 
598
                                        <entry>No</entry>
 
599
                                </row>
 
600
                                <row>
 
601
                                        <entry>Domain Schema Admins</entry>
 
602
                                        <entry>518</entry>
 
603
                                        <entry>Group</entry>
 
604
                                        <entry>No</entry>
 
605
                                </row>
 
606
                                <row>
 
607
                                        <entry>Domain Enterprise Admins</entry>
 
608
                                        <entry>519</entry>
 
609
                                        <entry>Group</entry>
 
610
                                        <entry>No</entry>
 
611
                                </row>
 
612
                                <row>
 
613
                                        <entry>Domain Policy Admins</entry>
 
614
                                        <entry>520</entry>
 
615
                                        <entry>Group</entry>
 
616
                                        <entry>No</entry>
 
617
                                </row>
 
618
                                <row>
 
619
                                        <entry>Builtin Admins</entry>
 
620
                                        <entry>544</entry>
 
621
                                        <entry>Alias</entry>
 
622
                                        <entry>No</entry>
 
623
                                </row>
 
624
                                <row>
 
625
                                        <entry>Builtin users</entry>
 
626
                                        <entry>545</entry>
 
627
                                        <entry>Alias</entry>
 
628
                                        <entry>No</entry>
 
629
                                </row>
 
630
                                <row>
 
631
                                        <entry>Builtin Guests</entry>
 
632
                                        <entry>546</entry>
 
633
                                        <entry>Alias</entry>
 
634
                                        <entry>No</entry>
 
635
                                </row>
 
636
                                <row>
 
637
                                        <entry>Builtin Power Users</entry>
 
638
                                        <entry>547</entry>
 
639
                                        <entry>Alias</entry>
 
640
                                        <entry>No</entry>
 
641
                                </row>
 
642
                                <row>
 
643
                                        <entry>Builtin Account Operators</entry>
 
644
                                        <entry>548</entry>
 
645
                                        <entry>Alias</entry>
 
646
                                        <entry>No</entry>
 
647
                                </row>
 
648
                                <row>
 
649
                                        <entry>Builtin System Operators</entry>
 
650
                                        <entry>549</entry>
 
651
                                        <entry>Alias</entry>
 
652
                                        <entry>No</entry>
 
653
                                </row>
 
654
                                <row>
 
655
                                        <entry>Builtin Print Operators</entry>
 
656
                                        <entry>550</entry>
 
657
                                        <entry>Alias</entry>
 
658
                                        <entry>No</entry>
 
659
                                </row>
 
660
                                <row>
 
661
                                        <entry>Builtin Backup Operators</entry>
 
662
                                        <entry>551</entry>
 
663
                                        <entry>Alias</entry>
 
664
                                        <entry>No</entry>
 
665
                                </row>
 
666
                                <row>
 
667
                                        <entry>Builtin Replicator</entry>
 
668
                                        <entry>552</entry>
 
669
                                        <entry>Alias</entry>
 
670
                                        <entry>No</entry>
 
671
                                </row>
 
672
                                <row>
 
673
                                        <entry>Builtin RAS Servers</entry>
 
674
                                        <entry>553</entry>
 
675
                                        <entry>Alias</entry>
 
676
                                        <entry>No</entry>
 
677
                                </row>
 
678
                        </tbody>
 
679
                </tgroup>
 
680
        </table>
 
681
        </para>
 
682
 
 
683
        </sect2>
 
684
 
 
685
        <sect2>
 
686
        <title>Example Configuration</title>
 
687
 
 
688
                <para>
 
689
<indexterm><primary>net</primary><secondary>groupmap</secondary><tertiary>list</tertiary></indexterm>
 
690
                You can list the various groups in the mapping database by executing
 
691
                <command>net groupmap list</command>. Here is an example:
 
692
                </para>
 
693
 
 
694
                <para>
 
695
<indexterm><primary>net</primary><secondary>groupmap</secondary></indexterm>
 
696
<screen>
 
697
&rootprompt; <userinput>net groupmap list</userinput>
 
698
Domain Admins (S-1-5-21-2547222302-1596225915-2414751004-512) -> domadmin
 
699
Domain Users (S-1-5-21-2547222302-1596225915-2414751004-513) -> domuser
 
700
Domain Guests (S-1-5-21-2547222302-1596225915-2414751004-514) -> domguest
 
701
</screen>
 
702
                </para>
 
703
 
 
704
                <para>
 
705
                For complete details on <command>net groupmap</command>, refer to the net(8) man page.
 
706
                </para>
 
707
 
 
708
        </sect2>
 
709
 
 
710
</sect1>
 
711
 
 
712
<sect1>
 
713
<title>Configuration Scripts</title>
 
714
 
 
715
        <para>
 
716
        Everyone needs tools. Some of us like to create our own, others prefer to use canned tools
 
717
        (i.e., prepared by someone else for general use). 
 
718
        </para>
 
719
 
 
720
        <sect2>
 
721
        <title>Sample &smb.conf; Add Group Script</title>
 
722
 
 
723
                <para>
 
724
                <indexterm><primary>smbgrpadd.sh</primary></indexterm>
 
725
                <indexterm><primary>groupadd limitations</primary></indexterm>
 
726
                <indexterm><primary>smbgrpadd.sh</primary></indexterm>
 
727
<indexterm><primary>/etc/group</primary></indexterm>
 
728
<indexterm><primary>groupadd</primary></indexterm>
 
729
                A script to create complying group names for use by the Samba group interfaces
 
730
                is provided in <link linkend="smbgrpadd.sh">smbgrpadd.sh</link>. This script
 
731
                adds a temporary entry in the <filename>/etc/group</filename> file and then renames
 
732
                it to the desired name. This is an example of a method to get around operating
 
733
                system maintenance tool limitations such as those present in some version of the
 
734
                <command>groupadd</command> tool.
 
735
<example id="smbgrpadd.sh">
 
736
<title>smbgrpadd.sh</title>
 
737
<programlisting>
 
738
#!/bin/bash
 
739
 
 
740
# Add the group using normal system groupadd tool.
 
741
groupadd smbtmpgrp00
 
742
 
 
743
thegid=`cat /etc/group | grep ^smbtmpgrp00 | cut -d ":" -f3`
 
744
 
 
745
# Now change the name to what we want for the MS Windows networking end
 
746
cp /etc/group /etc/group.bak
 
747
cat /etc/group.bak | sed "s/^smbtmpgrp00/$1/g" > /etc/group
 
748
rm /etc/group.bak
 
749
 
 
750
# Now return the GID as would normally happen.
 
751
echo $thegid
 
752
exit 0
 
753
</programlisting>
 
754
</example>
 
755
</para>
 
756
 
 
757
                <para>
 
758
                The &smb.conf; entry for the above script shown in <link linkend="smbgrpadd">the configuration of
 
759
                &smb.conf; for the add group Script</link> demonstrates how it may be used.
 
760
 
 
761
<example id="smbgrpadd">
 
762
<title>Configuration of &smb.conf; for the add group Script</title>
 
763
<smbconfblock>
 
764
<smbconfsection name="[global]"/>
 
765
<smbconfoption name="add group script">/path_to_tool/smbgrpadd.sh &quot;%g&quot;</smbconfoption>
 
766
</smbconfblock>
 
767
</example>
 
768
                </para>
 
769
 
 
770
        </sect2>
 
771
        
 
772
        <sect2>
 
773
        <title>Script to Configure Group Mapping</title>
 
774
 
 
775
        <para>
 
776
<indexterm><primary>initGroups.sh</primary></indexterm>
 
777
        In our example we have created a UNIX/Linux group called <literal>ntadmin</literal>.
 
778
        Our script will create the additional groups <literal>Orks</literal>, <literal>Elves</literal>, and <literal>Gnomes</literal>.
 
779
        It is a good idea to save this shell script for later use just in case you ever need to rebuild your mapping database.
 
780
        For the sake of convenience we elect to save this script as a file called <filename>initGroups.sh</filename>.
 
781
        This script is given in <link linkend="set-group-map">intGroups.sh</link>.
 
782
<indexterm><primary>initGroups.sh</primary></indexterm>
 
783
<example id="set-group-map">
 
784
<title>Script to Set Group Mapping</title>
 
785
<programlisting>
 
786
#!/bin/bash
 
787
 
 
788
net groupmap add ntgroup="Domain Admins" unixgroup=ntadmin rid=512 type=d
 
789
net groupmap add ntgroup="Domain Users" unixgroup=users rid=513 type=d
 
790
net groupmap add ntgroup="Domain Guests" unixgroup=nobody rid=514 type=d
 
791
 
 
792
groupadd Orks
 
793
groupadd Elves
 
794
groupadd Gnomes
 
795
 
 
796
net groupmap add ntgroup="Orks"   unixgroup=Orks   type=d
 
797
net groupmap add ntgroup="Elves"  unixgroup=Elves  type=d
 
798
net groupmap add ntgroup="Gnomes" unixgroup=Gnomes type=d
 
799
</programlisting>
 
800
</example>
 
801
        </para>
 
802
 
 
803
        <para>
 
804
        Of course it is expected that the administrator will modify this to suit local needs.
 
805
        For information regarding the use of the <command>net groupmap</command> tool please
 
806
        refer to the man page.
 
807
        </para>
 
808
 
 
809
        <note><para>
 
810
        Versions of Samba-3 prior to 3.0.23 automatically create default group mapping for the
 
811
        <literal>Domain Admins, Domain Users</literal> and <literal>Domain Guests</literal> Windows
 
812
        groups, but do not map them to UNIX GIDs. This was a cause of administrative confusion and 
 
813
        trouble. Commencing with Samba-3.0.23 this annomaly has been fixed - thus all Windows groups
 
814
        must now be manually and explicitly created and mapped to a valid UNIX GID by the Samba 
 
815
        administrator.
 
816
        </para></note>
 
817
 
 
818
        </sect2>
 
819
 
 
820
</sect1>
 
821
 
 
822
<sect1>
 
823
<title>Common Errors</title>
 
824
 
 
825
<para>
 
826
At this time there are many little surprises for the unwary administrator. In a real sense
 
827
it is imperative that every step of automated control scripts be carefully tested
 
828
manually before putting it into active service.
 
829
</para>
 
830
 
 
831
        <sect2>
 
832
        <title>Adding Groups Fails</title>
 
833
 
 
834
                <para>
 
835
<indexterm><primary>groupadd</primary></indexterm>
 
836
                This is a common problem when the <command>groupadd</command> is called directly
 
837
                by the Samba interface script for the <smbconfoption name="add group script"/> in
 
838
                the &smb.conf; file.
 
839
                </para>
 
840
 
 
841
                <para>
 
842
<indexterm><primary>uppercase character</primary></indexterm>
 
843
<indexterm><primary>space character</primary></indexterm>
 
844
                The most common cause of failure is an attempt to add an MS Windows group account
 
845
                that has an uppercase character and/or a space character in it.
 
846
                </para>
 
847
 
 
848
                <para>
 
849
<indexterm><primary>groupadd</primary></indexterm>
 
850
                There are three possible workarounds. First, use only group names that comply
 
851
                with the limitations of the UNIX/Linux <command>groupadd</command> system tool.
 
852
                Second, it involves the use of the script mentioned earlier in this chapter, and
 
853
                third is the option is to manually create a UNIX/Linux group account that can substitute
 
854
                for the MS Windows group name, then use the procedure listed above to map that group
 
855
                to the MS Windows group.
 
856
                </para>
 
857
 
 
858
        </sect2>
 
859
 
 
860
        <sect2>
 
861
        <title>Adding Domain Users to the Workstation Power Users Group</title>
 
862
 
 
863
                <para><quote>
 
864
                What must I do to add domain users to the Power Users group?
 
865
                </quote></para>
 
866
 
 
867
                <para>
 
868
<indexterm><primary>Domain Users group</primary></indexterm>
 
869
                The Power Users group is a group that is local to each Windows 200x/XP Professional workstation.
 
870
                You cannot add the Domain Users group to the Power Users group automatically, it must be done on
 
871
                each workstation by logging in as the local workstation <emphasis>administrator</emphasis> and
 
872
                then using the following procedure:
 
873
                </para>
 
874
 
 
875
                <procedure>
 
876
                        <step><para>
 
877
                        Click <guimenu>Start -> Control Panel -> Users and Passwords</guimenu>.
 
878
                        </para></step>
 
879
 
 
880
                        <step><para>
 
881
                        Click the <guimenuitem>Advanced</guimenuitem> tab.
 
882
                        </para></step>
 
883
 
 
884
                        <step><para>
 
885
                        Click the <guibutton>Advanced</guibutton> button.
 
886
                        </para></step>
 
887
 
 
888
                        <step><para>
 
889
                        Click <constant>Groups</constant>.
 
890
                        </para></step>
 
891
 
 
892
                        <step><para>
 
893
                        Double-click <constant>Power Users</constant>. This will launch the panel to add users or groups
 
894
                        to the local machine <constant>Power Users</constant> group.
 
895
                        </para></step>
 
896
 
 
897
                        <step><para>
 
898
                        Click the <guibutton>Add</guibutton> button.
 
899
                        </para></step>
 
900
 
 
901
                        <step><para>
 
902
                        Select the domain from which the <constant>Domain Users</constant> group is to be added.
 
903
                        </para></step>
 
904
 
 
905
                        <step><para>
 
906
                        Double-click the <constant>Domain Users</constant> group.
 
907
                        </para></step>
 
908
 
 
909
                        <step><para>
 
910
                        Click the <guibutton>OK</guibutton> button. If a logon box is presented during this process, 
 
911
                        please remember to enter the connect as <constant>DOMAIN\UserName</constant>, that is, for the
 
912
                        domain <constant>MIDEARTH</constant> and the user <constant>root</constant> enter
 
913
                        <constant>MIDEARTH\root</constant>.
 
914
                        </para></step>
 
915
                </procedure>
 
916
        </sect2>
 
917
 
 
918
</sect1>
 
919
 
 
920
</chapter>