S3-ByExample: Use 'winbindd -D' instead of 'winbindd -B'.
[samba.git] / docs-xml / Samba3-ByExample / SBE-DomainAppsSupport.xml
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
4 <chapter id="DomApps">
5 <title>Integrating Additional Services</title>
6
7         <para>
8         <indexterm><primary>authentication</primary></indexterm>
9         <indexterm><primary>backends</primary></indexterm>
10         <indexterm><primary>smbpasswd</primary></indexterm>
11         <indexterm><primary>ldapsam</primary></indexterm>
12         <indexterm><primary>Active Directory</primary></indexterm>
13         You've come a long way now. You have pretty much mastered Samba-3 for 
14         most uses it can be put to. Up until now, you have cast Samba-3 in the leading 
15         role, and where authentication was required, you have used one or another of 
16         Samba's many authentication backends (from flat text files with smbpasswd 
17         to LDAP directory integration with ldapsam). Now you can design a 
18         solution for a new Abmas business. This business is running Windows Server 
19         2003 and Active Directory, and these are to stay. It's time to master 
20         implementing Samba and Samba-supported services in a domain controlled by 
21         the latest Windows authentication technologies. Let's get started &smbmdash; this is 
22         leading edge.
23         </para>
24
25 <sect1>
26         <title>Introduction</title>
27
28         <para>
29         Abmas has continued its miraculous growth; indeed, nothing seems to be able 
30         to stop its diversification into multiple (and seemingly unrelated) fields. 
31         Its latest acquisition is Abmas Snack Foods, a big player in the snack-food 
32         business.
33         </para>
34
35         <para>
36         With this acquisition comes new challenges for you and your team. Abmas Snack 
37         Foods is a well-developed business with a huge and heterogeneous network. It 
38         already has Windows, NetWare, and Proprietary UNIX, but as yet no Samba or Linux. 
39         The network is mature and well-established, and there is no question of its chosen 
40         user authentication scheme being changed for now. You need to take a wise new 
41         approach.
42         </para>
43
44         <para>
45         You have decided to set the ball rolling by introducing Samba-3 into the network 
46         gradually, taking over key services and easing the way to a full migration and, 
47         therefore, integration into Abmas's existing business later.
48         </para>
49
50         <sect2>
51         <title>Assignment Tasks</title>
52
53                 <para>
54                 <indexterm><primary>web</primary><secondary>proxying</secondary></indexterm>
55                 <indexterm><primary>web</primary><secondary>caching</secondary></indexterm>
56                 You've promised the skeptical Abmas Snack Foods management team 
57                 that you can show them how Samba can ease itself and other Open Source 
58                 technologies into their existing infrastructure and deliver sound business 
59                 advantages. Cost cutting is high on their agenda (a major promise of the 
60                 acquisition). You have chosen Web proxying and caching as your proving ground.
61                 </para>
62
63                 <para>
64                 <indexterm><primary>bandwidth</primary></indexterm>
65                 <indexterm><primary>Microsoft ISA</primary></indexterm>
66                 Abmas Snack Foods has several thousand users housed at its head office 
67                 and multiple regional offices, plants, and warehouses. A high proportion of 
68                 the business's work is done online, so Internet access for most of these 
69                 users is essential. All Internet access, including for all regional offices, 
70                 is funneled through the head office and is the job of the (now your) networking 
71                 team. The bandwidth requirements were horrific (comparable to a small ISP), and 
72                 the team soon discovered proxying and caching. In fact, they became one of 
73                 the earliest commercial users of Microsoft ISA.
74                 </para>
75
76                 <para>
77                 <indexterm><primary>Active Directory</primary></indexterm>
78                 <indexterm><primary>authenticated</primary></indexterm>
79                 <indexterm><primary>proxy</primary></indexterm>
80                 The team is not happy with ISA. Because it never lived up to its marketing promises, 
81                 it underperformed and had reliability problems. You have pounced on the opportunity 
82                 to show what Open Source can do. The one thing they do like, however, is ISA's 
83                 integration with Active Directory. They like that their users, once logged on, 
84                 are automatically authenticated against the proxy. If your alternative to ISA 
85                 can operate completely seamlessly in their Active Directory domain, it will be
86                 approved.
87                 </para>
88
89                 <para>
90                 This is a hands-on exercise. You build software applications so
91                 that you obtain the functionality Abmas needs.
92                 </para>
93
94         </sect2>
95 </sect1>
96
97 <sect1>
98 <title>Dissection and Discussion</title>
99
100         <para>
101         The key requirements in this business example are straightforward. You are not required 
102         to do anything new, just to replicate an existing system, not lose any existing features, 
103         and improve performance. The key points are:
104         </para>
105
106         <itemizedlist>
107                 <listitem><para>
108                 Internet access for most employees
109                 </para></listitem>
110                 <listitem><para>
111                 Distributed system to accommodate load and geographical distribution of users
112                 </para></listitem>
113                 <listitem><para>
114                 Seamless and transparent interoperability with the existing Active Directory domain
115                 </para></listitem>
116         </itemizedlist>
117
118
119         <sect2>
120                 <title>Technical Issues</title>
121
122                 <para>
123                 <indexterm><primary>browsing</primary></indexterm>
124                 <indexterm><primary>Squid proxy</primary></indexterm>
125                 <indexterm><primary>proxy</primary></indexterm>
126                 <indexterm><primary>authentication</primary></indexterm>
127                 <indexterm><primary>Internet Explorer</primary></indexterm>
128                 <indexterm><primary>winbind</primary></indexterm>
129                 <indexterm><primary>NTLM</primary></indexterm>
130                 <indexterm><primary>NTLM authentication daemon</primary></indexterm>
131                 <indexterm><primary>authentication</primary></indexterm>
132                 <indexterm><primary>daemon</primary></indexterm>
133                 <indexterm><primary>Active Directory</primary></indexterm>
134                 <indexterm><primary>domain</primary><secondary>Active Directory</secondary></indexterm>
135                 <indexterm><primary>Kerberos</primary></indexterm><indexterm><primary>token</primary></indexterm>
136                 Functionally, the user's Internet Explorer requests a browsing session with the 
137                 Squid proxy, for which it offers its AD authentication token. Squid hands off 
138                 the authentication request to the Samba-3 authentication helper application
139                 called <command>ntlm_auth</command>. This helper is a hook into winbind, the 
140                 Samba-3 NTLM authentication daemon. Winbind enables UNIX services to authenticate 
141                 against Microsoft Windows domains, including Active Directory domains. As Active 
142                 Directory authentication is a modified Kerberos authentication, winbind is assisted 
143                 in this by local Kerberos 5 libraries configured to check passwords with the Active 
144                 Directory server. Once the token has been checked, a browsing session is established. 
145                 This process is entirely transparent and seamless to the user.
146                 </para>
147
148                 <para>
149                 Enabling this consists of:
150                 </para>
151
152                 <itemizedlist>
153                         <listitem><para>
154                         Preparing the necessary environment using preconfigured packages
155                         </para></listitem>
156
157                         <listitem><para>
158                         Setting up raw Kerberos authentication against the Active Directory domain
159                         </para></listitem>
160
161                         <listitem><para>
162                         Configuring, compiling, and then installing the supporting Samba-3 components
163                         </para></listitem>
164
165                         <listitem><para>
166                         Tying it all together
167                         </para></listitem>
168                 </itemizedlist>
169
170         </sect2>
171
172
173         <sect2>
174                 <title>Political Issues</title>
175
176                 <para>
177                 You are a stranger in a strange land, and all eyes are upon you. Some would even like to see 
178                 you fail. For you to gain the trust of your newly acquired IT people, it is essential that your 
179                 solution does everything the old one did, but does it better in every way. Only then 
180                 will the entrenched positions consider taking up your new way of doing things on a 
181                 wider scale.
182                 </para>
183
184         </sect2>
185
186 </sect1>
187
188 <sect1>
189         <title>Implementation</title>
190
191         <para>
192         <indexterm><primary>Squid</primary></indexterm>
193         First, your system needs to be prepared and in a known good state to proceed. This consists 
194         of making sure that everything the system depends on is present and that everything that could 
195         interfere or conflict with the system is removed. You will be configuring the Squid and Samba-3 
196         packages and updating them if necessary. If conflicting packages of these programs are installed, 
197         they must be removed.
198         </para>
199
200         <para>
201         <indexterm><primary>Red Hat Linux</primary></indexterm>
202         The following packages should be available on your Red Hat Linux system:
203         </para>
204
205         <itemizedlist>
206                 <listitem><para>
207                 <indexterm><primary>krb5</primary></indexterm>
208                 <indexterm><primary>Kerberos</primary></indexterm>
209                 krb5-libs
210                 </para></listitem>
211
212                 <listitem><para>
213                 krb5-devel
214                 </para></listitem>
215
216                 <listitem><para>
217                 krb5-workstation
218                 </para></listitem>
219
220                 <listitem><para>
221                 krb5-server
222                 </para></listitem>
223
224                 <listitem><para>
225                 pam_krb5
226                 </para></listitem>
227         </itemizedlist>
228
229         <para>
230         <indexterm><primary>SUSE Linux</primary></indexterm>
231         In the case of SUSE Linux, these packages are called:
232         </para>
233
234         <itemizedlist>
235                 <listitem><para>
236                 heimdal-lib
237                 </para></listitem>
238
239                 <listitem><para>
240                 heimdal-devel
241                 </para></listitem>
242
243                 <listitem><para>
244                 <indexterm><primary>Heimdal</primary></indexterm>
245                 heimdal
246                 </para></listitem>
247
248                 <listitem><para>
249                 pam_krb5
250                 </para></listitem>
251         </itemizedlist>
252
253         <para>
254         If the required packages are not present on your system, you must install
255         them from the vendor's installation media. Follow the administrative guide
256         for your Linux system to ensure that the packages are correctly updated.
257         </para>
258
259         <note><para>
260         <indexterm><primary>MS Windows Server 2003</primary></indexterm>
261         <indexterm><primary>Kerberos</primary></indexterm>
262         <indexterm><primary>MIT</primary></indexterm>
263         If the requirement is for interoperation with MS Windows Server 2003, it
264         will be necessary to ensure that you are using MIT Kerberos version 1.3.1
265         or later. Red Hat Linux 9 ships with MIT Kerberos 1.2.7 and thus requires
266         updating.
267         </para>
268
269         <para>
270         <indexterm><primary>Heimdal</primary></indexterm>
271         <indexterm><primary>SUSE Enterprise Linux Server</primary></indexterm>
272         Heimdal 0.6 or later is required in the case of SUSE Linux. SUSE Enterprise
273         Linux Server 8 ships with Heimdal 0.4. SUSE 9 ships with the necessary version.
274         </para></note>
275
276         <sect2 id="ch10-one">
277         <title>Removal of Pre-Existing Conflicting RPMs</title>
278
279         <para>
280         <indexterm><primary>Squid</primary></indexterm>
281         If Samba and/or Squid RPMs are installed, they should be updated. You can 
282         build both from source.
283         </para>
284
285         <para>
286         <indexterm><primary>rpm</primary></indexterm>
287         <indexterm><primary>samba</primary></indexterm>
288         <indexterm><primary>squid</primary></indexterm>
289         Locating the packages to be un-installed can be achieved by running:
290 <screen>
291 &rootprompt; rpm -qa | grep -i samba
292 &rootprompt; rpm -qa | grep -i squid
293 </screen>
294         The identified packages may be removed using:
295 <screen>
296 &rootprompt; rpm -e samba-common
297 </screen>
298         </para>
299
300         <sect2>
301         <title>Kerberos Configuration</title>
302
303         <para>
304         <indexterm><primary>Kerberos</primary></indexterm>
305         <indexterm><primary>Active Directory</primary><secondary>server</secondary></indexterm>
306         <indexterm><primary>ADS</primary></indexterm>
307         <indexterm><primary>KDC</primary></indexterm>
308         The systems Kerberos installation must be configured to communicate with 
309         your primary Active Directory server (ADS KDC).
310         </para>
311
312         <para>
313         Strictly speaking, MIT Kerberos version 1.3.4 currently gives the best results, 
314         although the current default Red Hat MIT version 1.2.7 gives acceptable results 
315         unless you are using Windows 2003 servers.
316         </para>
317
318         <para>
319         <indexterm><primary>MIT</primary></indexterm>
320         <indexterm><primary>Heimdal</primary></indexterm>
321         <indexterm><primary>Kerberos</primary></indexterm>
322         <indexterm><primary>/etc/krb5.conf</primary></indexterm>
323         <indexterm><primary>DNS</primary><secondary>SRV records</secondary></indexterm>
324         <indexterm><primary>KDC</primary></indexterm>
325         <indexterm><primary>DNS</primary><secondary>lookup</secondary></indexterm>
326         Officially, neither MIT (1.3.4) nor Heimdal (0.63) Kerberos needs an <filename>/etc/krb5.conf</filename> 
327         file in order to work correctly. All ADS domains automatically create SRV records in the 
328         DNS zone <constant>Kerberos.REALM.NAME</constant> for each KDC in the realm. Since both 
329         MIT and Heimdal, KRB5 libraries default to checking for these records, so they 
330         automatically find the KDCs. In addition, <filename>krb5.conf</filename> allows 
331         specifying only a single KDC, even if there is more than one. Using the DNS lookup 
332         allows the KRB5 libraries to use whichever KDCs are available.
333         </para>
334
335         <procedure>
336         <title>Kerberos Configuration Steps</title>
337
338                 <step><para>
339                 <indexterm><primary>krb5.conf</primary></indexterm>
340                 If you find the need to manually configure the <filename>krb5.conf</filename>, you should edit it
341                 to have the contents shown in <link linkend="ch10-krb5conf"/>. The final fully qualified path for this file 
342                 should be <filename>/etc/krb5.conf</filename>.
343                 </para></step>
344
345                 <step><para>
346                 <indexterm><primary>Kerberos</primary></indexterm>
347                 <indexterm><primary>realm</primary></indexterm>
348                 <indexterm><primary>case-sensitive</primary></indexterm>
349                 <indexterm><primary>KDC</primary></indexterm>
350                 <indexterm><primary>synchronization</primary></indexterm>
351                 <indexterm><primary>initial credentials</primary></indexterm>
352                 <indexterm><primary>Clock skew</primary></indexterm>
353                 <indexterm><primary>NTP</primary></indexterm>
354                 <indexterm><primary>DNS</primary><secondary>lookup</secondary></indexterm>
355                 <indexterm><primary>reverse DNS</primary></indexterm>
356                 <indexterm><primary>NetBIOS name </primary></indexterm>
357                 <indexterm><primary>/etc/hosts</primary></indexterm>
358                 <indexterm><primary>mapping</primary></indexterm>
359                 The following gotchas often catch people out. Kerberos is case sensitive. Your realm must
360                 be in UPPERCASE, or you will get an error: <quote>Cannot find KDC for requested realm while getting
361                 initial credentials</quote>.  Kerberos is picky about time synchronization. The time
362                 according to your participating servers must be within 5 minutes or you get an error:
363                 <quote>kinit(v5): Clock skew too great while getting initial credentials</quote>.
364                 Clock skew limits are, in fact, configurable in the Kerberos protocols (the default is
365                 5 minutes). A better solution is to implement NTP throughout your server network.
366                 Kerberos needs to be able to do a reverse DNS lookup on the IP address of your KDC.
367                 Also, the name that this reverse lookup maps to must either be the NetBIOS name of
368                 the KDC (i.e., the hostname with no domain attached) or the
369                 NetBIOS name followed by the realm. If all else fails, you can add a
370                 <filename>/etc/hosts</filename> entry mapping the IP address of your KDC to its
371                 NetBIOS name. If Kerberos cannot do this reverse lookup, you will get a local error
372                 when you try to join the realm.
373                 </para></step>
374
375                 <step><para>
376                 <indexterm><primary>kinit</primary></indexterm>
377                 You are now ready to test your installation by issuing the command:
378 <screen>
379 &rootprompt; kinit [USERNAME@REALM]
380 </screen> 
381                 You are asked for your password, which you should enter. The following
382                 is a typical console sequence:
383 <screen>
384 &rootprompt; kinit ADMINISTRATOR@LONDON.ABMAS.BIZ
385 Password for ADMINISTRATOR@LONDON.ABMAS.BIZ: 
386 </screen>
387                 Make sure that your password is accepted by the Active Directory KDC.
388                 </para></step>
389         </procedure>
390
391 <example id="ch10-krb5conf">
392 <title>Kerberos Configuration &smbmdash; File: <filename>/etc/krb5.conf</filename></title>
393 <screen>
394 [libdefaults]
395         default_realm = LONDON.ABMAS.BIZ
396
397 [realms] 
398         LONDON.ABMAS.BIZ = {
399         kdc = w2k3s.london.abmas.biz
400         }
401 </screen>
402 </example>
403
404         <para><indexterm>
405             <primary>klist</primary>
406           </indexterm>
407         The command
408 <screen>
409 &rootprompt; klist -e 
410 </screen>
411         shows the Kerberos tickets cached by the system.
412         </para>
413
414         <sect3>
415         <title>Samba Configuration</title>
416
417         <para>
418         <indexterm><primary>Active Directory</primary></indexterm>
419         Samba must be configured to correctly use Active Directory. Samba-3 must be used, since it 
420         has the necessary components to interface with Active Directory.
421         </para>
422
423         <procedure>
424         <title>Securing Samba-3 With ADS Support Steps</title>
425
426                 <step><para>
427                 <indexterm><primary>Red Hat Linux</primary></indexterm>
428                 <indexterm><primary>Samba Tea</primary></indexterm>
429                 <indexterm><primary>Red Hat Fedora Linux</primary></indexterm>
430                 <indexterm><primary>MIT KRB5</primary></indexterm>
431                 <indexterm><primary>ntlm_auth</primary></indexterm>
432                 Download the latest stable Samba-3 for Red Hat Linux from the official Samba Team
433                 <ulink url="http://ftp.samba.org">FTP site.</ulink> The official Samba Team
434                 RPMs for Red Hat Fedora Linux contain the <command>ntlm_auth</command> tool
435                 needed, and are linked against MIT KRB5 version 1.3.1 and therefore are ready for use.
436                 </para>
437
438                 <para>
439                 <indexterm><primary>SerNet</primary></indexterm>
440                 <indexterm><primary>RPMs</primary></indexterm>
441                 The necessary, validated RPM packages for SUSE Linux may be obtained from
442                 the <ulink url="ftp://ftp.sernet.de/pub/samba">SerNet</ulink> FTP site that
443                 is located in Germany. All SerNet RPMs are validated, have the necessary
444                 <command>ntlm_auth</command> tool, and are statically linked 
445                 against suitably patched Heimdal 0.6 libraries.
446                 </para></step>
447
448                 <step><para>
449                 Using your favorite editor, change the <filename>/etc/samba/smb.conf</filename>
450                 file so it has contents similar to the example shown in <link linkend="ch10-smbconf"/>.
451                 </para></step>
452
453                 <step><para>
454                 <indexterm><primary>computer account</primary></indexterm>
455                 <indexterm><primary>Active Directory</primary></indexterm>
456                 <indexterm><primary>net</primary><secondary>ads</secondary><tertiary>join</tertiary></indexterm>i
457                 <indexterm><primary>Kerberos ticket</primary></indexterm>
458                 <indexterm><primary>ticket</primary></indexterm>
459                 Next you need to create a computer account in the Active Directory. 
460                 This sets up the trust relationship needed for other clients to 
461                 authenticate to the Samba server with an Active Directory Kerberos ticket. 
462                 This is done with the <quote>net ads join -U [Administrator%Password]</quote>
463                 command, as follows:
464 <screen>
465 &rootprompt; net ads join -U administrator%vulcon
466 </screen>
467                 </para></step>
468
469                 <step><para>
470                 <indexterm><primary>smbd</primary></indexterm>
471                 <indexterm><primary>nmbd</primary></indexterm>
472                 <indexterm><primary>winbindd</primary></indexterm>
473                 <indexterm><primary>Active Directory</primary></indexterm>
474                 <indexterm><primary>Samba</primary></indexterm>
475                 Your new Samba binaries must be started in the standard manner as is applicable
476                 to the platform you are running on. Alternatively, start your Active Directory-enabled Samba with the following commands:
477 <screen>
478 &rootprompt; smbd -D
479 &rootprompt; nmbd -D
480 &rootprompt; winbindd -D
481 </screen>
482                 </para></step>
483
484                 <step><para>
485                 <indexterm><primary>winbind</primary></indexterm>
486                 <indexterm><primary>Active Directory</primary><secondary>domain</secondary></indexterm>
487                 <indexterm><primary>wbinfo</primary></indexterm>
488                 <indexterm><primary>enumerating</primary></indexterm>
489                 <indexterm><primary>Active Directory</primary><secondary>tree</secondary></indexterm>
490                 We now need to test that Samba is communicating with the Active 
491                 Directory domain; most specifically, we want to see whether winbind 
492                 is enumerating users and groups. Issue the following commands:
493 <screen>
494 &rootprompt; wbinfo -t
495 checking the trust secret via RPC calls succeeded
496 </screen>
497                 This tests whether we are authenticating against Active Directory:
498 <screen>
499 &rootprompt; wbinfo -u
500 LONDON+Administrator
501 LONDON+Guest
502 LONDON+SUPPORT_388945a0
503 LONDON+krbtgt
504 LONDON+jht
505 LONDON+xjht
506 </screen>
507                 This enumerates all the users in your Active Directory tree:
508 <screen>
509 &rootprompt; wbinfo -g
510 LONDON+Domain Computers
511 LONDON+Domain Controllers
512 LONDON+Schema Admins
513 LONDON+Enterprise Admins
514 LONDON+Domain Admins
515 LONDON+Domain Users
516 LONDON+Domain Guests
517 LONDON+Group Policy Creator Owners
518 LONDON+DnsUpdateProxy
519 </screen>
520                 This enumerates all the groups in your Active Directory tree.
521                 </para></step>
522
523                 <step><para>
524                 <indexterm><primary>Squid</primary></indexterm>
525                 <indexterm><primary>ntlm_auth</primary></indexterm>
526                 Squid uses the <command>ntlm_auth</command> helper build with Samba-3.
527                 You may test <command>ntlm_auth</command> with the command:
528 <screen>
529 &rootprompt; /usr/bin/ntlm_auth --username=jht
530 password: XXXXXXXX
531 </screen>
532                 You are asked for your password, which you should enter. You are rewarded with:
533 <screen>
534 &rootprompt; NT_STATUS_OK: Success (0x0)
535 </screen>
536                 </para></step>
537
538                 <step><para>
539                 <indexterm><primary>ntlm_auth</primary></indexterm>
540                 <indexterm><primary>authenticate</primary></indexterm>
541                 <indexterm><primary>winbind</primary></indexterm>
542                 <indexterm><primary>privileged pipe</primary></indexterm>
543                 <indexterm><primary>squid</primary></indexterm>
544                 <indexterm><primary>chgrp</primary></indexterm>
545                 <indexterm><primary>chmod</primary></indexterm>
546                 <indexterm><primary>failure</primary></indexterm>
547                 The <command>ntlm_auth</command> helper, when run from a command line as the user 
548                 <quote>root</quote>, authenticates against your Active Directory domain (with 
549                 the aid of winbind). It manages this by reading from the winbind privileged pipe. 
550                 Squid is running with the permissions of user <quote>squid</quote> and group 
551                 <quote>squid</quote> and is not able to do this unless we make a vital change. 
552                 Squid cannot read from the winbind privilege pipe unless you change the 
553                 permissions of its directory. This is the single biggest cause of failure in the 
554                 whole process. Remember to issue the following command (for Red Hat Linux):
555 <screen>
556 &rootprompt; chgrp squid /var/cache/samba/winbindd_privileged
557 &rootprompt; chmod 750 /var/cache/samba/winbindd_privileged
558 </screen>
559                 For SUSE Linux 9, execute the following:
560 <screen>
561 &rootprompt; chgrp squid /var/lib/samba/winbindd_privileged
562 &rootprompt; chmod 750 /var/lib/samba/winbindd_privileged
563 </screen>
564                 </para></step>
565
566         </procedure>
567         </sect3>
568
569         <sect3>
570         <title>NSS Configuration</title>
571
572         <para>
573         <indexterm><primary>NSS</primary></indexterm>
574         <indexterm><primary>winbind</primary></indexterm>
575         <indexterm><primary>authentication</primary></indexterm>
576         For Squid to benefit from Samba-3, NSS must be updated to allow winbind as a valid route to user authentication.
577         </para>
578
579         <para>
580         Edit your <filename>/etc/nsswitch.conf</filename> file so it has the parameters shown
581         in <link linkend="ch10-etcnsscfg"/>.
582         </para>
583
584 <example id="ch10-smbconf">
585 <title>Samba Configuration &smbmdash; File: <filename>/etc/samba/smb.conf</filename></title>
586 <smbconfblock>
587 <smbconfsection name="[global]"/>
588 <smbconfoption name="workgroup">LONDON</smbconfoption>
589 <smbconfoption name="netbios name">W2K3S</smbconfoption>
590 <smbconfoption name="realm">LONDON.ABMAS.BIZ</smbconfoption>
591 <smbconfoption name="security">ads</smbconfoption>
592 <smbconfoption name="encrypt passwords">yes</smbconfoption>
593 <smbconfoption name="password server">w2k3s.london.abmas.biz</smbconfoption>
594
595 <smbconfcomment>separate domain and username with '/', like DOMAIN/username</smbconfcomment>
596 <smbconfoption name="winbind separator">/</smbconfoption>
597
598 <smbconfcomment>use UIDs from 10000 to 20000 for domain users</smbconfcomment>
599 <smbconfoption name="idmap uid">10000-20000</smbconfoption>
600 <smbconfcomment>use GIDs from 10000 to 20000 for domain groups</smbconfcomment>
601 <smbconfoption name="idmap gid">10000-20000</smbconfoption>
602
603 <smbconfcomment>allow enumeration of winbind users and groups</smbconfcomment>
604 <smbconfoption name="winbind enum users">yes</smbconfoption>
605 <smbconfoption name="winbind enum groups">yes</smbconfoption>
606 <smbconfoption name="winbind user default domain">yes</smbconfoption>
607 </smbconfblock>
608 </example>
609
610 <example id="ch10-etcnsscfg">
611 <title>NSS Configuration File Extract &smbmdash; File: <filename>/etc/nsswitch.conf</filename></title>
612 <screen>
613 passwd: files winbind
614 shadow: files
615 group: files winbind
616 </screen>
617 </example>
618
619         </sect3>
620
621         <sect3>
622         <title>Squid Configuration</title>
623
624         <para>
625         <indexterm><primary>Squid</primary></indexterm>
626         <indexterm><primary>Active Directory</primary><secondary>authentication</secondary></indexterm>
627         Squid must be configured correctly to interact with the Samba-3 
628         components that handle Active Directory authentication.
629         </para>
630
631         </sect3>
632
633         </sect2>
634
635         <sect2>
636         <title>Configuration</title></sect2>
637
638         <procedure>
639         <title>Squid Configuration Steps</title>
640
641                 <step><para>
642                 <indexterm><primary>SUSE Linux</primary></indexterm>
643                 <indexterm><primary>Squid</primary> </indexterm>
644                 <indexterm><primary>helper agent</primary></indexterm>
645                 If your Linux distribution is SUSE Linux 9, the version of Squid 
646                 supplied is already enabled to use the winbind helper agent. You
647                 can therefore omit the steps that would build the Squid binary
648                 programs.
649                 </para></step>
650
651                 <step><para>
652                 <indexterm><primary>nobody</primary></indexterm>
653                 <indexterm><primary>squid</primary></indexterm>
654                 <indexterm><primary>rpms</primary></indexterm>
655                 <indexterm><primary>/etc/passwd</primary></indexterm>
656                 <indexterm><primary>/etc/group</primary></indexterm>
657                 Squid, by default, runs as the user <constant>nobody</constant>. You need to 
658                 add a system user <constant>squid</constant> and a system group 
659                 <constant>squid</constant> if they are not set up already (if the default 
660                 Red Hat squid rpms were installed, they will be).  Set up a 
661                 <constant>squid</constant> user in <filename>/etc/passwd</filename> 
662                 and a <constant>squid</constant> group in <filename>/etc/group</filename> if these aren't there already.
663                 </para></step>
664
665                 <step><para>
666                 <indexterm><primary>permissions</primary></indexterm>
667                 <indexterm><primary>chown</primary></indexterm>
668                 You now need to change the permissions on Squid's <constant>var</constant>
669                 directory.  Enter the following command:
670 <screen>
671 &rootprompt; chown -R squid /var/cache/squid
672 </screen>
673                 </para></step>
674
675                 <step><para>
676                 <indexterm><primary>logging</primary></indexterm>
677                 <indexterm><primary>Squid</primary></indexterm>
678                 Squid must also have control over its logging. Enter the following commands:
679 <screen>
680 &rootprompt; chown -R chown squid:squid /var/log/squid
681 &rootprompt; chmod 770 /var/log/squid
682 </screen>
683                 </para></step>
684
685                 <step><para>
686                 Finally, Squid must be able to write to its disk cache!
687                 Enter the following commands:
688 <screen>
689 &rootprompt; chown -R chown squid:squid /var/cache/squid
690 &rootprompt; chmod 770 /var/cache/squid
691 </screen>
692                 </para></step>
693
694                 <step><para>
695                 <indexterm><primary>/etc/squid/squid.conf</primary></indexterm>
696                 The <filename>/etc/squid/squid.conf</filename> file must be edited to include the lines from 
697                 <link linkend="etcsquidcfg"/> and <link linkend="etcsquid2"/>.
698                 </para></step>
699
700                 <step><para>
701                 <indexterm><primary>cache directories</primary></indexterm>
702                 You must create Squid's cache directories before it may be run.  Enter the following command: 
703 <screen>
704 &rootprompt; squid -z
705 </screen>
706                 </para></step>
707
708                 <step><para>
709                 Finally, start Squid and enjoy transparent Active Directory authentication.
710                 Enter the following command:
711 <screen>
712 &rootprompt; squid
713 </screen>
714                 </para></step>
715         </procedure>
716
717 <example id="etcsquidcfg">
718 <title>Squid Configuration File Extract &smbmdash; <filename>/etc/squid.conf</filename> [ADMINISTRATIVE PARAMETERS Section]</title>
719 <screen>
720         cache_effective_user squid
721         cache_effective_group squid
722 </screen>
723 </example>
724
725 <example id="etcsquid2">
726 <title>Squid Configuration File extract &smbmdash; File: <filename>/etc/squid.conf</filename> [AUTHENTICATION PARAMETERS Section]</title>
727 <screen>
728         auth_param ntlm program /usr/bin/ntlm_auth \
729                                 --helper-protocol=squid-2.5-ntlmssp
730         auth_param ntlm children 5
731         auth_param ntlm max_challenge_reuses 0
732         auth_param ntlm max_challenge_lifetime 2 minutes
733         auth_param basic program /usr/bin/ntlm_auth \
734                                 --helper-protocol=squid-2.5-basic
735         auth_param basic children 5
736         auth_param basic realm Squid proxy-caching web server
737         auth_param basic credentialsttl 2 hours
738         acl AuthorizedUsers proxy_auth REQUIRED
739         http_access allow all AuthorizedUsers
740 </screen>
741 </example>
742
743         </sect2>
744
745         <sect2>
746                 <title>Key Points Learned</title>
747
748                 <para>
749                 <indexterm><primary>Web browsers</primary></indexterm>
750                 <indexterm><primary>services</primary></indexterm>
751                 <indexterm><primary>authentication protocols</primary></indexterm>
752                 <indexterm><primary>Web</primary><secondary>proxy</secondary><tertiary>access</tertiary></indexterm>
753                 <indexterm><primary>NTLMSSP</primary></indexterm>
754                 Microsoft Windows networking protocols permeate the spectrum of technologies that Microsoft
755                 Windows clients use, even when accessing traditional services such as Web browsers. Depending 
756                 on whom you discuss this with, this is either good or bad. No matter how you might evaluate this,
757                 the use of NTLMSSP as the authentication protocol for Web proxy access has some advantages over
758                 the cookie-based authentication regime used by all competing browsers. It is Samba's implementation
759                 of NTLMSSP that makes it attractive to implement the solution that has been demonstrated in this chapter.
760                 </para>
761
762         </sect2>
763
764 </sect1>
765
766 <sect1>
767         <title>Questions and Answers</title>
768
769         <para>
770         <indexterm><primary>ntlm_auth</primary></indexterm>
771         <indexterm><primary>SambaXP conference</primary></indexterm>
772         <indexterm><primary>Goettingen</primary></indexterm>
773         <indexterm><primary>Italian</primary></indexterm>
774         The development of the <command>ntlm_auth</command> module was first discussed in many Open Source circles
775         in 2002. At the SambaXP conference in Goettingen, Germany, Mr. Francesco Chemolli demonstrated the use of 
776         <command>ntlm_auth</command> during one of the late developer meetings that took place. Since that time, the 
777         adoption of <command>ntlm_auth</command> has spread considerably.
778         </para>
779
780         <para>
781         The largest report from a site that uses Squid with <command>ntlm_auth</command>-based authentication
782         support uses a dual processor server that has 2 GB of memory. It provides Web and FTP proxy services for 10,000
783         users. Approximately 2,000 of these users make heavy use of the proxy services. According to the source, who
784         wishes to remain anonymous, the sustained transaction load on this server hovers around 140 hits/sec. The following
785         comments were made with respect to questions regarding the performance of this installation:
786         </para>
787
788         <blockquote><para>
789         [In our] EXTREMELY optimized environment . . . [the] performance impact is almost [nothing]. The <quote>almost</quote> 
790         part is due to the brain damage of the ntlm-over-http protocol definition. Suffice to say that its worst-case 
791         scenario triples the number of hits needed to perform the same transactions versus basic or digest auth[entication].
792         </para></blockquote>
793
794         <para>
795         You would be well-advised to recognize that all cache-intensive proxying solutions demand a lot of memory.
796         Make certain that your Squid proxy server is equipped with sufficient memory to permit all proxy operations to run 
797         out of memory without invoking the overheads involved in the use of memory that has to be swapped to disk.
798         </para>
799
800         <qandaset defaultlabel="chap10bqa" type="number">
801         <qandaentry>
802         <question>
803
804                 <para>
805                 What does Samba have to do with Web proxy serving?
806                 </para>
807
808         </question>
809         <answer>
810
811                 <para>
812                 <indexterm><secondary>transparent inter-operability</secondary></indexterm>
813                 <indexterm><primary>Windows clients</primary></indexterm>
814                 <indexterm><primary>network</primary><secondary>services</secondary></indexterm>
815                 <indexterm><primary>authentication</primary></indexterm>
816                 <indexterm><primary>wrapper</primary></indexterm>
817                 To provide transparent interoperability between Windows clients and the network services
818                 that are used from them, Samba had to develop tools and facilities that deliver that feature. The benefit
819                 of Open Source software is that it can readily be reused. The current <command>ntlm_auth</command>
820                 module is basically a wrapper around authentication code from the core of the Samba project.
821                 </para>
822
823                 <para>
824                 <indexterm><primary>plain-text</primary></indexterm>
825                 <indexterm><primary>authentication</primary><secondary>plain-text</secondary></indexterm>
826                 <indexterm><primary>Web</primary><secondary>proxy</secondary></indexterm>
827                 <indexterm><primary>FTP</primary><secondary>proxy</secondary></indexterm>
828                 <indexterm><primary>NTLMSSP</primary></indexterm>
829                 <indexterm><primary>logon credentials</primary></indexterm>
830                 <indexterm><primary>Windows explorer</primary></indexterm>
831                 <indexterm><primary>Internet Information Server</primary></indexterm>
832                 <indexterm><primary>Apache Web server</primary></indexterm>
833                 The <command>ntlm_auth</command> module supports basic plain-text authentication and NTLMSSP 
834                 protocols. This module makes it possible for Web and FTP proxy requests to be authenticated without
835                 the user being interrupted via his or her Windows logon credentials. This facility is available with
836                 MS Windows Explorer and is one of the key benefits claimed for Microsoft Internet Information Server.
837                 There are a few open source initiatives to provide support for these protocols in the Apache Web server
838                 also.
839                 </para>
840
841                 <para>
842                 <indexterm><primary>wrapper</primary></indexterm>
843                 The short answer is that by adding a wrapper around key authentication components of Samba, other
844                 projects (like Squid) can benefit from the labors expended in meeting user interoperability needs.
845                 </para>
846
847         </answer>
848         </qandaentry>
849
850         <qandaentry>
851         <question>
852
853                 <para>
854                 What other services does Samba provide?
855                 </para>
856
857         </question>
858         <answer>
859
860                 <para>
861                 <indexterm><primary>winbindd</primary></indexterm>
862                 <indexterm><primary>Identity resolver</primary></indexterm>
863                 <indexterm><primary>daemon</primary></indexterm>
864                 <indexterm><primary>smbd</primary></indexterm>
865                 <indexterm><primary>file and print server</primary></indexterm>
866                 Samba-3 is a file and print server. The core components that provide this functionality are <command>smbd</command>,
867                 <command>nmbd</command>, and the identity resolver daemon, <command>winbindd</command>.
868                 </para>
869
870                 <para>
871                 <indexterm><primary>SMB/CIFS</primary></indexterm>
872                 <indexterm><primary>smbclient</primary></indexterm>
873                 Samba-3 is an SMB/CIFS client. The core component that provides this is called <command>smbclient</command>.
874                 </para>
875
876                 <para>
877                 <indexterm><primary>modules</primary></indexterm>
878                 <indexterm><primary>utilities</primary></indexterm>
879                 <indexterm><primary>validation</primary></indexterm>
880                 <indexterm><primary>inter-operability</primary></indexterm>
881                 <indexterm><primary>authentication</primary></indexterm>
882                 Samba-3 includes a number of helper tools, plug-in modules, utilities, and test and validation facilities.
883                 Samba-3 includes glue modules that help provide interoperability between MS Windows clients and UNIX/Linux
884                 servers and clients. It includes Winbind agents that make it possible to authenticate UNIX/Linux access attempts
885                 as well as logins to an SMB/CIFS authentication server backend. Samba-3 includes name service switch (NSS) modules
886                 to permit identity resolution via SMB/CIFS servers (Windows NT4/200x, Samba, and a host of other commercial
887                 server products).
888                 </para>
889
890         </answer>
891         </qandaentry>
892
893         <qandaentry>
894         <question>
895
896                 <para>
897                 Does use of Samba (<command>ntlm_auth</command>) improve the performance of Squid?
898                 </para>
899
900         </question>
901         <answer>
902
903                 <para>
904                 Not really. Samba's <command>ntlm_auth</command> module handles only authentication. It requires that
905                 Squid make an external call to <command>ntlm_auth</command> and therefore actually incurs a
906                 little more overhead. Compared with the benefit obtained, that overhead is well worth enduring. Since
907                 Squid is a proxy server, and proxy servers tend to require lots of memory, it is good advice to provide
908                 sufficient memory when using Squid. Just add a little more to accommodate <command>ntlm_auth</command>.
909                 </para>
910
911         </answer>
912         </qandaentry>
913         </qandaset>
914
915 </sect1>
916
917 </chapter>
918