This commit was manufactured by cvs2svn to create branch 'SAMBA_3_0'.
[samba.git] / docs / docbook / projdoc / ServerType.xml
1 <chapter id="ServerType">
2 <chapterinfo>
3         &author.tridge;
4         &author.jelmer;
5         &author.jht;
6 </chapterinfo>
7
8 <title>Server Types and Security Modes</title>
9
10 <para>
11 This chapter provides information regarding the types of server that Samba may be
12 configured to be. A Microsoft network administrator who wishes to migrate to or
13 use Samba will want to know the meaning, within a Samba context, of terms familiar to MS Windows
14 administrator. This means that it is essential also to define how critical security
15 modes function before we get into the details of how to configure the server itself.
16 </para>
17
18 <para>
19 The chapter provides an overview of the security modes of which Samba is capable
20 and how they relate to MS Windows servers and clients.
21 </para>
22
23 <para>
24 A question often asked is, <quote>Why would I want to use Samba?</quote> Most chapters contain a section
25 that highlights features and benefits. We hope that the information provided will help to
26 answer this question. Be warned though, we want to be fair and reasonable, so not all
27 features are positive towards Samba. The benefit may be on the side of our competition.
28 </para>
29
30 <sect1>
31 <title>Features and Benefits</title>
32
33 <para>
34 Two men were walking down a dusty road, when one suddenly kicked up a small red stone. It
35 hurt his toe and lodged in his sandal. He took the stone out and cursed it with a passion
36 and fury befitting his anguish. The other looked at the stone and said, <quote>This is a garnet.
37 I can turn that into a precious gem and some day it will make a princess very happy!</quote>
38 </para>
39
40 <para>
41 The moral of this tale: Two men, two very different perspectives regarding the same stone.
42 Like it or not, Samba is like that stone. Treat it the right way and it can bring great
43 pleasure, but if you are forced to use it and have no time for its secrets, then it can be
44 a source of discomfort.
45 </para>
46
47 <para>
48 Samba started out as a project that sought to provide interoperability for MS Windows 3.x
49 clients with a UNIX server. It has grown up a lot since its humble beginnings and now provides
50 features and functionality fit for large scale deployment. It also has some warts. In sections
51 like this one we tell of both.
52 </para>
53
54 <para>
55 So, what are the benefits of features mentioned in this chapter?
56 </para>
57
58 <itemizedlist>
59         <listitem><para>
60         Samba-3 can replace an MS Windows NT4 Domain Controller.
61         </para></listitem>
62
63         <listitem><para>
64         Samba-3 offers excellent interoperability with MS Windows NT4-style
65         domains as well as natively with Microsoft Active Directory domains.
66         </para></listitem>
67
68         <listitem><para>
69         Samba-3 permits full NT4-style Interdomain Trusts.
70         </para></listitem>
71
72         <listitem><para>
73         Samba has security modes that permit more flexible
74         authentication than is possible with MS Windows NT4 Domain Controllers.
75         </para></listitem>
76
77         <listitem><para>
78         Samba-3 permits use of multiple account database backends.
79         </para></listitem>
80
81         <listitem><para>
82         The account (password) database backends can be distributed
83         and replicated using multiple methods. This gives Samba-3
84         greater flexibility than MS Windows NT4 and in many cases a
85         significantly higher utility than Active Directory domains
86         with MS Windows 200x.
87         </para></listitem>
88 </itemizedlist>
89
90 </sect1>
91
92 <sect1>
93 <title>Server Types</title>
94
95
96 <para>
97 <indexterm><primary>Server Type</primary></indexterm>
98 Administrators of Microsoft networks often refer to three
99 different type of servers:</para>
100
101 <itemizedlist>
102         <listitem><para>Domain Controller</para>
103                 <itemizedlist>
104                         <listitem><para>Primary Domain Controller</para></listitem>
105                         <listitem><para>Backup Domain Controller</para></listitem>
106                         <listitem><para>ADS Domain Controller</para></listitem>
107                 </itemizedlist>
108         </listitem>
109         <listitem><para>Domain Member Server</para>
110                 <itemizedlist>
111                         <listitem><para>Active Directory Domain Server</para></listitem>
112                                 <listitem><para>NT4 Style Domain Domain Server</para></listitem>
113                 </itemizedlist>
114         </listitem>
115         <listitem><para>Stand-alone Server</para></listitem>
116 </itemizedlist>
117
118 <para>
119 The chapters covering Domain Control, Backup Domain Control and Domain Membership provide
120 pertinent information regarding Samba configuration for each of these server roles.
121 The reader is strongly encouraged to become intimately familiar with the information 
122 presented.
123 </para>
124
125 </sect1>
126
127 <sect1>
128 <title>Samba Security Modes</title>
129
130
131 <para>
132 <indexterm><primary>Security Mode</primary></indexterm>
133 <indexterm><primary>security</primary></indexterm>
134 In this section the function and purpose of Samba's security
135 modes are described. An accurate understanding of how Samba implements each security
136 mode as well as how to configure MS Windows clients for each mode will significantly
137 reduce user complaints and administrator heartache.
138 </para>
139
140 <para>
141 In the SMB/CIFS networking world, there are only two types of security: <emphasis>User Level</emphasis>
142 and <emphasis>Share Level</emphasis>. We refer to these collectively as <emphasis>security levels</emphasis>.
143 In implementing these two security levels, Samba provides flexibilities
144 that are not available with Microsoft Windows NT4/200x servers. In actual fact, Samba implements
145 <emphasis>Share Level</emphasis> security only one way, but has four ways of implementing
146 <emphasis>User Level</emphasis> security. Collectively, we call the Samba implementations
147 <emphasis>Security Modes</emphasis>. They are known as: <emphasis>SHARE</emphasis>, <emphasis>USER</emphasis>,
148 <emphasis>DOMAIN</emphasis>, <emphasis>ADS</emphasis>, and <emphasis>SERVER</emphasis> modes.
149 They are documented in this chapter.
150 </para>
151
152 <para>
153 An SMB server tells the client at startup what security level it is running. There are two options:
154 Share Level and User Level. Which of these two the client receives affects the way the client then
155 tries to authenticate itself. It does not directly affect (to any great extent) the way the Samba
156 server does security. This may sound strange, but it fits in with the client/server approach of SMB.
157 In SMB everything is initiated and controlled by the client, and the server can only tell the client
158 what is available and whether an action is allowed.
159 </para>
160
161 <sect2>
162 <title>User Level Security</title>
163
164 <para>
165 We will describe User Level Security first, as its simpler.
166 In User Level Security, the client will send a
167 session setup request directly following protocol negotiation.
168 This request provides a username and password. The server can either accept or reject that
169 username/password combination. At this stage the server has no idea what
170 share the client will eventually try to connect to, so it can't base the
171 <emphasis>accept/reject</emphasis> on anything other than:
172 </para>
173
174 <orderedlist>
175 <listitem><para>the username/password.</para></listitem>
176 <listitem><para>the name of the client machine.</para></listitem>
177 </orderedlist>
178
179 <para>
180 If the server accepts the username/password then the client expects to be able to
181 mount shares (using a <emphasis>tree connection</emphasis>) without specifying a
182 password. It expects that all access rights will be as the username/password
183 specified in the <emphasis>session setup</emphasis>.
184 </para>
185
186 <para>
187 It is also possible for a client to send multiple <emphasis>session setup</emphasis>
188 requests. When the server responds, it gives the client a <emphasis>uid</emphasis> to use
189 as an authentication tag for that username/password. The client can maintain multiple
190 authentication contexts in this way (WinDD is an example of an application that does this).
191 </para>
192
193 <sect3>
194 <title>Example Configuration</title>
195
196 <para>
197 The &smb.conf; parameter that sets user level security is:
198 </para>
199
200 <para><smbconfblock>
201 <smbconfoption><name>security</name><value>user</value></smbconfoption>
202 </smbconfblock></para>
203
204 <para>
205 This is the default setting since Samba-2.2.x.
206 </para>
207
208 </sect3>
209
210 </sect2>
211 <sect2>
212 <title>Share Level Security</title>
213
214 <para>
215 In Share Level security, the client authenticates
216 itself separately for each share. It sends a password along with each 
217 tree connection (share mount). It does not explicitly send a
218 username with this operation. The client expects a password to be associated
219 with each share, independent of the user. This means that Samba has to work out what
220 username the client probably wants to use. It is never explicitly sent the username.
221 Some commercial SMB servers such as NT actually associate passwords directly with
222 shares in Share Level security, but Samba always uses the UNIX authentication scheme
223 where it is a username/password pair that is authenticated, not a share/password pair.
224 </para>
225
226 <para>
227 To understand the MS Windows networking parallels, one should think
228 in terms of MS Windows 9x/Me where one can create a shared folder that provides read-only
229 or full access, with or without a password.
230 </para>
231
232 <para>
233 Many clients send a session setup even if the server is in Share Level security. They
234 normally send a valid username but no password. Samba records this username in a list
235 of possible usernames. When the client then does a tree connection it also adds to this list the name
236 of the share they try to connect to (useful for home directories) and any users
237 listed in the <smbconfoption><name>user</name></smbconfoption> parameter in the &smb.conf; file.
238 The password is then checked in turn against these possible usernames. If a match is found
239 then the client is authenticated as that user.
240 </para>
241
242 <sect3>
243 <title>Example Configuration</title>
244
245 <para>
246 The &smb.conf; parameter that sets Share Level security is:
247 </para>
248
249 <para><smbconfblock>
250 <smbconfoption><name>security</name><value>share</value></smbconfoption>
251 </smbconfblock></para>
252
253 <para>
254 There are reports that recent MS Windows clients do not like to work
255 with share mode security servers. You are strongly discouraged from using Share Level security.
256 </para>
257
258 </sect3>
259 </sect2>
260
261 <sect2>
262 <title>Domain Security Mode (User Level Security)</title>
263
264 <para>
265 <indexterm><primary>Domain Member</primary></indexterm>
266 When Samba is operating in <smbconfoption><name>security</name><value>domain</value></smbconfoption> mode,
267 the Samba server has a domain security trust account (a machine account) and causes
268 all authentication requests to be passed through to the Domain Controllers.
269 In other words, this configuration makes the Samba server a Domain Member server.
270 </para>
271
272 <sect3>
273 <title>Example Configuration</title>
274 <para><emphasis>
275 Samba as a Domain Member Server
276 </emphasis></para>
277
278
279 <para>
280 <indexterm><primary>Server Type</primary><secondary>Domain Member</secondary></indexterm>
281 This method involves addition of the following parameters in the &smb.conf; file:
282 </para>
283
284 <para><smbconfblock>
285 <smbconfoption><name>security</name><value>domain</value></smbconfoption>
286 <smbconfoption><name>workgroup</name><value>&example.workgroup;</value></smbconfoption>
287 </smbconfblock></para>
288
289 <para>
290 In order for this method to work, the Samba server needs to join the MS Windows NT
291 security domain. This is done as follows:
292 <indexterm><primary>net</primary><secondary>rpc</secondary></indexterm>
293 <indexterm><primary>Domain Member</primary><secondary>joining</secondary></indexterm>
294 </para>
295
296
297 <procedure>
298         <step><para>On the MS Windows NT Domain Controller, using
299         the Server Manager, add a machine account for the Samba server.
300         </para></step>
301
302         <step><para>On the UNIX/Linux system execute:</para>
303         
304                         <para><screen>&rootprompt;<userinput>net rpc join -U administrator%password</userinput></screen></para>
305                 </step>
306 </procedure>
307
308 <note><para>
309 Samba-2.2.4 and later can auto-join a Windows NT4-style Domain just by executing:
310 <screen>
311 &rootprompt;<userinput>smbpasswd -j <replaceable>DOMAIN_NAME</replaceable> -r <replaceable>PDC_NAME</replaceable> \
312          -U Administrator%<replaceable>password</replaceable></userinput>
313 </screen>
314
315 Samba-3 can do the same by executing:
316 <screen>
317 &rootprompt;<userinput>net rpc join -U Administrator%<replaceable>password</replaceable></userinput>
318 </screen>
319 It is not necessary with Samba-3 to specify the <replaceable>DOMAIN_NAME</replaceable> or the
320 <replaceable>PDC_NAME</replaceable> as it figures this out from the &smb.conf; file settings.
321 </para></note>
322
323 <para>
324 Use of this mode of authentication does require there to be a standard UNIX account
325 for each user in order to assign a UID once the account has been authenticated by
326 the remote Windows DC. This account can be blocked to prevent logons by clients other than
327 MS Windows through means such as setting an invalid shell in the
328 <filename>/etc/passwd</filename> entry.
329 </para>
330
331 <para>
332 An alternative to assigning UIDs to Windows users on a Samba member server is
333 presented in <link linkend="winbind"></link>.
334 </para>
335
336 <para>
337 For more information regarding Domain Membership, see <link linkend="domain-member"></link>.
338 </para>
339
340 </sect3>
341 </sect2>
342
343 <sect2>
344 <title>ADS Security Mode (User Level Security)</title>
345
346 <para>
347 Both Samba-2.2, and Samba-3 can join an Active Directory domain. This is
348 possible if the domain is run in native mode. Active Directory in
349 native mode perfectly allows NT4-style Domain Members. This is contrary to
350 popular belief. Active Directory in native mode prohibits only the use of
351 Backup Domain Controllers running MS Windows NT4.
352 </para>
353
354 <para>
355 If you are using Active Directory, starting with Samba-3 you can
356 join as a native AD member. Why would you want to do that?
357 Your security policy might prohibit the use of NT-compatible
358 authentication protocols. All your machines are running Windows 2000
359 and above and all use Kerberos. In this case Samba as an NT4-style
360 domain would still require NT-compatible authentication data. Samba in
361 AD-member mode can accept Kerberos tickets.
362 </para>
363
364 <sect3>
365 <title>Example Configuration</title>
366
367 <para><smbconfblock>
368 <smbconfoption><name>realm</name><value>your.kerberos.REALM</value></smbconfoption>
369 <smbconfoption><name>security</name><value>ADS</value></smbconfoption>
370 </smbconfblock></para>
371
372 <para>
373 The following parameter may be required:
374 </para>
375
376 <para><smbconfblock>
377 <smbconfoption><name>password server</name><value>your.kerberos.server</value></smbconfoption>
378 </smbconfblock></para>
379
380 <para>
381 Please refer to <link linkend="domain-member"></link> and <link linkend="ads-member"></link>
382 for more information regarding this configuration option.
383 </para>
384
385 </sect3>
386 </sect2>
387
388 <sect2>
389 <title>Server Security (User Level Security)</title>
390
391 <para>
392 Server Security Mode is left over from the time when Samba was not capable of acting
393 as a Domain Member server. It is highly recommended not to use this feature. Server
394 security mode has many drawbacks that include:
395 </para>
396
397 <itemizedlist>
398         <listitem><para>Potential Account Lockout on MS Windows NT4/200x password servers.</para></listitem>
399         <listitem><para>Lack of assurance that the password server is the one specified.</para></listitem>
400         <listitem><para>Does not work with Winbind, which is particularly needed when storing profiles remotely.</para></listitem>
401         <listitem><para>This mode may open connections to the password server, and keep them open for extended periods.</para></listitem>
402         <listitem><para>Security on the Samba server breaks badly when the remote password server suddenly shuts down.</para></listitem>
403         <listitem><para>With this mode there is NO security account in the domain that the password server belongs to for the Samba server.</para></listitem>
404 </itemizedlist>
405
406 <para>
407 In Server Security Mode the Samba server reports to the client that it is in User Level
408 security. The client then does a session setup as described earlier.
409 The Samba server takes the username/password that the client sends and attempts to login to the
410 <smbconfoption><name>password server</name></smbconfoption> by sending exactly the same username/password that
411 it got from the client. If that server is in User Level Security and accepts the password,
412 then Samba accepts the client's connection. This allows the Samba server to use another SMB
413 server as the <smbconfoption><name>password server</name></smbconfoption>.
414 </para>
415
416 <para>
417 You should also note that at the start of all this where the server tells the client
418 what security level it is in, it also tells the client if it supports encryption. If it
419 does, it supplies the client with a random cryptkey. The client will then send all
420 passwords in encrypted form. Samba supports this type of encryption by default.
421 </para>
422
423 <para>
424 The parameter <smbconfoption><name>security</name><value>server</value></smbconfoption> means that Samba reports to clients that
425 it is running in <emphasis>user mode</emphasis> but actually passes off all authentication
426 requests to another <emphasis>user mode</emphasis> server. This requires an additional
427 parameter <smbconfoption><name>password server</name></smbconfoption> that points to the real authentication server.
428 The real authentication server can be another Samba server, or it can be a Windows NT server,
429 the latter being natively capable of encrypted password support.
430 </para>
431
432 <note><para>
433 When Samba is running in <emphasis>Server Security Mode</emphasis> it is essential that
434 the parameter <emphasis>password server</emphasis> is set to the precise NetBIOS machine
435 name of the target authentication server. Samba cannot determine this from NetBIOS name
436 lookups because the choice of the target authentication server is arbitrary and cannot
437 be determined from a domain name. In essence, a Samba server that is in
438 <emphasis>Server Security Mode</emphasis> is operating in what used to be known as
439 workgroup mode.
440 </para></note>
441
442 <sect3>
443 <title>Example Configuration</title>
444 <para><emphasis>
445 Using MS Windows NT as an Authentication Server
446 </emphasis></para>
447
448 <para>
449 This method involves the additions of the following parameters in the &smb.conf; file:
450 </para>
451
452 <para><smbconfblock>
453 <smbconfoption><name>encrypt passwords</name><value>Yes</value></smbconfoption>
454 <smbconfoption><name>security</name><value>server</value></smbconfoption>
455 <smbconfoption><name>password server</name><value>"NetBIOS_name_of_a_DC"</value></smbconfoption>
456 </smbconfblock></para>
457
458
459 <para>
460 There are two ways of identifying whether or not a username and password pair is valid.
461 One uses the reply information provided as part of the authentication messaging
462 process, the other uses just an error code.
463 </para>
464
465 <para>
466 The downside of this mode of configuration is the fact that for security reasons Samba
467 will send the password server a bogus username and a bogus password and if the remote
468 server fails to reject the username and password pair then an alternative mode of
469 identification of validation is used. Where a site uses password lock out after a
470 certain number of failed authentication attempts this will result in user lockouts.
471 </para>
472
473 <para>
474 Use of this mode of authentication requires a standard UNIX account for the user.
475 This account can be blocked to prevent logons by non-SMB/CIFS clients.
476 </para>
477
478 </sect3>
479 </sect2>
480
481 </sect1>
482
483 <sect1>
484 <title>Password Checking</title>
485
486 <para>
487 MS Windows clients may use encrypted passwords as part of a challenge/response
488 authentication model (a.k.a. NTLMv1 and NTLMv2) or alone, or cleartext strings for simple
489 password-based authentication. It should be realized that with the SMB protocol,
490 the password is passed over the network either in plain-text or encrypted, but
491 not both in the same authentication request.
492 </para>
493
494 <para>
495 When encrypted passwords are used, a password that has been entered by the user
496 is encrypted in two ways:
497 </para>
498
499 <itemizedlist>
500         <listitem><para>An MD4 hash of the unicode of the password
501         string. This is known as the NT hash.
502         </para></listitem>
503
504         <listitem><para>The password is converted to upper case,
505         and then padded or truncated to 14 bytes. This string is
506         then appended with 5 bytes of NULL characters and split to
507         form two 56-bit DES keys to encrypt a <quote>magic</quote> 8-byte value.
508         The resulting 16 bytes form the LanMan hash.
509         </para></listitem>
510 </itemizedlist>
511
512 <para>
513 MS Windows 95 pre-service pack 1, MS Windows NT versions 3.x and version 4.0
514 pre-service pack 3 will use either mode of password authentication. All
515 versions of MS Windows that follow these versions no longer support plain
516 text passwords by default.
517 </para>
518
519 <para>
520 MS Windows clients have a habit of dropping network mappings that have been idle
521 for 10 minutes or longer. When the user attempts to use the mapped drive
522 connection that has been dropped, the client re-establishes the connection using
523 a cached copy of the password.
524 </para>
525
526 <para>
527 When Microsoft changed the default password mode, support was dropped for caching
528 of the plain-text password. This means that when the registry parameter is changed
529 to re-enable use of plain-text passwords it appears to work, but when a dropped
530 service connection mapping attempts to revalidate, this will fail if the remote
531 authentication server does not support encrypted passwords. It is definitely not
532 a good idea to re-enable plain-text password support in such clients.
533 </para>
534
535 <para>
536 The following parameters can be used to work around the issue of Windows 9x/Me clients
537 upper-casing usernames and passwords before transmitting them to the SMB server
538 when using cleartext authentication:
539 </para>
540
541 <para><smbconfblock>
542 <smbconfoption><name>password level</name><value><replaceable>integer</replaceable></value></smbconfoption>
543 <smbconfoption><name>username level</name><value><replaceable>integer</replaceable></value></smbconfoption>
544 </smbconfblock></para>
545
546 <para>
547 By default Samba will convert to lower case the username before attempting to lookup the user
548 in the database of local system accounts. Because UNIX usernames conventionally
549 only contain lower-case characters, the <smbconfoption><name>username level</name></smbconfoption> parameter
550 is rarely needed.
551 </para>
552
553 <para>
554 However, passwords on UNIX systems often make use of mixed-case characters.
555 This means that in order for a user on a Windows 9x/Me client to connect to a Samba
556 server using cleartext authentication, the <smbconfoption><name>password level</name></smbconfoption>
557 must be set to the maximum number of upper case letters that <emphasis>could</emphasis>
558 appear in a password. Note that if the server OS uses the traditional DES version
559 of crypt(), a <smbconfoption><name>password level</name></smbconfoption> of 8 will result in case
560 insensitive passwords as seen from Windows users. This will also result in longer
561 login times as Samba has to compute the permutations of the password string and
562 try them one by one until a match is located (or all combinations fail).
563 </para>
564
565 <para>
566 The best option to adopt is to enable support for encrypted passwords wherever
567 Samba is used. Most attempts to apply the registry change to re-enable plain-text
568 passwords will eventually lead to user complaints and unhappiness.
569 </para>
570
571 </sect1>
572
573 <sect1>
574 <title>Common Errors</title>
575
576 <para>
577 We all make mistakes. It is okay to make mistakes, as long as they are made in the right places
578 and at the right time. A mistake that causes lost productivity is seldom tolerated, however a mistake
579 made in a developmental test lab is expected.
580 </para>
581
582 <para>
583 Here we look at common mistakes and misapprehensions that have been the subject of discussions
584 on the Samba mailing lists. Many of these are avoidable by doing your homework before attempting
585 a Samba implementation. Some are the result of a misunderstanding of the English language. The
586 English language, which has many phrases that are potentially vague and may be highly confusing
587 to those for whom English is not their native tongue.
588 </para>
589
590 <sect2>
591 <title>What Makes Samba a Server?</title>
592
593 <para>
594 To some the nature of the Samba <emphasis>security</emphasis> mode is obvious, but entirely
595 wrong all the same. It is assumed that <smbconfoption><name>security</name><value>server</value></smbconfoption> means that Samba
596 will act as a server. Not so! This setting means that Samba will <emphasis>try</emphasis>
597 to use another SMB server as its source for user authentication alone.
598 </para>
599
600 </sect2>
601
602 <sect2>
603 <title>What Makes Samba a Domain Controller?</title>
604
605 <para>
606 The &smb.conf; parameter <smbconfoption><name>security</name><value>domain</value></smbconfoption> does not really make Samba behave
607 as a Domain Controller. This setting means we want Samba to be a Domain Member.
608 </para>
609
610 </sect2>
611
612 <sect2>
613 <title>What Makes Samba a Domain Member?</title>
614
615 <para>
616 Guess! So many others do. But whatever you do, do not think that <smbconfoption><name>security</name><value>user</value></smbconfoption>
617 makes Samba act as a Domain Member. Read the manufacturer's manual before the warranty expires. See 
618 <link linkend="domain-member"></link> for more information.
619 </para>
620
621 </sect2>
622
623
624 <sect2>
625 <title>Constantly Losing Connections to Password Server</title>
626
627 <para>
628         <quote>
629 Why does server_validate() simply give up rather than re-establish its connection to the
630 password server?  Though I am not fluent in the SMB protocol, perhaps the cluster server
631 process passes along to its client workstation the session key it receives from the password
632 server, which means the password hashes submitted by the client would not work on a subsequent
633 connection whose session key would be different. So server_validate() must give up.</quote>
634 </para>
635
636 <para>
637 Indeed. That's why <smbconfoption><name>security</name><value>server</value></smbconfoption>
638 is at best a nasty hack. Please use <smbconfoption><name>security</name><value>domain</value></smbconfoption>;
639 <smbconfoption><name>security</name><value>server</value></smbconfoption> mode is also known as pass-through authentication.
640 </para>
641
642 </sect2>
643
644 </sect1>
645
646 </chapter>