summaryrefslogtreecommitdiff
path: root/docs/textdocs/kurs.tex
blob: 6f5a24098e559a833a087d11b5bf92ffc082fccc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
\documentclass{scrartcl}
\usepackage{pslatex}
\usepackage[dvips,colorlinks=true,
            pdfauthor={Volker Lendecke, Service Network GmbH},
            pdftitle={Kursskript Samba},
            pdfsubject={Samba},
            pdfkeywords={samba,training}
            ]{hyperref}
\usepackage[T1]{fontenc}
\usepackage{german}
\usepackage{pstricks}
\usepackage[dvips]{epsfig}
\newcommand{\prog}{\texttt}
\newcommand{\param}{\texttt}
\newcommand{\datei}{\texttt}
\newcommand{\nbname}{\texttt}
\newcommand{\todo}{\texttt}
\newcommand{\defin}{\emph}
\hyphenation{Net-BIOS}

\usepackage{fancyheadings}
\pagestyle{fancyplain}
\lhead{}
\rhead{\thepage}
\rfoot{\copyright{} 1999, 2000, Volker Lendecke (http://www.sernet.de/vl/)}
\cfoot{}

\begin{document}

\title{Kursskript\\[\baselineskip]
  \epsfig{file=logo.ps,width=6cm}}

\author{Volker Lendecke\\
Samba Team\\
Service Network GmbH\\
G"ottingen\\
http://samba.SerNet.DE/}

\date{\today}

\maketitle
\thispagestyle{empty}

\begin{quote}
  Dieses Dokument ist eine Mitschrift des Sambakurses der Service
  Network GmbH in G"ottingen. Es gibt einen guten "Uberblick "uber den
  Kurs und kann gleichzeitig als generelle Einf"uhrung in NetBIOS und
  Samba dienen.
\end{quote}

\break

\tableofcontents

\break

\section{Einf"uhrung}

Samba -- Was ist das?

Kurz gesagt l"a"st Samba jeden Unixrechner in der Netzwerkumgebung von
Windows NT erscheinen. Au"serdem lassen sich mit Samba Datei- und
Druckfreigaben erstellen. Das hei"st, unter Unix vorhandener
Plattenplatz kann ganz normal unter Windows genutzt werden, und unter
Unix vorhandene Drucker kann man als Netzwerkdrucker unter Windows
ansteuern. Dar"uber hinaus bietet Samba viele Dienste, die sonst nur
von Windows NT geleistet werden. Dazu geh"oren:

\begin{description}
  
\item[WINS Server] Mit Samba kann sehr einfach ein WINS Server
  eingerichtet werden.
  
\item[Computersuchdienst] Samba als sehr stabiler Server kann alle
  Aufgaben des Computersuchdienstes "ubernehmen. Die in Windowsumgebungen
  oft nicht sehr vorhersagbare Netzwerkumgebung kann so etwas 
  stabiler gemacht werden.
  
\item[Logon Server] F"ur Windows 95/98 ist Samba Logon-Server, kann
  also die Dom"anenanmeldung f"ur diese Systeme "ubernehmen.
  
\item[PDC] Die Funktionalit"at des Primary Domain Controller ist in
  einer noch nicht freigegebenen Version implementiert, ist jedoch
  schon in vielen Installationen im produktiven Einsatz.
  
\item[Diagnosewerkzeuge] Samba bietet eine Reihe von kleinen, aber
sehr effektiven Werkzeugen, die die oft m"uhselige Suche nach Fehlern
im Netz vereinfachen k"onnen.

\end{description}

Samba bietet gegen"uber den bekannten Implementationen des
SMB-Protokolls einige Vorteile. Teilweise sind diese Vorteile von Unix
geerbt, teilweise sind sie in der Architektur von Samba begr"undet.

\begin{description}
  
\item[Entfernte Administration] Der gr"o"ste Vorteil von Samba in
  gr"o"seren Umgebungen ist die M"oglichkeit, die gesamte
  Administration von der Kommandozeile aus durchzuf"uhren. Damit
  bekommt man gegen"uber grafischen Oberfl"achen sehr viel bessere
  M"oglichkeiten, von entfernten Standorten aus zu administrieren.
  Werkzeuge wie PC Anywhere sind hier deutlich weniger flexibel.
  
  Zus"atzlich bietet Samba die M"oglichkeit der grafischen
  Administration "uber einen Webbrowser. Auch hier ist es unerheblich,
  wo sich Administrator und Server befinden.
  
\item[Zentrale Konfiguration] Die gesamte Konfiguration von Samba
  befindet sich in einer einzigen Datei und ist nicht "uber viele
  Dialogfelder verteilt. Das erleichtert die Administration erheblich.
  So l"a"st sich eine funktionierende Konfiguration sehr einfach
  sichern und wieder einspielen.
  
\item[Stabilit"at] Samba erbt von Unix eine hohe Stabilit"at.
  Unixrechner sind daf"ur ausgelegt, "uber Monate hinweg durchzulaufen
  und leisten dies auch. Samba als weiterer Proze"s profitiert von
  dieser hohen Verf"ugbarkeit. Die modulare Struktur von Unix l"a"st
  es dar"uber hinaus zu, da"s der Serverdienst Samba unabh"angig von
  allen anderen Systemprozessen eigenst"andig neu gestartet werden
  kann, sofern hier ein Problem vorliegen sollte.
  
  Samba hat eine Architektur, die die Stabilit"at weiter f"ordert.
  F"ur jede Clientverbindung wird ein eigener Proze"s gestartet.
  Verursacht also ein Client ein Problem auf Serverseite, dann wird
  nur dieser Client in Mitleidenschaft gezogen.  Eventuell
  st"urzt dieser eine Proze"s ab, die anderen werden jedoch 
  nicht gest"ort.
  
\item[Skalierbarkeit] Samba kann von dem vielzitierten kleinen 386er
  unter Linux bis hin zu den gr"o"sten heute verf"ugbaren Maschinen
  jede Hardware optimal ausnutzen. Die Architektur von Samba
  erm"oglicht es, da"s auch Multiprozessormaschinen optimal
  ausgelastet werden. Multiprozessormaschinen k"onnen alle Prozessoren dann
  besch"aftigen, wenn es viele unabh"angige Prozesse im System gibt.
  Samba erstellt f"ur jeden Client einen Proze"s, der auf einem
  eigenen Prozessor ablaufen kann.
  
\item[Flexibilit"at] Samba bietet eine riesige Anzahl von
  Konfigurationsoptionen, die zun"achst einmal "uberw"altigend wirkt.
  Im Laufe des Kurses wird sich herausstellen, da"s f"ur das
  Funktionieren von Samba nur sehr wenige Optionen wirklich notwendig
  sind. Die meisten Optionen werden nur f"ur Spezialf"alle ben"otigt.
  Durch ein sehr flexibles Schema von Makroersetzungen ist mit Samba
  sehr viel mehr m"oglich als mit NT. Als Beispiel sei genannt, da"s
  man sehr einfach einen Sambaserver unter zwei verschiedenen Namen in
  der Netzwerkumgebung erscheinen lassen kann, und beide virtuelle
  Server unterschiedlich konfigurieren kann. Zu Testzwecken ist es 
  sogar m"oglich,
  zwei unterschiedliche Versionen gleichzeitig auf einer Maschine
  laufen zu lassen.

\end{description}

\section{NetBIOS}

Sobald Windowsrechner Dateisysteme austauschen, sich gegenseitig in
der Netzwerkumgebung sehen oder Drucker freigeben, funktioniert die
Kommunikation "uber NetBIOS\footnote{Dies ist in reinen Windows 2000
  Umgebungen nicht mehr richtig. Microsoft hat die NetBIOS-Ebene
  abgeschafft, Windows 2000 kommuniziert direkt "uber TCP. Aus
  Kompatibilit"atsgr"unden kann Windows 2000 jedoch noch "uber NetBIOS
  kommunizieren.}. NetBIOS ist eine reine
Softwareschnittstelle zur Kommunikation von Rechnern. Mit dieser
Schnittstelle werden Programmen unterschiedliche Dienste zur
Kommunikation zur Verf"ugung gestellt. NetBIOS wurde entworfen, um in
kleinen, lokalen Netzen Kommunikation zu erm"oglichen. Dabei lag der
Schwerpunkt des Entwurfs auf der Einfachheit der Anwendung. Auf
Skalierbarkeit und die Andwendung in Weitverkehrsnetzen wurde beim
Design nicht geachtet.

Die Kommunikation mit NetBIOS wurde in drei Teilbereiche aufgeteilt,
den Namensdienst, den Datagramm- und den Sitzungsdienst.

\begin{description}
  
\item[Namensdienst:] Im Rahmen des Namensdienstes sind die Rechner in
  der Lage, sich gegenseitig im Netz zu identifizieren. Es sei an
  dieser Stelle betont, da"s der NetBIOS-Namensdienst nichts mit der
  Anzeige in der Netzwerkumgebung zu tun hat. Der Computersuchdienst,
  der f"ur die Netzwerkumgebung zust"andig ist, h"angt jedoch sehr
  stark von einem korrekt funktionierenden Namensdienst ab.

\item[Datagrammdienst:] Betrachtet man die Rechnerkommunikation auf
  dem Netz, so sieht man, da"s die versendeten Daten in einzelne
  Pakete aufgeteilt werden.
  Diese einzelnen Pakete werden dann vom Netz nach bestem Bem"uhen an
  einen Zielrechner ausgeliefert. Geht ein Paket verloren, kann man
  nichts machen, man bekommt unter Umst"anden nicht einmal eine
  Benachrichtigung dar"uber, da"s etwas nicht stimmt. Aufeinander
  folgende Pakete k"onnen in vertauschter Reihenfolge beim Empf"anger
  ankommen. Es kann sogar sein, da"s Pakete auf dem Weg dupliziert
  werden, also mehrfach ankommen. Diese Unzuverl"assigkeit des Netzes
  wird durch den Datagrammdienst an die Benutzerprogramme
  weitergegeben. Der Datagrammdienst hat jedoch nicht nur Nachteile.
  Zwei Vorteile sind der geringe Aufwand, mit dem Pakete verschickt
  werden k"onnen, und die M"oglichkeit, ein Datagramm an mehrere
  Rechner gleichzeitig zu verschicken. Die Applikation mu"s selbst
  entscheiden, wie sie mit der Unzuverl"assigkeit des Dienstes
  klarkommt.
  
\item[Sitzungsdienst:] Die Unzuverl"assigkeit des Netzes ist f"ur
bestimmte Applikationen wie Dateitransfer oder Terminalanwendungen
nicht akzeptabel. Wenn man eine Datei "ubertr"agt, m"ochte man sicher
sein, da"s die Datei komplett und korrekt "ubertragen wurde.  F"ur
diese h"oheren Anforderungen wurde der Sitzungsdienst entworfen. Zwei
Rechner vereinbaren eine NetBIOS-Sitzung. Die Daten, die "uber diese
Verbindung "ubertragen werden, kommen auf jeden Fall an, und zwar in
der richtigen Reihenfolge. K"onnen Daten einmal nicht "ubertragen
werden, so erh"alt die versendende Applikation eine Fehlermeldung. Die
Applikation kann nun versuchen, die abgebrochene Sitzung neu
aufzubauen. Dieser Zuverl"assigkeit steht ein erh"ohter Aufwand beim
Sitzungsauf- und -abbau gegen"uber.

\end{description}

Zwei Rechner, die kommunizieren wollen, m"ussen sich zun"achst gegenseitig
identifizieren. NetBIOS sieht hierf"ur bis zu 16 Zeichen lange Namen
vor.  Jede Applikation kann f"ur sich beliebig viele Namen reservieren
und unter einem dieser Namen Verbindungen aufbauen und Daten austauschen.
Diese Reservierung von Namen gilt sowohl f"ur Server, die vom Netz aus
erreichbar sein m"ussen, als auch f"ur Clients, die Server im Netz
erreichen wollen, da Server wissen m"ussen, wohin die Antworten
gehen m"ussen.

Zwei Anwendungen wollen nun per NetBIOS miteinander kommunizieren.
Dazu mu"s zun"achst der Server seine Bereitschaft kundtun,
Verbindungen entgegenzunehmen. Dazu meldet er sich im Netz mit seinem
Namen an. Diese Anmeldung geschieht per Broadcast, so da"s alle im
Netz mith"oren k"onnen. Jeder Rechner ist frei, beliebige Namen im
Netz f"ur sich zu beanspruchen, sofern diese noch nicht belegt
sind\footnote{Mit dieser Freiheit ergeben sich viele M"oglicheiten,
  von einem beliebigen Rechner aus ein Windows-Netz bis zur
  Unbenutzbarkeit zu st"oren. Man mu"s nur bestimmte, f"ur den PDC
  vorgesehene Namen zum richtigen Zeitpunkt reservieren.}. Eine
Reservierung geschieht also, indem ein Rechner per Broadcast
ank"undigt, da"s er unter einem bestimmten Namen erreichbar ist. Dann
wartet er auf Protest. Beklagt sich niemand, schickt er eine zweite
Reservierung und wartet wieder. Nach der dritten Reservierung ist der
Rechner ausreichend sicher, da"s kein anderer den Namen bereits f"ur
sich eingenommen hat, und sieht ihn als f"ur sich reserviert an.

Wenn nun ein Client mit einem Server reden m"ochte, dann mu"s er sich
wie der Server einen eindeutigen Namen ausdenken und im Netz
reservieren. Das Verfahren dazu ist identisch. Zus"atzlich mu"s der
Client jedoch die MAC-Adresse des Servers herausbekommen. Die
Mechanismen, wie dies geschieht, h"angen davon ab, wie NetBIOS
implementiert ist.

NetBIOS kann mit unterschiedlichen Protokollen implementiert werden.
NetBEUI, IPX und TCP/IP sind drei heute verwendete Protokolle, wobei
f"ur Neuinstallation TCP/IP das bevorzugte Protokoll sein sollte.
Der Ablauf der Namensaufl"osung soll an einem
Beispiel verdeutlicht werden.

Auf einem Client soll eine Verbindung zu dem Server \nbname{samba}
aufgebaut werden. Direkt erreicht man dies, indem man in der Taskleiste
Start $\rightarrow$ Ausf"uhren $\rightarrow$ \verb|\\samba| eingibt.
Im folgenden werden die unterschiedlichen Verfahren betrachtet, mit
denen ein Rechner die MAC-Adresse des Servers herausbekommt.

\begin{description}

\item[NetBEUI:]

  \textbf{"`Samba"'$\,\Rightarrow\,$MAC-Adresse}
  
  Bei diesem Protokoll findet der Client den Server ausschlie"slich
  "uber Broadcasts. Er verschickt per Broadcast eine Anfrage, wer sich
  f"ur den gesuchten Namen verantwortlich f"uhlt. Der Rechner, der
  diesen Namen tats"achlich als Server reserviert hat, wird aufgrund
  dieser Anfrage seine eigene MAC-Adresse aus dem ROM seiner
  Netzwerkkarte auslesen und entsprechend antworten. Daraufhin kann
  der Client dann die Verbindung aufbauen. "Uber NetBEUI k"onnen also
  nur Rechner miteinander reden, die in der gleichen Broadcastdom"ane
  liegen. Sobald Router zum Einsatz kommen sollen, kann reines NetBEUI
  nicht mehr verwendet werden, da dann der Server, der kontaktiert
  werden soll, von der Namensanfrage nichts mehr mitbekommt, also auch
  nicht antworten kann.
  
\item[IPX]
  
  \textbf{"`Samba"'$\,\Rightarrow\,$IPX-Knotenadresse
    $\,\Rightarrow\,$MAC-Adresse}
  
  Bei IPX liegt zwischen Servernamen und der MAC-Adresse die
  IPX-Knotenadresse. Diese enth"alt eine 4 Byte lange Netzwerknummer
  und die 6 Byte lange MAC-Adresse des Rechners. Die Knotenadresse
  wird anhand des NetBIOS-Namens wie bei NetBEUI per Broadcast im
  lokalen Netz gesucht. Damit w"aren Rechner hinter Routern nicht
  erreichbar, da die Namensanfrage nicht zu ihnen durchdringt.
  IPX-Router erkennen diese Namensanfragen und leiten sie per
  Broadcast in s"amtliche angeschlossenen Netze weiter, so da"s die
  Anfrage jedes Teilnetz erreicht.
  
  Jede Anfrage l"ost einen Broadcast in jedem angeschlossenen Subnetz
  aus. Einige IPX-Router speichern eine Namenstabelle und k"onnen so
  viele Anfragen selbst beantworten, so da"s die Broadcastlast
  reduziert wird.

\item[TCP/IP]
  
  \textbf{"`Samba"'$\,\Rightarrow\,$IP-Adresse$\,\Rightarrow\,
    $MAC-Adresse}

  Bei TCP/IP mu"s der Client die IP-Adresse des Servers herausfinden.
  Dies geschieht wie bei den anderen Protokollen per Broadcast im
  lokalen Netz. IP-Router k"onnen nicht angewiesen werden, die
  Anfragen per Broadcast in alle angeschlossenen Netze weiterzuleiten.
  Aus diesem Grund gibt es hier andere Mechanismen, die im folgenden
  beschrieben werden.
  
  Nachdem die IP-Adresse herausgefunden wurde, kommen die bekannten
  Mechanismen von IP zum tragen. Befindet sich der Rechner im eigenen
  Subnetz, wird direkt eine ARP-Anfrage nach der MAC-Adresse
  ausgel"ost. Andernfalls wird der entsprechende Router anhand der
  Routingtabelle herausgefunden und dann dessen MAC-Adresse per ARP
  festgestellt.

\end{description}

Die Protokolle ordnen sich folgenderma"sen ein:

\begin{figure}[ht]
\[\begin{pspicture}(12,6)
\psframe(3,0)(9,1)
\rput(6,0.5){Hardware}
\psframe(3,1)(5,3)
\rput(4,2){TCP/IP}
\psframe(5,1)(7,3)
\rput(6,2){NetBEUI}
\psframe(7,1)(9,2)
\rput(8,1.5){IPX}
\psframe(7,2)(9,3)
\rput(8,2.5){NWLink}
\psframe(3,3)(9,4)
\rput(6,3.5){{\bfseries NetBIOS}}
\psframe(0,4)(2,5)
\rput(1,4.5){ping}
\psline(0,4)(3,3)
\psline(2,4)(5,3)
\psframe(10,3)(12,4)
\rput(11,3.5){NWClient}
\psline(7,2)(10,3)
\psline(9,2)(12,3)
\psframe(3,4)(6,5)
\rput(4.5,4.5){SMB}
\psframe(3,5)(6,6)
\rput(4.5,5.5){Datei, Druck}
\psframe(6,4)(9,6)
\rput(7.5,5.5){Andere}
\rput(7.5,5){NetBIOS-}
\rput(7.5,4.5){Anwendungen}
\end{pspicture}\]
\caption{Protokollstapel}
\label{protokollstapel}
\end{figure}

In dieser Grafik steht das Programm \prog{ping} f"ur beliebige
Programme, die direkt auf TCP/IP aufsetzen. Dies gilt beispielsweise
f"ur alle WWW-Browser und f"ur die Programme \prog{telnet} und
\prog{ftp}.

Man kann festhalten, da"s NetBEUI hier das einzige Protokoll ist, das
nicht "uber Routergrenzen hinweg verwendbar ist. Sowohl IPX als auch
IP sind f"ur den Einsatz in Weitverkehrsnetzen entworfen worden und
k"onnen folglich mit Routern umgehen.

Samba ist ausschlie"slich in der Lage, NetBIOS "uber TCP/IP zu
benutzen. Daher werden die anderen Protokolle ab hier ignoriert.

\section{Bestandteile von Samba}

Das Programmpaket Samba besteht aus mehreren Programmen, von denen
einige der Serverseite und andere der Clientseite zugeordnet werden
k"onnen.

Die Servertools:

\begin{description}
  
\item[smbd] ist der zentrale Serverproze"s, der f"ur die eigentlichen
  Datei- und Druckdienste zust"andig ist. Sie werden mehrere
  \prog{smbd}s im System finden. Einer dieser Prozesse lauscht auf dem
  TCP-Port 139, und nimmt neue Verbindungen entgegen. Jede neue
  Verbindung st"o"st einen neuen Proze"s \prog{smbd} an. Wenn Sie
  einen Client vom Sambaserver trennen wollen, m"ussen Sie nur mit
  \prog{smbstatus} die Proze"snummer des zust"andigen \prog{smbd}
  erfragen, und diesen einen Proze"s t"oten.
  
  Samba ist im Hauptspeicherverbrauch recht sparsam. Jeder
  \emph{aktive} Client ben"otigt etwa 1 MB Hauptspeicher auf dem
  Server. Clients, die gerade nicht aktiv Dateien mit dem Sambaserver
  austauschen, ben"otigen praktisch "uberhaupt keine Resourcen. Viel
  Hauptspeicher kann von Samba selbstverst"andlich gut als Cache
  genutzt werden.
  
\item[nmbd] ist f"ur die NetBIOS Namens- und Datagrammdienste
  zust"andig. Dieser Proze"s reserviert beim Start von Samba die
  entsprechenden NetBIOS-Namen, er ist WINS-Server und f"ur den
  Computersuchdienst zust"andig.
  
\item[testparm] Mit diesem Programm kann man die \datei{smb.conf} auf
  syntaktische Korrektheit pr"ufen. Das Programm liest die
  Konfigurationsdatei ein und gibt Fehlermeldungen aus, sofern es
  unbekannte Parameter findet.
  
\item[smbpasswd] wird zur Pflege der verschl"usselten Pa"sw"orter auf
  Serverseite verwendet. Wie dies funktioniert, wird im Kapitel
  \ref{passwoerter} erkl"art.

\end{description}

Die Clients:

\begin{description}
  
\item[smbclient:] Mit dem Programm \prog{smbclient} kann man auf
  Freigaben von NT-Rechnern zugreifen. Man kann auf von NT zur
  Verf"ugung gestellten Druckern drucken und man kann NT-Freigaben in
  tar-Dateien sichern.  Weiterhin wird mit \prog{smbclient} die Liste
  der Server im Netz erfragt, analog zu der Netzwerkumgebung unter
  Windows.
  
\item[nmblookup] ist ein Diagnosewerkzeug f"ur die
  NetBIOS-Namensaufl"osung. Wenn zwei Computer mit Windows sich
  nicht finden k"onnen, kann man mit \prog{nmblookup} deren Versuche,
  sich gegenseitig zu finden, genau nachstellen. Ebenso k"onnen
  WINS-Server befragt werden und ein NetBIOS Node Status abgefragt
  werden. Das entsprechende Programm auf Seiten von Windows ist das
  Kommandozeilenprogramm \prog{nbtstat}.

\end{description}

Auf der Serverseite finden sich noch weitere Komponenten:

\begin{description}
  
\item[smb.conf:] Die zentrale Konfigurationsdatei von Samba. Ist Samba
  als fester Systembestandteil installiert, findet sie sich in der
  Regel unter \datei{/etc/smb.conf}. Ist Samba selbst compiliert,
  liegt sie h"aufig unter \datei{/usr/local/samba/lib/smb.conf}.
  
\item[/var/lock/samba:] Samba ben"otigt ein Verzeichnis, in dem es
  tempor"are Lockdateien und Datenbanken ablegen kann. Wird Samba ohne
  besondere Optionen selbst compiliert, liegt dies Verzeichnis unter
  \datei{/usr/local/samba/var}.
  
\item[/etc/smbpasswd] ist die Pa"swortdatenbank von Samba, sofern mit
  verschl"usselten Pa"s\-w"ortern gearbeitet wird.
  \datei{/usr/local/samba/private/} ist das Standardverzeichnis f"ur
  diese Datei.

\end{description}

\section{NetBIOS-Konfiguration mit Samba}

Als erstes soll eine minimale Konfiguration von Samba erreicht werden,
mit der jeder Rechner in der Netzwerkumgebung zu sehen ist. Dazu
sollte die Datei \datei{smb.conf} folgenderma"sen aussehen:

\begin{verbatim}
[global]
workgroup = arbeitsgruppe
interfaces = <IP-Adresse>/<Netzmaske>
\end{verbatim}

\label{aufbau-smb.conf}
Der grunds"atzliche Aufbau der \datei{smb.conf} gleicht dem Aufbau der
.INI-Dateien von Windows 3. Die Datei ist in mehrere Abschnitte
unterteilt, die jeweils durch einen Abschnittsnamen eingeleitet
werden. Dieser Abschnittsname selbst wird in eckige Klammern gesetzt.
Der Inhalt jedes Abschnitts besteht nun aus Parameterzuweisungen. Im
Beispiel gibt es nur den Abschnitt \param{global}. In diesem werden
Festlegungen getroffen, die den Server als ganzes betreffen. Wenn
sp"ater Freigaben erstellt werden, geschieht dies durch Anlegen von
weiteren Abschnitten.

Mit dem Parameter \param{workgroup =} wird die Arbeitsgruppe
festgelegt, in der sich der Server befinden soll.

Der Parameter \label{interfaces}\param{interfaces =} ist einer der
wichtigsten Parameter der Sambakonfiguration. Er ist deshalb so
wichtig, weil damit das Funktionieren des NetBIOS-Systems innerhalb
von Samba garantiert wird.  Sp"ater wird deutlich werden, da"s gro"se
Teile der Kommunikation auf Broadcasts basieren. \prog{ifconfig
  <interface>} unter Unix, oder unter Linux speziell \prog{ifconfig
  eth0} gibt sowohl die IP-Adresse der Ethernetkarte als auch die dort
gesetzte Broadcastadresse als Ausgabe. Der Parameter \param{interfaces
  =} weist Samba an, diese und keine andere Schnittstelle zu nutzen.
Dar"uberhinaus ist Samba nun in der Lage, die Broadcastadresse, die
auf dieser Schnittstelle g"ultig ist, zu bestimmen. Theoretisch
k"onnte man die Broadcastadresse selbst"andig herausfinden, aber es
gibt keinen portablen Weg, dies "uber Systemgrenzen hinweg zu tun. Das
sicherste ist, Samba direkt "uber die Broadcastadresse zu informieren.

Mit diesen beiden Einstellungen wird man direkt den Sambarechner in
der Netzwerkumgebung sehen. Zur Vereinfachung sollten noch zwei
weitere Parameter gesetzt werden, die sp"ater erkl"art werden. Die
vollst"andige \datei{smb.conf} sieht also folgenderma"sen
aus:\footnote{Auf einem der Rechner sollte zus"atzlich \param{os level
    = 67} und \param{preferred master = yes} im Abschnitt 
    \param{[global]} der /etc/smb.conf gesetzt sein.}

\begin{verbatim}
[global]
workgroup = arbeitsgruppe
interfaces = <IP-Adresse>/<Netzmaske>
security = share
encrypt passwords = yes
\end{verbatim}

Mit dieser Konfiguration kann Samba gestartet werden. Unter SuSE Linux
geschieht dies mit dem Aufruf:

\begin{verbatim}
rcsmb start
\end{verbatim}

Damit Samba beim n"achsten Hochfahren automatisch gestartet wird,
sollte die Variable \texttt{START\_SMB} in der Datei
\datei{/etc/rc.config} auf \texttt{yes} gesetzt werden. Es mu"s
letztlich nur erreicht werden, da"s sowohl der \prog{nmbd} als auch
der \prog{smbd} mit dem Parameter \texttt{-D} gestartet werden.

Es ist denkbar, den Aufruf beider Programme durch den \prog{inetd}
durchf"uhren zu lassen. Bei Samba ist dies jedoch nicht sinnvoll.
Insbesondere der \prog{nmbd} mu"s auf jeden Fall beim Start des
Systems hochfahren, da dieser im NetBIOS-System Namen f"ur sich
reservieren mu"s. W"urde er erst bei der ersten Anfrage gestartet,
h"atten Windowsrechner keine M"oglichkeit, den Sambarechner zu finden.
Au"serdem wird sich der \prog{nmbd} nicht wieder beenden, sobald er
einmal gestartet wurde. Der \prog{smbd} k"onnte durch den \prog{inetd}
gestartet werden. Jedoch ist der Resourcenbedarf nicht so hoch, da"s
die erh"ohte Startzeit damit gerechtfertigt werden k"onnte.

Nachdem alle Sambaserver gestartet wurden, sollten diese in der
Netzwerkumgebung der beteiligten Windowsrechner erscheinen.

\section{Namensaufl"osung per Broadcast}

Mit \prog{nmblookup} kann man direkt eine NetBIOS-Namensanfrage
ausl"osen.

\begin{quote}
\begin{small}\begin{verbatim}
vlendec@server:/home/vlendec> nmblookup server
querying server on 192.168.1.255
192.168.1.3 server<00>
vlendec@linux:/home/vlendec>
\end{verbatim}\end{small}
\end{quote}
      
An diesem Beispiel wird deutlich, wie die NetBIOS-Namensaufl"osung
normalerweise arbeitet. Es wird ein Paket an der Adresse 192.168.1.255
versendet, die Broadcastadresse im lokalen Subnetz. Um
NetBIOS-Namensanfragen zu erm"oglichen, mu"s Samba in der Lage sein,
die Broadcastadresse herauszufinden, an die das Paket geschickt werden
soll.  \prog{nmblookup} entnimmt diese Adresse der Zeile
\param{interfaces =} der \datei{smb.conf}. F"ur Tests kann man
\prog{nmblookup} mit dem Parameter -B anweisen, die Anfragen an eine
andere Broadcastadresse zu versenden.

\begin{quote}
\begin{small}\begin{verbatim}
vlendec@server:/home/vlendec> nmblookup -B 192.168.1.31 server
querying server on 192.168.1.31
name_query failed to find name server
vlendec@linux:/home/vlendec>
\end{verbatim}\end{small}
\end{quote}

In diesem Beispiel wurde die Broadcastadresse auf 192.168.1.31
gesetzt. Diese Broadcastadresse gilt in Subnetz 192.168.1.0/27. Jedoch
f"uhlte sich der \prog{nmbd}, der f"ur diesen Namen verantwortlich
ist, nicht angesprochen. Folglich hat er nicht auf diese Namensanfrage
geantwortet.
      
Unter Windows kann man die Namensanfrage so isoliert nicht ausl"osen,
man mu"s eine Verbindung aufbauen. Windows unterh"alt einen Cache, in
dem erfolgreiche Anfragen zwischengespeichert werden. Diesen kann man
sich mit \prog{nbtstat -c} anzeigen und mit \prog{nbtstat -R} l"oschen.
Man kann eine Anfrage erzwingen, indem man mit leerem Namenscache eine
Verbindung aufbaut, beispielsweise durch ein \prog{net view
  \symbol{'134}\symbol{'134}samba}.

Die Fehlermeldung, wenn eine NetBIOS-Namensanfrage fehlschl"agt,
lautet im GUI: "`Der Netzwerkpfad wurde nicht gefunden"'. Auf der
Kommandozeile kommt noch die Fehlermeldung 53 dazu.

Mit \prog{nmblookup} kann man sich zus"atzlich die von einem Rechner
reservierten Namen ausgeben lassen. Die entsprechende Operation nennt
sich \defin{Node Status Request} und wird durch den Parameter \prog{-A
  <IP-Adresse>} ausgel"ost. Die Ausgabe eines solchen Node Status
Request zeigt, da"s ein Rechner f"ur sich nicht nur einen einzigen
Namen reserviert, sondern gleich mehrere.

Zun"achst gibt es die Einzelnamen, zum Beispiel den Computernamen
selbst.  F"ur diese gilt die Regel, da"s sie nur ein einziges Mal im
gesamten Netz auftauchen d"urfen. Sie werden reserviert und stehen dem
entsprechenden Rechner dann exklusiv zur Verf"ugung. Daneben gibt es
die Gruppennamen, die im Node Status Request durch \texttt{<GROUP>}
markiert sind. Diese kann es mehrfach im Netz geben. Die Gruppennamen
sind insbesondere als Ziele f"ur NetBIOS-Datagramme interessant.
Beispielsweise reserviert jeder Teilnehmer an einer Arbeitsgruppe den
NetBIOS-Gruppennamen \nbname{arbeitsgruppe<00>}. Damit kann ein
Rechner mit einem einzigen verschickten Datagramm an diesen Namen
s"amtliche Rechner in dieser Arbeitsgruppe erreichen.

Zus"atzlich f"allt auf, da"s beispielsweise der Computername selbst
als Einzelnamen mehrfach reserviert ist. Hier kommen die
unterschiedlichen Namenstypen ins Spiel. Das 16. Byte eines
NetBIOS-Namens ist f"ur ein Typfeld reserviert. So sind
unterschiedliche Anwendungen auf einem Rechner in der Lage, sich Namen
zu reservieren, ohne sich gegenseitig zu st"oren.

Zun"achst die Einzelnamen, die h"aufig auftauchen:

\begin{description}

\item[computername$<$00$>$] Hiermit tut der Rechner einfach seine
Existenz kund. Wenn ein Rechner auf Resourcen anderer Rechner zugreift,
wird als Clientname dieser Name benutzt.

\item[computername$<$20$>$] Dieser Name wird f"ur den Serverdienst
reserviert. Wenn ein Rechner als Datei- oder Druckserver angesprochen
werden soll, dann wird eine Verbindung zu diesem NetBIOS-Namen aufgebaut.

\item[computername$<$03$>$] Unter diesem Namen meldet sich der
Nachrichtendienst des Rechners an. Kurze Meldungen, die unter Windows
NT mit dem Kommando \prog{net send} abgesetzt werden, und unter
Windows 95 mit dem Programm Winpopup verschickt werden, kann der
Rechner damit empfangen und am Bildschirm anzeigen.

\item[arbeitsgruppe$<$1d$>$] Dieser Rechner ist der sogenannte
  \defin{Lokale Master Browser}, der die Liste s"amtlicher Rechner in
  der Netzwerkumgebung pflegt.
  
\item[arbeitsgruppe$<$1b$>$] Dieser Rechner ist der \defin{Domain
    Master Browser}, der "uber Subnetzgrenzen hinweg f"ur die
  Netzwerkumgebung zust"andig ist.

\end{description}

Einige Gruppennamen werden ebenfalls reserviert:

\begin{description}
  
\item[arbeitsgruppe$<$00$>$] Ein Rechner verk"undet hiermit seine
  Zugeh"origkeit zu einer Arbeitsgruppe. Beispielsweise k"onnen
  Winpopup-Meldungen an eine ganze Arbeitsgruppe versendet werden.
  Dies geschieht per Datagramm an diesen Namen.
  
\item[arbeitsgruppe$<$1e$>$] Wahlen zum Lokalen Master Browser werden
  "uber diesen Namen abgewickelt. Siehe hierzu Kapitel \ref{netzwerkumgebung}.

\end{description}

\section{Netzwerkumgebung}
\label{netzwerkumgebung}

Die \defin{Netzwerkumgebung} ist einer der instabileren Aspekte von
Windows. Hiermit kann man sich, sofern alles funktioniert, alle
Rechner in einer Arbeitsgruppe anzeigen lassen. Dabei dauert es
mitunter geraume Zeit, bis ein Rechner in einer Anzeige erscheint, und
es dauert unter Umst"anden noch l"anger, bis er wieder verschwindet.

Eine naive Implementation k"onnte funktionieren, indem jeder Rechner,
der Serverdienste anbietet, dieses regelm"a"sig per Broadcast im Netz
mitteilt. Ein solches Vorgehen hat jedoch mehrere Nachteile. Erstens
w"urde die Last im Netz mit jedem zus"atzlichen Rechner stark
ansteigen. Zweitens mu"s jeder Rechner, der die Netzwerkumgebung anzeigen
will, relativ komplexe Software laufen lassen. Und drittens scheitert dieses
Schema auf jeden Fall an Subnetzgrenzen, die f"ur Broadcasts eine
Grenze darstellen. Aus diesen Gr"unden ist man einen anderen Weg
gegangen.

Der \defin{Lokale Master Browser} (im folgenden auch LMB genannt) ist
ein Rechner, der im Netz die Netzwerkumgebung pflegt. Dieser Rechner
wird nirgendwo zentral bestimmt, sondern er wird gew"ahlt. Diese Wahl
findet immer dann statt, wenn einer der beteiligten Rechner
feststellt, da"s es im Moment keinen solchen Lokalen Master Browser
gibt.  Beispielsweise kann der Explorer von Windows eine solche Wahl
ansto"sen. Wenn Windows 95 die geschwenkte Taschenlampe anzeigt, wird
der LMB gesucht. Ist keiner vorhanden, wird eine Wahl angesto"sen.

Die Wahl erfolgt mit Datagrammen an den Gruppennamen
\nbname{arbeitsgruppe<1e>}. Ein Rechner verschickt ein Datagramm an
diesen Namen. Jeder Rechner, der diesen Namen reserviert hat, h"ort
dieses Datagramm und entscheidet, wie er selbst vorgehen soll.  In dem
Datagramm sind verschiedene Kriterien zur Wahl enthalten,
beispielsweise das Betriebssystem des versendenden Rechners.

Empf"angt beispielsweise eine Windows NT Workstation ein Paket von
einem Windows NT Server, so entscheidet sie, da"s sie die Wahl
verloren hat. Damit wird sie selbst nicht mehr aktiv. Kommt dieses
Paket jedoch von einem Windows 95 Rechner, so h"alt sie sich selbst
f"ur geeigneter, den Lokalen Master Browser zu "ubernehmen. Dann wird
sie selbst ein solches Wahlpaket mit ihren Parametern versenden.  Der
Windows 95 Rechner empf"angt dies, und sieht, da"s er verloren hat.
Auf diese Weise schaukelt sich die Wahl hoch, bis der "`beste"'
Rechner die Wahl gewinnt.

Wenn es nun mehrere Windows NT Workstations im Netz g"abe, dann
w"are die Wahl unentschieden. An dieser Stelle kommt die \emph{Uptime}
der Rechner ins Spiel. Der Rechner, der am l"angsten l"auft, gewinnt
die Wahl. Nun kann es sein, da"s nach einem Stromausfall zwei Rechner
genau die gleiche Uptime haben. Dann kommt als letztes und eindeutiges
Entscheidungskriterium der NetBIOS-Name des Rechners zum Zug. Der
alphabetisch vorne stehende Rechner gewinnt. Mit diesen drei Kriterien
ist eine eindeutige Wahl gesichert.

Samba ordnet sich in der Standardeinstellung zwischen Windows 95 und
Windows NT ein, das hei"st, gegen Windows 95 gewinnt Samba die Wahl,
"uberl"a"st jedoch Windows NT Rechnern den Lokalen Master Browser.

Drei Parameter in der \datei{smb.conf} bestimmen das Verhalten von
Samba in der Wahl zum Lokalen Master Browser:

\begin{description}
  
\item[\param{os level}] Damit wird die Einordnung von Samba in die
  unterschiedlichen Betriebssysteme geregelt. Diese haben f"ur die
  Betriebssystemstufe folgende Werte:

\[\begin{tabular}{|l|r|}
\hline
Windows for Workgroups & 0 \\
\hline
Windows 95/98 & 1 \\
\hline
Windows NT Workstation & 16 \\
\hline
Windows NT Server & 32 \\
\hline
\end{tabular}\]

Diese Werte sind nicht als fest anzusehen. Wenn ein neues Service Pack
f"ur ein Betriebssystem herausgegeben wird, ist es m"oglich, da"s in
der Software f"ur den Lokalen Master Browser Fehler bereinigt wurden.
Dann ist es sinnvoll, da"s diese neue Software die Rolle des LMB
"ubernimmt. Der einfachste Weg ist, den \param{os level} einfach
hochzusetzen. Samba hat hier einen Vorgabewert von 20.

Der Parameter \param{os level} kann Werte von 0 bis 255 annehmen.
Setzt man ihn auf 255, wird nach einer erfolgreichen Wahl niemand mehr
Local Master Browser werden k"onnen.

\item[\param{local master}] M"ochte man auf keinen Fall den LMB auf
  einem Sambarechner haben, so setzt man den Parameter \param{local
    master = no}. Dann nimmt Samba an keiner Wahl teil.
  
\item[\param{preferred master}] Mit der Standardeinstellung
  \param{preferred master = no} sucht Samba beim Start nach
  einem LMB. Findet er einen, meldet er sich dort.  Findet er keinen
  LMB, bleibt Samba passiv. Jemand anders mu"s eine Wahl ansto"sen.
  Wenn dann eine Wahl stattfindet, nimmt Samba teil und ordnet sich
  anhand seines \param{os level} ein. Wenn man sichergehen m"ochte,
  da"s Samba auf jeden Fall nach dem Start den LMB "ubernimmt, dann
  mu"s man den \param{os level} hoch genug setzen, und den Parameter
  \param{preferred master = yes} setzen.  Damit wird Samba beim Start
  des \prog{nmbd} auf jeden Fall eine Wahl ansto"sen und sie dann
  unter Umst"anden gewinnen.

\end{description}

Mit den Einstellungen

\begin{verbatim}
[global]
os level = 66
preferred master = yes
\end{verbatim}

\noindent
kann man sicher sein, da"s der Sambarechner immer den LMB innehat. Es
sei denn, ein anderer Administrator von Samba kommt auf die Idee,
einen noch h"oheren Wert f"ur den \param{os level} zu benutzen.

Ein Primary Domain Controller kann unter Umst"anden erheblich gest"ort
werden, wenn er in seinem Subnetz nicht der LMB ist.

\section{NetBIOS "uber Subnetzgrenzen}

\newcommand{\computer}[2]{%
  \rput[t](0,0){%
    \begin{pspicture}(2,2)
      \psframe(0,0.5)(2,1.5)
      \psline(1,1.5)(1,2)
      \rput(1,1){\texttt{#1}}
      \rput[b](1,0.2){{\footnotesize IP: #2}}
    \end{pspicture}}}
\newcommand{\network}[1]{%
  \rput[l](0,0){%
    \begin{pspicture}(#1,0.6)
      \psline(0,0)(0,0.6)
      \psline(0,0.3)(#1,0.3)
      \psline(#1,0)(#1,0.6)
    \end{pspicture}}}
\newcommand{\routednet}{%
\rput[lb](0,0){%
\begin{pspicture}(10,5.5)
\rput(0,5){\network{7}}
\rput(2,5){\computer{WKS}{192.168.1.5}}
\rput(3,2){\network{7}}
\rput(8,2){\computer{SERVER}{192.168.2.8}}
\rput(5.5,3.75){\psframe(-1,-0.25)(1,0.25)}
\rput(5.5,3.75){{\footnotesize 192.168.1.1}}
\rput(5.5,3.25){\psframe(-1,-0.25)(1,0.25)}
\rput(5.5,3.25){{\footnotesize 192.168.2.1}}
\psline(5.5,4)(5.5,5)
\psline(5.5,2)(5.5,3)
\end{pspicture}}}

Wird die Namensreservierung und -aufl"osung ausschlie"slich per
Broadcast durchgef"uhrt, kann man Rechner, die hinter Routern liegen,
nicht erreichen. Broadcasts verbleiben in den Subnetzen, in denen sie
ausgesendet wurden.

\begin{figure}[ht]\[
\begin{pspicture}(10,6)
\rput(0,0){\routednet}
\psline{<-}(0,5.5)(2.7,5.5)
\psline{->}(4.3,5.5)(7,5.5)
\rput(3.5,5.5){\texttt{SERVER?}}
\end{pspicture}\]
\caption{Namensanfrage per Broadcast}
\label{broadcastanfrage}
\end{figure}

In der dargestellten Situation sind zwei Netze "uber einen Router
verbunden. Jeder der beiden Rechner reserviert seinen Namen in dem ihm
zugeordneten Subnetz. Die Workstation \nbname{WKS} schickt ihre
Reservierungen per Broadcast an 192.168.1.255, und der Server
\nbname{SERVER} wird seinen Namen auf 192.168.2.255 reservieren. Der
Router zwischen beiden bekommt diese Reservierungen zwar mit, wird sie
aber nicht in das jeweils andere Subnetz weiterleiten. Wenn nun
\nbname{WKS} ihren Server \nbname{SERVER} sucht, geschieht dies
ebenfalls per Broadcast an 192.168.1.255. Diese Anfrage bleibt wie
dargestellt im oberen Subnetz und erreicht \nbname{SERVER} gar nicht,
so da"s dieser auch nicht antworten kann.

Der einfachste Weg, die Namensaufl"osung "uber Subnetzgrenzen hinweg
zu realisieren, geht "uber eine statische Tabelle. Unter Windows
liegt diese in der Datei \datei{LMHOSTS}. Sie liegt abh"angig von der
Windowsversion in unterschiedlichen Verzeichnissen und l"a"st sich am
einfachsten mit der Suchfunktion des Desktops finden. Diese Datei ist
"ahnlich aufgebaut wie die Datei \datei{/etc/hosts} unter Unix. Ein
Beispieleintrag ist der folgende:

\verb|192.168.1.5 samba|

Die Eintr"age in der \datei{LMHOSTS} k"onnen durch den Zusatz
\texttt{\#PRE} erg"anzt werden. Dieser Zusatz legt fest, in welcher
Reihenfolge die Namensaufl"osung vorgenommen wird. Ist kein
\texttt{\#PRE} vorhanden, so wird zun"achst eine konventionelle
Namensaufl"osung per Broadcast versucht. Erst, wenn diese
fehlschl"agt, wird in der \datei{LMHOSTS} nachgeschaut. Ist der Zusatz
vorhanden, so wird ohne Namensaufl"osung direkt der Wert in der
\datei{LMHOSTS} verwendet.

Die zweite M"oglichkeit, das Problem zu l"osen, ist eine zentrale
Datei \datei{LMHOSTS}. Dazu gibt es den WINS-Server. Ein solcher Server
ist ein Rechner, bei dem sich jede Applikation im Netz mit ihren Namen
anmeldet. Die IP-Adresse dieses Servers mu"s jedem Rechner mitgeteilt
werden. Bei Windows geschieht dies in den Eigenschaften des TCP/IP
Protokolls im Reiter WINS-Adresse. Setzt man DHCP-Server ein, kann man
ebenfalls den WINS-Server festlegen. Samba bekommt die Adresse mit dem
Parameter \param{wins server = <ip-adresse>} im Abschnitt
\param{[global]} der \datei{smb.conf} mitgeteilt. Sobald ein Client
die IP-Adresse des WINS Servers kennt, ist es v"ollig gleichg"ultig,
ob sich dieser im gleichen Subnetz befindet oder nicht.

Die Namensreservierung erfolgt nicht mehr per Broadcast, sondern mit
einem gerichteten UDP-Paket an den WINS-Server.  Gerichtete Pakete
leitet der Router wie jedes andere Paket an den WINS-Server weiter.
Dieser sieht in seiner Tabelle nach, ob der Name bereits reserviert
ist. Ist das nicht der Fall, so wird er spontan eine Best"atigung der
Reservierung zur"uckschicken. Diese Reservierung gilt nun f"ur eine
bestimmte Zeit und mu"s rechtzeitig erneuert werden.

Ist der Name bereits reserviert, wird der WINS-Server den bisherigen
Besitzer befragen, ob er den Namen noch ben"otigt. Bekommt er keine
Antwort, wird er dem neuen Besitzer ebenfalls eine Best"atigung
schicken. M"ochte der alte Besitzer den Namen noch verwenden, so wird
der Anfragende eine Ablehnung der Reservierung erhalten. Diese
Nachfrage ist notwendig, um einem abgest"urzten Rechner das spontane
Booten zu erm"oglichen, da bei einem Absturz keine Freigabe der
Namensreservierung erfolgen kann.

Die Namensanfrage, die in Abbildung \ref{broadcastanfrage} den Server
nicht erreichte, weil der Router keine Broadcasts weitergibt, wird nun
direkt an den WINS-Server gerichtet, der in seiner Tabelle nachsehen
kann.

\begin{figure}[ht]\[
\begin{pspicture}(10,6)
\rput(0,0){\routednet}
\rput(4,2){\computer{WINS}{192.168.2.5}}
\psline[linestyle=dashed,linearc=0.25]
      {->}(2.5,4.5)(3.2,4.9)(5.3,4.9)(5.3,2)(4.5,1.5)
\rput(3.5,5.8){\texttt{SERVER?}}
\end{pspicture}\]
\caption{WINS-Anfrage}
\end{figure}

Samba kann ganz normal als WINS-Server konfiguriert werden, indem der
Parameter \param{wins support = yes} gesetzt wird. Ist diese Parameter
gesetzt, kann Samba nach einem Neustart bei allen Clients und allen
sonstigen Servern als WINS-Server eingetragen werden. Werden diese
dann neu gestartet, melden sie sich beim WINS Server an.

Wenn nun ein Rechner mit Samba als WINS Server konfiguriert ist, und
sich die anderen Rechner dort anmelden, werden diese in der Datei
\datei{/var/lock/samba/wins.dat} abgelegt. Der \prog{nmbd} pflegt
diese Datei dynamisch, je nach Reservierungen und Abmeldungen. Die
Datei \datei{wins.dat} wird in regelm"a"sigen Abst"anden geschrieben.
Wenn es notwendig sein sollte, den wirklich aktuellen Stand
unabh"angig von diesem Zeitintervall zu erhalten, so kann man dem
\prog{nmbd} das \prog{HANGUP}-Signal durch den Befehl \prog{killall
-HUP nmbd} senden. Au"serdem wird die \datei{wins.dat} beim Beenden
des \prog{nmbd} geschrieben.

Diese Datenbank wird auf Festplatte gehalten, damit die Daten einen
Neustart von Samba "uberleben. Jeder Rechner, der einen Namen f"ur
sich reserviert hat, hat diese Reservierung f"ur einen bestimmten
Zeitraum ausgesprochen. Wenn Samba jetzt neu gestartet werden sollte,
und dadurch die Datenbank verloren ginge, w"are der gesamte
NetBIOS-Namensraum nicht mehr verf"ugbar. Au"serdem kann ein WINS
Server die angeschlossenen Clients weder von sich aus finden, noch sie
darum bitten, sich erneut zu registrieren. Daher ist die WINS
Datenbank "uber Neustarts von Samba hinaus zu erhalten.

Die Anfrage, die die Workstation \nbname{WKS} absetzt, wird nun nicht
mehr per Broadcast gestellt, sondern mit einem gerichteten Paket an
den WINS-Server, bei dem sich alle Rechner angemeldet haben.

%\[\setlength{\unitlength}{1mm}
%\begin{picture}(100,60)(0,20)
%\put(0,0){\routednet}
%\put(30,75){\makebox(0,0)[l]{{\ttfamily\bfseries SERVER?}}}
%\curve(17,65, 20,72, 29,75)
%\tagcurve(40,75, 50,75, 57,65, 57,45, 45,38, 40,30, 30,20)
%\put(50,45){\circle*{1}}
%\put(40,40){\computer{WINS}{192.168.2.5}}
%\end{picture}\]

WINS hat gegen"uber der broadcastbasierten Namensreservierung einige
Vorteile. Namensreservierung per Broadcast erfolgt durch Wartezeiten.
Es wird die Reservierung angek"undigt, es wird gewartet, die
Reservierung wird erneut angek"undigt, und es wird wieder gewartet.
Dieses Spiel wiederholt sich mehrfach, bis der Rechner sicher sein
kann, da"s ein eventueller Vorbesitzer des Namens genug Zeit hatte,
sich zu beklagen. Beim Einsatz von WINS entfallen diese Wartezeiten,
da hier ein einziger Rechner s"amtliche reservierte Namen registriert
und in seiner Tabelle nachschauen kann. Daher ist die Reservierung per
NetBIOS deutlich schneller, und auch weniger netzbelastend. Selbst
wenn man also nur ein einziges Subnetz hat, sollte man zur Reduzierung
der Netzlast den Einsatz eines WINS-Servers in Erw"agung ziehen.

Zus"atzlich sei hier angemerkt, da"s es netzwerkweit nur einen
einzigen WINS-Server geben darf. Selbst wenn es unterschiedliche
Arbeitsgruppen oder Dom"anen gibt, darf es nicht mehr als einen
WINS-Server geben. Setzt man mehrere WINS-Server ein, hat man getrennte
Namensr"aume.  Rechner im einen Namensraum k"onnen mit Rechnern, die
an einem anderen WINS-Server angeschlossen sind, nicht kommunizieren.
Es kann trotzdem zu Kollisionen kommen, da Windowsrechner bestimmte
Namen unabh"angig von WINS-Einstellungen ausschlie"slich per Broadcast
reservieren. Unter Windows NT kann man mehrere WINS-Server einsetzen,
die sich gegenseitig abstimmen. Diese WINS-Server treten gegen"uber
den Clients als ein einziger Server auf, unabh"angig von ihrer Anzahl.

Die Abfrage eines WINS Servers durch \prog{nmblookup} erfolgt
beispielhaft folgenderma"sen:

\begin{verbatim}
nmblookup -R -U 192.168.1.5 samba
\end{verbatim}

Hiermit wird der WINS Server, der auf dem Rechner 192.168.1.5 liegt,
nach dem Namen \nbname{samba} befragt.

Samba kennt zwei zus"atzliche Funktionen, die es im Zusammenhang mit
WINS interessant machen. Einerseits kann Samba als WINS Proxy
eingerichtet werden, indem \param{wins proxy = yes} gesetzt wird. Ist
diese Einstellung aktiv, dann wird Samba s"amtliche Reservierungen und
Anfragen, die es aus dem lokalen Netz per Broadcast erh"alt, an den
mit \prog{wins server =} konfigurierten WINS Server weiterleiten.
Damit kann man einen Samba-Server in ein Subnetz stellen. S"amtliche
Rechner in diesem Netz werden nun beim WINS angemeldet, und nutzen
diesen auch. Dies ist auch dann der Fall, wenn sie entweder selbst
keinen WINS Server ansprechen k"onnen oder nicht daf"ur konfiguriert
sind. Man sollte jedoch in jedem Fall eine echte Konfiguration des
WINS Servers auf dem Client vorziehen. Ein WINS Proxy kann nur eine
Behelfsl"osung sein, da man sich damit auf einen weiteren
Rechner verl"a"st.

Unter Windows kann man statische Eintr"age im WINS vornehmen. Dies
geht so direkt unter Samba nicht. Man mu"s hierzu den Parameter
\param{dns proxy = yes} auf dem WINS Server setzen. Empf"angt der WINS
Server nun eine Anfrage, die er nicht aus seiner Datenbank beantworten
kann, wird er eine ganz normale Unix-Hostnamenanfrage machen.
Typischerweise wird er in der \datei{/etc/hosts} nachschauen und
danach dann das DNS anhand der Konfiguration in der Datei
\datei{/etc/resolv.conf} befragen. Damit ist es durch einen Eintrag
auf dem WINS Server m"oglich, den gesamten DNS-Namensraum auch in der
NetBIOS-Namenswelt zur Verf"ugung zu stellen.

\section{Netzwerkumgebung "uber Subnetzgrenzen}

So, wie die Netzwerkumgebung in Abschnitt \ref{netzwerkumgebung}
betrachtet wurde, funktioniert sie nur in einem einzigen lokalen
Netz. Die Wahl zum lokalen Master Browser funktioniert per Datagramm,
das an den Namen \nbname{arbeitsgruppe<1e>} gesendet
wird. \nbname{arbeitsgruppe<1e>} ist ein Gruppenname, der von mehreren
Rechnern reserviert sein kann. Das hei"st, da"s ein Datagramm an
diesen Namen mehrere Rechner erreichen mu"s. Dies geschieht bei
NetBIOS "uber TCP/IP mit einem UDP-Paket an die Broadcastadresse im
lokalen Netz. Allein hieraus ergibt sich, da"s es pro Arbeitsgruppe in
jedem Subnetz einen eigenen LMB geben mu"s. Jeder LMB bekommt aus
seinem Subnetz die Informationen "uber vorhandene Server.

Um diese Einschr"ankung zu umgehen, gibt es den Domain Master Browser
(DMB). Der DMB ist ein Rechner, der die Serverlisten von allen LMBs
einsammelt und auf Anforderung wieder herausgibt. Dabei sitzt der DMB
nur passiv da und wartet darauf, da"s sich ein LMB mit ihm
synchronisieren will. Es ist Aufgabe der LMBs, sich regelm"a"sig
danach zu erkundigen, wo der DMB sitzt, und mit diesem dann die
Serverlisten abzugleichen.

Die Vorg"ange werden am deutlichsten, wenn man ein Beispiel
betrachtet. Dieses Beispiel ist im wesentlichen der
Originaldokumentation von Samba aus der Datei \datei{BROWSING.txt}
entnommen.

\newcommand{\minicomputer}[1]{%
\begin{picture}(10,9)(5,9)
\put(0,0){\framebox(10,5){{\ttfamily #1}}}
\put(5,5){\line(0,1){4}}
\end{picture}}
\newcommand{\mininetz}[1]{%
\begin{picture}(62,12)
\put(10,10){\minicomputer{N#1A}}
\put(25,10){\minicomputer{N#1B}}
\put(40,10){\minicomputer{N#1C}}
\put(55,10){\minicomputer{N#1D}}
\put(3,10){\line(1,0){59}}
\put(3,8){\line(0,1){4}}
\put(62,8){\line(0,1){4}}
\end{picture}}

\begin{figure}[ht]
\[\setlength{\unitlength}{1.1mm}
\begin{picture}(120,60)(0,5)
\put(0,20){\mininetz{1}}
\put(25,19){\makebox(0,0){\textit{{\small DMB,LMB}}}}
\put(30,50){\mininetz{2}}
\put(85,49){\makebox(0,0){\textit{{\small WINS}}}}
\put(55,49){\makebox(0,0){\textit{{\small LMB}}}}
\put(50,5){\mininetz{3}}
\put(105,4){\makebox(0,0){\textit{{\small LMB}}}}
\put(48,48){\minicomputer{R1}}
\put(48,48){\line(0,1){12}}
\put(48,39){\line(0,-1){9}}
\put(77,48){\minicomputer{R2}}
\put(77,48){\line(0,1){12}}
\put(77,39){\line(0,-1){24}}
\end{picture}\]
\caption{Domain Master Browser}
\end{figure}

Dieses Netz besteht aus 3 Subnetzen (1,2,3), die durch 2 Router (R1
und R2) verbunden sind. Die Router lassen keine Broadcasts durch. Alle
Subnetze bestehen aus jeweils 4 Maschinen.  Nehmen wir der Einfachheit
halber an, da"s alle Maschinen in der gleichen Arbeitsgruppe
konfiguriert sind. Rechner \nbname{N1B} im Subnetz 1 ist als Domain
Master Browser konfiguriert. Das hei"st, da"s er die Browseliste f"ur
die ganze Arbeitsgruppe aufsammelt. Rechner \nbname{N2D} ist als WINS
Server konfiguriert und alle anderen Maschinen registrieren ihre
NetBIOS Namen dort.

Wenn alle diese Maschinen gebootet werden, werden in jedem der drei
Subnetze Wahlen um einen Local Master Browser abgehalten. Nehmen wir
an, im Subnetz 1 gewinnt \nbname{N1C}, im Subnetz 2 gewinnt
\nbname{N2B} und im Subnetz 3 gewinnt \nbname{N3D}. Diese Maschinen
sind als Local Master Browser in ihrem Subnetz bekannt.  Im Subnetz 1
liegen der LMB und der DMB auf der gleichen Maschine, was nicht der
Fall sein mu"s. Diese beiden Rollen sind vollst"andig unabh"angig
voneinander.

Alle Maschinen, die Serverdienste anzubieten haben, k"undigen dies per
Broadcast auf ihrem Subnetz an. Der Local Master Browser in jedem
Subnetz empf"angt diese Broadcasts und tr"agt alle Server in einer
Liste ein. Diese Liste von Eintr"agen ist die Basis f"ur die
Browseliste. In unserem Fall nehmen wir an, da"s alle Maschinen
Serverdienste anbieten, das hei"st, da"s alle Maschinen in der Liste
erscheinen.

F"ur jedes Subnetz wird der Local Master Browser als
\emph{ma"sgeblich} angesehen, und zwar f"ur alle Namen, die er per
lokalem Broadcast empf"angt. Broadcasts verlassen das Subnetz nicht,
und die Broadcasts im lokalen Subnetz werden als ma"sgeblich
angesehen. Daher wird dem Local Master Browser bei diesen Servern
geglaubt. Rechner, die sich in anderen Subnetzen befinden, und "uber
die der Local Master Browser von anderen Local Master Browsern
informiert wurde, werden als nicht ma"sgeblich angesehen.

An diesem Punkt sieht die Browse Liste folgenderma"sen aus: (dies sind
die Maschinen, die Sie in Ihrer Netzwerkumgebung sehen w"urden, wenn
Sie sie in einem bestimmten Subnetz ansehen)

\vspace{\baselineskip}
\[\begin{tabular}{|c|c|l|}
\hline
Netz & LMB &  Liste \\ \hline \hline
1 & \nbname{N1C} & \nbname{N1A}, \nbname{N1B}, \nbname{N1C}, \nbname{N1D}\\
\hline
2 & \nbname{N2B} & \nbname{N2A}, \nbname{N2B}, \nbname{N2C}, \nbname{N2D}\\
\hline
3 & \nbname{N3D} & \nbname{N3A}, \nbname{N3B}, \nbname{N3C}, \nbname{N3D}\\
\hline
\end{tabular}\]
\vspace{\baselineskip}

An diesem Punkt sind alle Subnetze vollst"andig separat, keine
Maschine wird in anderen Subnetzen gesehen. Die
Microsoft-Dokumentation spricht davon, da"s die Arbeitsgruppen in den
Subnetzen getrennt sind.

Sehen wir uns nun Subnetz 2 an. Sobald \nbname{N2B} der Local Master
Browser geworden ist, sucht er den Domain Master Browser, um mit ihm
die Browse Listen zu synchronisieren. Dies tut er, indem er den WINS
Server (\nbname{N2D}) nach der IP-Adresse fragt, die zum NetBIOS-Namen
\nbname{arbeitsgruppe<1B>} geh"ort. Diesen Namen hat der Domain Master
Browser (\nbname{N1C}) beim WINS Server f"ur sich beim booten
registriert.

\nbname{N2B} kennt nun den Domain Master Browser. Er k"undigt sich als
Local Master Browser f"ur Subnetz 2 bei ihm an. Dann synchronisiert
\nbname{N2B} sich mit \nbname{N2D}, indem er einen
NetServerEnum2-Aufruf abschickt. Der Domain Master Browser schickt
alle Server, die er kennt, zur"uck. Sobald der Domain Master Browser
die Ank"undigung von \nbname{N2B} als Lokaler Master Browser erhalten
hat, wird auch er sich mit dem Local Master Browser
synchronisieren. Nachdem beide Synchronisationen stattgefunden haben,
sehen die Browse Listen so aus:

\vspace{\baselineskip}
\[\begin{tabular}{|c|c|l|}
\hline
Netz & LMB &  Liste \\ \hline \hline
1 & \nbname{N1C} & \nbname{N1A}, \nbname{N1B}, \nbname{N1C}, \nbname{N1D}\\
  & & \nbname{N2A*}, \nbname{N2B*}, \nbname{N2C*}, \nbname{N2D*}\\
\hline
2 & \nbname{N2B} & \nbname{N2A}, \nbname{N2B}, \nbname{N2C}, \nbname{N2D}\\
& & \nbname{N1A*}, \nbname{N1B*}, \nbname{N1C*}, \nbname{N1D*}\\
\hline
3 & \nbname{N3D} & \nbname{N3A}, \nbname{N3B}, \nbname{N3C}, \nbname{N3D}\\
\hline
\end{tabular}\]
\vspace{\baselineskip}

Die mit * bezeichneten Eintr"age werden als nicht ma"sgeblich
angesehen, da sie von anderen Master Browsern erhalten wurden. F"ur
den Client macht dies jedoch keinen Unterschied. Nur der LMB darf
diese Eintr"age selbstverst"andlich beim n"achsten Abgleich nicht an
den DMB als seine eigenen zur"uckmelden.

Zu diesem Zeitpunkt werden Benutzer in den Subnetzen 1 und 2, die die
Netzwerkumgebung ansehen, die Server in beiden Subnetzen sehen,
Benutzer im Subnetz 3 sehen immer noch nur die Server in ihrem eigenen
Subnetz.

Der lokale Master Browser im Subnetz 3 (\nbname{N3D}) macht nun exakt
das gleiche wie \nbname{N2B}. Wenn er die Browse Listen mit dem Domain
Master Browser (\nbname{N1B}) abgeglichen hat, bekommt er sowohl die
Server in Subnetz 1, als auch die im Subnetz 2. Nachdem sich
\nbname{N3D} mit \nbname{N1C} synchronisiert hat und umgekehrt, sehen
die Browse Listen folgenderma"sen aus:

\vspace{\baselineskip}
\[\begin{tabular}{|c|c|l|}
\hline
Netz & LMB &  Liste \\ \hline \hline
1 & \nbname{N1C} & \nbname{N1A}, \nbname{N1B}, \nbname{N1C}, \nbname{N1D}\\
  & & \nbname{N2A*}, \nbname{N2B*}, \nbname{N2C*}, \nbname{N2D*}\\
  & & \nbname{N3A*}, \nbname{N3B*}, \nbname{N3C*}, \nbname{N3D*}\\
\hline
2 & \nbname{N2B} & \nbname{N2A}, \nbname{N2B}, \nbname{N2C}, \nbname{N2D}\\
  & & \nbname{N1A*}, \nbname{N1B*}, \nbname{N1C*}, \nbname{N1D*}\\
\hline
3 & \nbname{N3D} & \nbname{N3A}, \nbname{N3B}, \nbname{N3C}, \nbname{N3D}\\
  & & \nbname{N1A*}, \nbname{N1B*}, \nbname{N1C*}, \nbname{N1D*}\\
  & & \nbname{N2A*}, \nbname{N2B*}, \nbname{N2C*}, \nbname{N2D*}\\
\hline
\end{tabular}\]
\vspace{\baselineskip}

Jetzt sehen Benutzer in den Subnetzen 1 und 3 alle Server in allen
Subnetzen, Benutzer im Subnetz 2 sehen jedoch immer noch nur die
Server von Subnetz 1 und 2, nicht jedoch die im Subnetz 3.

Zum guten Schlu"s wird sich der lokale Master Browser im Subnetz 2
(\nbname{N2B}) erneut mit dem Domain Master Browser abstimmen, und die
fehlenden Servereintr"age bekommen. Endlich sehen die Browse Listen
als stabiler Zustand so aus:

\vspace{\baselineskip}
\[\begin{tabular}{|c|c|l|}
\hline
Netz & LMB &  Liste \\ \hline \hline
1 & \nbname{N1C} & \nbname{N1A}, \nbname{N1B}, \nbname{N1C}, \nbname{N1D}\\
  & & \nbname{N2A*}, \nbname{N2B*}, \nbname{N2C*}, \nbname{N2D*}\\
  & & \nbname{N3A*}, \nbname{N3B*}, \nbname{N3C*}, \nbname{N3D*}\\
\hline
2 & \nbname{N2B} & \nbname{N2A}, \nbname{N2B}, \nbname{N2C}, \nbname{N2D}\\
  & & \nbname{N1A*}, \nbname{N1B*}, \nbname{N1C*}, \nbname{N1D*}\\
  & & \nbname{N3A*}, \nbname{N3B*}, \nbname{N3C*}, \nbname{N3D*}\\
\hline
3 & \nbname{N3D} & \nbname{N3A}, \nbname{N3B}, \nbname{N3C}, \nbname{N3D}\\
  & & \nbname{N1A*}, \nbname{N1B*}, \nbname{N1C*}, \nbname{N1D*}\\
  & & \nbname{N2A*}, \nbname{N2B*}, \nbname{N2C*}, \nbname{N2D*}\\
\hline
\end{tabular}\]
\vspace{\baselineskip}

Synchronisationen zwischen dem Domain Master Browser und den Lokalen
Master Browsern wird weiterhin auftreten, aber dies sollte den
stabilen Zustand nur best"atigen.

Wenn Router R1 oder R2 ausfallen, wird das folgende passieren:

\begin{enumerate}
\item Namen der Computer auf beiden Seiten der nicht mehr erreichbaren
Subnetze werden f"ur 36 Minuten weiter in den Browse Listen gehalten,
so da"s sie in der Netzwerkumgebung weiterhin erscheinen.

\item Versuche, Verbindungen zu diesen Rechnern aufzubauen, werden
scheitern, aber die Namen werden nicht von den Browse Listen entfernt
werden.

\item Wenn ein Subnetz vom WINS Server getrennt wird, wird es nur noch
auf die lokalen Server zugreifen k"onnen, deren Namen mit lokaler
Broadcast NetBIOS-Namensaufl"osung aufgel"ost werden k"onnen. Das ist
vergleichbar mit der Situation, keinen Zugriff auf einen DNS Server
mehr zu haben.
\end{enumerate}

\section{Einfache Freigaben}

Der grunds"atzliche Aufbau der Datei \datei{smb.conf} wurde bereits
auf Seite (\pageref{aufbau-smb.conf}) erw"ahnt. Bis zu diesem Punkt
hat sich s"amtliche Konfiguration im Abschnitt \texttt{[global]}
abgespielt, der globale Servereinstellungen beinhaltet. Wenn der
Sambarechner nicht nur im Netz gesehen werden soll, sondern auch
sinnvolle Dinge tun soll, mu"s man Freigaben zur Verf"ugung stellen.
Dies tut man, indem man einfach einen neuen Abschnitt beginnt, dessen
Name gerade nicht \texttt{[global]} ist. Um eine Freigabe vollst"andig
zu machen, mu"s man mit dem Parameter \texttt{path} angeben, welches
Verzeichnis man freigeben m"ochte. Eine f"ur alle Zugriffe offene
Freigabe des Verzeichnisses \datei{/cdrom} erreicht man mit folgender
\datei{smb.conf}:

\begin{verbatim}
[global]
workgroup = arbeitsgruppe
interfaces = <IP-Adresse>/<Netzmaske>
security = share
encrypt passwords = yes

[cd]
path = /cdrom
guest ok = yes
\end{verbatim}

\noindent
Damit entsteht auf dem Server eine Freigabe namens \texttt{CD}, die
das Verzeichnis \datei{/cdrom} im Netz f"ur alle zum Lesen zur
Verf"ugung stellt.

\textbf{Achtung:} 
Es findet hier \emph{keine} "Uberpr"ufung der Zugriffsrechte statt. Um
diese "Uberpr"ufung zu erm"oglichen, sollte zun"achst einmal der
Aufbau einer Verbindung zu einer Freigabe genauer beleuchtet werden.

\section{SMB-Sitzungen}

Wird am Client eine Verbindung zu einer Freigabe auf einem SMB-Server
aufgebaut, so m"ussen mehrere Schritte durchlaufen werden.

\subsection*{NetBIOS-Namensaufl"osung}

Zu einem Rechnernamen mu"s eine IP-Adresse herausgefunden werden. Dies
wurde in den letzten Abschnitten eingehend behandelt.

\subsection*{TCP-Verbindung}

Wenn die IP-Adresse klar ist, wird eine TCP-Verbindung zu Port 139 des
Servers aufgebaut. Um vorhandene TCP-Verbindungen anzuzeigen, gibt es
sowohl auf Unix- als auch auf Windowsrechnern das Werkzeug
\prog{netstat}.

\subsection*{NetBIOS-Sitzung}

Auf einem Serverrechner arbeiten unter Umst"anden mehrere
Applikationen, die Namen f"ur sich reserviert haben. Diese sind alle
unter der IP-Adresse des Rechners und dem TCP-Protokoll auf Port 139
erreichbar. Anhand des TCP-Verbindungsaufbaus ist nicht klar, welche
Serverapplikation angesprochen werden soll. Die Unterscheidung wird
durch den Servernamen getroffen, der in der TCP-Verbindung als erstes
"ubertragen wird.

Da"s der Servername "ubertragen wird, kann man ganz einfach mit Hilfe
des Programms \prog{smbclient} sehen. Man versucht, sich die Liste der
Freigaben eines realen Windowsrechners geben zu lassen, indem man
folgendes aufruft:

\verb|smbclient -L smallwin|

Damit wird zun"achst eine NetBIOS-Namensanfrage ausgel"ost, und dann
eine Verbindung zum entsprechenden Server ausgel"ost. \prog{smbclient}
hat jedoch die M"oglichkeit, einen Server unter einem anderen Namen
anzusprechen, indem man

\verb|smbclient -L test -I ip-adresse|

\noindent
eingibt. \prog{smbclient} wird zun"achst versuchen, eine Verbindung
zum NetBIOS-Namen \texttt{test} aufzubauen, und zwar ohne da"s eine
NetBIOS-Namensanfrage ausgel"ost wird. Stattdessen wird die angegebene
IP-Adresse auf Port 139 direkt angesprochen, und der Name
\texttt{test} als Servername angegeben. Windows merkt, da"s das nicht
stimmen kann und verweigert den Verbindungsaufbau mit einer
Fehlermeldung. Erst im zweiten Versuch wird es \prog{smbclient}
gelingen, eine Verbindung aufzubauen, da diese Verbindung zum
allgemeinen Namen \texttt{*smbserver}\footnote{Das Protokoll wurde als
Antwort auf das WebNFS von SUN in Common Internet File System umbenannt.
Im Gegensatz zur Firma SUN, die tats"achlich das NFS-Protokoll verbessert
hat, hat sich Microsoft die Arbeit einfacher gemacht. Der Name
\texttt{*SMBSERVER} ist der einzige echte Unterschied, den CIFS von
seinem Urvater SMB unterscheidet. Mit Windows 2000 werden diese
NetBIOS-Namen beim Verbindungsaufbau gar komplett unterschlagen.
Daf"ur ist es aber notwendig, einen weiteren Port zu reservieren, und
zwar Port 445.} aufgebaut wird.

Auch der Clientname wird in der Verbindung "ubergeben. Dies testet man
am besten mit

\verb|smbclient //win/c\$ -n blafasel| 

\noindent und schaut sich
die Verbindungstabelle auf der Windowsmaschine mit \verb|nbtstat -s|
an.

Mit dem "ubergebenen Servernamen kann man sehr nette Tricks anstellen.
Man stelle sich vor, da"s einige Freigaben nur f"ur bestimmte
Clientrechner sichtbar sein sollen. Dies ist mit Bordmitteln von Samba
so nicht m"oglich. Man kann zwar mit dem Parameter \param{browseable}
festlegen, ob bestimmte Freigaben in der Netzwerkumgebung erscheinen.
Dieser Parameter hat aber zwei Nachteile.  Erstens sind die Freigaben nur
unsichtbar geworden, darauf zugreifen kann man immer noch. Zweitens kann man
Freigaben nur f"ur alle Rechner verstecken oder freigeben.

Samba bietet die Option, unter zwei oder mehreren verschiedenen Namen
in der Netzwerkumgebung zu erscheinen. Mit dem Parameter
\param{netbios name} gibt man einen Namen f"ur den Server an.
Zus"atzliche Namen kann man mit \param{netbios aliases} vergeben. Mit

\begin{verbatim}
netbios name = fichte
netbios aliases = birke eiche kiefer buche
\end{verbatim}

\noindent
handelt man sich einen ganzen Wald in der Netzwerkumgebung ein. Klickt
man auf die einzelnen Server, sieht man "uberall die gleichen
Freigaben und Zugriffsrechte. Nun kann man f"ur jeden dieser
virtuellen Rechner eine eigene Konfigurationsdatei anlegen.
Beispielsweise kann man sie \datei{/etc/smb.conf.birke},
\datei{/etc/smb.conf.eiche} und so weiter nennen. Die Datei
\datei{/etc/smb.conf} ist f"ur den Rechner \nbname{fichte} zust"andig
und enth"alt neben den Einstellungen f"ur \nbname{fichte} den
Parameter 

\param{config file = /etc/smb.conf.\%L}

\noindent Dabei steht
\param{\%L} f"ur den Servernamen, unter dem Samba angesprochen wird.
Wenn es eine passende Datei gibt, dann bewirkt der Parameter
\param{config file}, da"s die komplette Konfiguration neu eingelesen
wird. Existiert keine passende Datei, so wird der Parameter einfach
ignoriert. Um nun den Zugriff nur f"ur einzelne Clients zu erlauben,
kann bei den einzelnen virtuellen Servern mit den Parametern
\param{hosts allow} und \param{hosts deny} der Zugriff geregelt
werden.

\subsection*{Negotiate Protocol}

Die NetBIOS-Sitzung ist nun aufgebaut, und es k"onnen Daten
"ubermittelt werden. Innerhalb dieser NetBIOS-Sitzung wird eine
SMB-Sitzung schrittweise aufgebaut. SMB ist ein Protokoll, bei dem im
Prinzip der Client jede Aktion durch eine Anfrage anst"o"st, und der
Server diese beantwortet\footnote{Im Prinzip deshalb, da mit Oplocks
  auch der Server von sich aus aktiv werden kann.}.

SMB (Server Message Block) ist ein gewachsenes Protokoll. Es ist mit
den F"ahigkeiten der Betriebssysteme gewachsen, die damit arbeiten.
Zun"achst ist es entstanden, um die Dateisystemaufrufe der MS-DOS
Systemschnittstelle INT 0x21 auf das Netz zu verlagern. Mit einer
gewissen Weitsicht hat man jedoch vorausgesehen, da"s die Entwicklung
nicht bei MS-DOS stehen bleiben w"urde, sondern sich die
Dateisystemaufrufe "andern w"urden. Man hat im Protokoll also eine
M"oglichkeit vorgesehen, mit der unterschiedliche Protokollvarianten
ausgehandelt werden k"onnen. Die unterschiedlichen Protokolle
orientieren sich immer an den F"ahigkeiten der jeweiligen
Betriebssysteme. Beispielsweise wurde mit dem LAN Manager, der eine
Benutzerverwaltung besitzt, das Konzept des Benutzers im Protokoll
aufgenommen. OS/2 hat ein recht weitgehendes Konzept der
Druckerverwaltung, das entsprechend mit Protokollerweiterungen bedacht
wurde. Sogar f"ur XENIX gibt es einen eigenen Protokolldialekt, der
das Unix-Zugriffsrechtekonzept im SMB-Protokoll abbildet. Diese
Protokollvariante beherrscht nur leider kein moderner Client. Mit
Ausnahme des ausgestorbenen XENIX-Dialektes lassen sich die Protokolle
gut in eine Hierarchie einordnen. Sp"atere Protokolle beherrschen alle
Aspekte der vorherigen Varianten.

Die erste Anfrage, die der Client an den Server schickt, ist ein
\defin{Negotiate Protocol Request}. In dieser Anfrage schickt der
Client an den Server eine Liste der Protokollvarianten, die er
beherrscht. Der Server w"ahlt nun aus dieser Liste der Protokolle eins
aus, und schickt eine entsprechende Antwort zur"uck. Die verschiedenen
Protokolle bauen aufeinander auf. Daher kann man mit dem Parameter
\param{protocol} das h"ochste Protokoll festlegen, mit dem Samba
arbeiten soll.

In der Antwort auf diese erste Anfrage werden zwei weitere
Einstellungen verschickt, die Teile des weiteren Ablaufs festlegen.

Der Server entscheidet, ob er die Zugriffssteuerung auf Benutzer- oder
auf Freigabeebene regeln m"ochte. Damit wird festgelegt, zu welchem
Zeitpunkt der Benutzer ein Pa"swort liefern mu"s. Entweder kann es
beim direkt folgenden \defin{Session Setup} erfolgen, oder erst beim
\defin{Tree Connect} danach.

Der Parameter \param{security} legt fest, welche Art der
Zugriffssteuerung gew"ahlt wurde.  Mit \param{security = share} wird
die Freigabeebene eingestellt, \param{security = user} legt die
Clients auf die Benutzerebene fest.

Sichtbar wird diese Unterscheidung in der Windowswelt nur bei Windows
95 und Windows 98. Diese Betriebssysteme beherrschen zun"achst einmal
nur die Zugriffssteuerung auf Freigabeebene, da sie nicht "uber eine
Benutzerdatenbank verf"ugen.  Es ist nicht m"oglich, einzelnen
Benutzern den Zugriff auf Freigaben zu gew"ahren oder zu
verweigern. Um trotzdem benutzerbasiert Zugriffssteuerung zu
erm"oglichen, mu"s ein Server angegeben werden, der f"ur Windows die
Benutzerdatenbank pflegt. Damit k"onnen Pa"sw"orter benutzerbasiert
"uberpr"uft werden.

Weiterhin gibt der Server dem Client vor, ob Klartextpa"sw"orter
verwendet werden sollen, oder ob die Pa"sw"orter verschl"usselt
werden. Wenn der Server festlegt, da"s verschl"usselte Pa"sw"orter
verwendet werden, wird zus"atzlich die Herausforderung f"ur das
\defin{Challenge Response} Verfahren mitgeschickt.

Die Entscheidung "uber Klartextpa"sw"orter mu"s also getroffen werden,
ohne da"s der Server den Benutzernamen, der sich anmelden will,
kennt. Es ist also nicht m"oglich, f"ur einige Benutzer
Klartextpa"sw"orter und f"ur andere Benutzer verschl"usselte
Pa"sw"orter zu verwenden.

\subsection*{Session Setup}

Nachdem die Protokollversion ausgehandelt ist, wird vom Client ein
\defin{Session Setup} verschickt. In diesem Session Setup schickt der
Client seinen Benutzernamen an den Server. Sofern dieser
\param{security = user} verlangt hat, wird an dieser Stelle das
Pa"swort mitgeschickt. Damit ist der Server in der Lage, die
Identit"at des Benutzers festzustellen. Wenn \param{security = share}
vereinbart wurde, dann ignoriert der Server ein hier eventuell
mitgeschicktes Pa"swort.

\subsection*{Tree Connect}

Als letztes legt der Client fest, welche Freigabe er ansprechen will.
Der entsprechende Aufruf hei"st \defin{Tree Connect}. Sofern
\param{security = share} vereinbart wurde, wird an dieser Stelle das
Pa"swort "uberpr"uft. Der Benutzername kann in diesem Fall nicht zur
Zugriffsregelung verwendet werden. Dieser wurde unter Umst"anden gar
nicht "ubermittelt, da der Client den Session Setup komplett auslassen
darf. Andererseits hat er bei einem durchgef"uhrten Session Setup kein
Pa"swort angeben m"ussen, anhand dessen die Identit"at des Benutzers
zweifelsfrei h"atte festgestellt werden k"onnen.

\section{Zugriffsrechte}

Bei Windows NT kann man mit zwei unterschiedlichen Mechanismen Rechte
vergeben. An einer Freigabe kann man "uber Schreib- und Lesezugriff
entscheiden. Innerhalb des Dateisystems kann man detailiert Rechte
vergeben.

Ist bei Samba \param{security = user} gesetzt, so hat der Server die
M"oglichkeit, anhand des angemeldeten Benutzers Zugriffsrechte zu
vergeben oder zu verweigern. Wenn bez"uglich der Zugriffsrechte bei
einer Freigabe nichts gesagt wird, hat jeder korrekt angemeldete
Benutzer Leserecht. Man kann auch Gastbenutzern Leserecht geben, indem
man \param{guest ok = yes} setzt.

Mit den Optionen zur Rechtevergabe an Freigaben hat man die
M"oglichkeit, einzelnen Benutzern und ganzen Unixgruppen Rechte zu
geben oder zu nehmen. Die M"oglichkeiten sind hier deutlich weitergehend 
als die Semantik, die Unix mit den Rechtemasken f"ur den
Dateibesitzer, die besitzende Gruppe und den Rest der Welt bereit
stellt. Von den m"oglichen Anwendungen sollen hier drei h"aufig
ben"otigte F"alle dargestellt werden.

\begin{itemize}
\item {\bf \emph{Alle} Benutzer haben gleichen Zugriff}

\begin{verbatim}
[projekt]
path = /data/projekt
\end{verbatim}

Bei dieser Freigabe bekommen alle Benutzer, die sich mit Namen und
Pa"swort am Server angemeldet haben, \emph{Leserecht} auf die
Freigabe. Schreibrecht vergibt man, indem man den Parameter
\param{writeable = yes} setzt:

\begin{verbatim}
[projekt]
path = /data/projekt
writeable = yes
\end{verbatim}

\item {\bf \emph{Einige} Benutzer haben gleichen Zugriff}

Will man den Zugriff auf einige Benutzer einschr"anken, erstellt man
eine Liste \param{valid users} auf:

\begin{verbatim}
[projekt]
path = /data/projekt
valid users = mueller, meier
\end{verbatim}

Zu dieser Freigabe haben die Benutzer mueller und meier
Lesezugriff. Sollen diese Benutzer Schreibzugriff bekommen, so ist wie
im vorangegangenen Beispiel der Parameter \param{writeable = yes} zu
setzen:

\begin{verbatim}
[projekt]
path = /data/projekt
valid users = mueller, meier
writeable = yes
\end{verbatim}

F"ur den Parameter \param{valid users} spielt der Benutzer root keine
besondere Rolle. Das hei"st, da"s er auf die Freigabe \param{projekt}
keinen Zugriff hat. Soll er Zugriff bekommen, mu"s man ihn wie jeden
anderen Benutzer in die Liste \param{valid users} mit aufnehmen.

Der Parameter \param{valid users} gibt die M"oglichkeit, ganze
Unixgruppen in den Zugriff mit aufzunehmen. Um dies zu erreichen, mu"s
man das at-Zeichen voranstellen:

\begin{verbatim}
[projekt]
path = /data/projekt
valid users = root, @users
writeable = yes
\end{verbatim}

Mit dieser Einstellung haben alle Benutzer, die in der Unixgruppe
users sind, Schreibzugriff auf die Freigabe. Zus"atzlich kann der
Benutzer root schreiben.

\item {\bf Einige Benutzer haben Leserecht, andere Schreibrecht}

Will man differenziert Rechte vergeben, so mu"s man s"amtliche
Benutzer, die "uberhaupt Zugriff auf die Freigabe bekommen sollen, in
die Liste \param{valid users} aufnehmen, und mit \param{writeable =
no} nur Leserechte vergeben. Die Benutzer, die "uber diese
Standardeinstellung hinaus Schreibrecht bekommen sollen, m"ussen in
die \param{write list} aufgenommen werden.

\begin{verbatim}
[projekt]
path = /data/projekt
valid users = @users, @admins
writeable = no
write list = @admins
\end{verbatim}

Mit diesen Einstellungen haben die Benutzer der Gruppe users
Leserecht, und die Benutzer der Gruppe admins haben Schreibrecht.

\end{itemize}

\section{Unix-Zugriffsrechte}

Unter Windows NT gibt es zwei M"oglichkeiten, Zugriff auf Dateien zu
gew"ahren. "Uber eine Freigabe kann ein Lese- oder ein Schreibrecht
vergeben werden. Im zweiten Schritt k"onnen dann "uber eine
Rechtevergabe im Dateisystem weitere Rechte vergeben werden. Samba
regelt die Zugriffskontrolle ebenfalls in zwei Schritten. Die
freigabebezogenen Rechte werden "uber Parameter wie \param{valid
users} und \param{write ok} geregelt. Die Zugriffsrechte innerhalb des
Dateisystems regelt Samba nicht selbst, sondern verl"a"st sich
hierf"ur auf das darunterliegende Betriebssystem Unix.

Zwischen Unix und DOS bestehen gro"se Unterschiede. DOS und alle seine
Nachfolger sind Einzelbenutzersysteme, Unix ist von Anfang an als
Multiusersystem entworfen worden. Diese Unterschiede werden besonders
deutlich, wenn man die Attribute betrachtet, die auf Dateien vergeben
werden. DOS kennt vier Attribute:

\begin{description}
\item[Read-Only] Der Inhalt dieser Datei kann nur gelesen, aber nicht
geschrieben werden. Die Datei kann nicht gel"oscht werden.
\item[System] Diese Datei ist f"ur spezielle Betriebssystemzwecke
vorgesehen.
\item[Hidden] Diese Datei wird mit dem Kommando 'DIR' nicht angezeigt.
\item[Archiv] Das Archivbit wird bei jedem Schreibzugriff gesetzt.
Backupprogrammen ist es freigestellt, dieses Bit zur"uckzusetzen.
Damit kann eine inkrementelle Sicherung erm"oglicht werden.
\end{description}

Diese Bits k"onnen vom Benutzer frei gesetzt und wieder zur"uckgesetzt
werden. Sie bieten also keinen echten Zugriffsschutz, sondern nur eine
gewisse Sicherung gegen Fehlbedienung.

Unix f"uhrt mit jeder Datei einen Satz von Zugriffsrechten mit. Diese
sind aufgeteilt in 3 Gruppen von Benutzern: Der Dateibesitzer, die
besitzende Gruppe und alle anderen. Jeder Gruppe k"onnen 3
Rechte zugeteilt werden: Lesen, Schreiben und ausf"uhren.

Unter DOS werden Ausf"uhrungsrechte nicht verwendet. Sie stehen f"ur
Samba zur Verf"ugung, um die DOS-Attribute im Unix-Dateisystem
abzubilden. Das Schreibschutzbit unter DOS hat mit dem Schreibrecht
des Dateibesitzers unter Unix eine Entsprechung. Bis auf die Umsetzung
des Schreibschutzbits kann die Umsetzung der Attribute unter Samba mit
den entsprechenden Parametern \param{map <xxx>} gesteuert werden,
wobei das Archivbit ohne Zusatzangabe umgesetzt wird, die anderen
beiden Attribute nicht. Die Attributumsetzung erfolgt anhand der
folgenden Tabelle:

\[ \begin{tabular}{|l|l|c|l|l|}
\hline
DOS-Attribut & Unix-Recht & Maske & Parameter & Standard \\
\hline\hline
Schreibschutz & Schreibrecht Besitzer & 200 & - & immer \\
\hline
Archiv & Ausf"uhrung Besitzer & 100 & \param{map archive} & \param{yes} \\
\hline
System & Ausf"uhrung Gruppe & 010 & \param{map system} & \param{no} \\
\hline
Versteckt & Ausf"uhrung Andere & 001 & \param{map hidden} & \param{no} \\
\hline
\end{tabular} \]

Samba mu"s nun diese beiden Dateiattribute ineinander "uberf"uhren.
Samba mu"s neu erstellten Dateien Unixrechte zuordnen.  Wird eine
Datei neu erstellt, dann gibt der Client dem Server die DOS-Attribute
mit, mit der er die Datei erstellt haben m"ochte. Daraus formt Samba
einen Satz von Unix-Zugriffsrechten. Diese Rechte werden vom Parameter
\param{create mask} eingeschr"ankt. Die Standardvorgabe f"ur die
\param{create mask} ist gleich \param{744}, was der Rechtemaske
\param{rwxr--r--} entspricht. Der Dateieigent"umer hat Schreib- und
Leserecht, alle anderen haben reines Leserecht. Samba schr"ankt die
Rechte ein, indem der gew"unschte Satz an Rechten mit einer logischen
UND-Operation mit der \param{create mask} verkn"upft wird. Nur die
Rechte, die in der \param{create mask} gesetzt sind, k"onnen
m"oglicherweise in der neu erzeugten Datei auftauchen. In einem
weiteren Schritt setzt Samba explizit gew"unschte Zugriffsrechte
anhand des Parameters \param{force create mode}, dessen Standardwert
auf \param{000} steht. Dies geschieht durch eine ODER-Verkn"upfung mit
diesem Wert.

Diese Zusammenh"ange werden an einem Beispiel deutlicher. Es kann
gew"unscht sein, da"s auf neu erstellten Dateien nur der
Dateibesitzer und die Gruppe Leserecht haben sollen. Der Rest der Welt
soll diese Dateien nicht lesen k"onnen. Das wird dadurch erreicht,
da"s man die \param{create mask = 740} setzt, also das Leserecht f"ur
den Rest der Welt ausmaskiert. Es kann dar"uber hinaus gew"unscht
sein, da"s die besitztende Gruppe ein Schreibrecht einger"aumt
bekommt. Das kann man durch \param{force create mode = 020} erreichen.
Tabellarisch dargestellt hei"st dies:

\[ \begin{tabular}{|l|l||c|l|}
\hline
Wunsch & & & \texttt{rw-r-{}-r-{}-} \\
\hline
create mask & 740 & UND & \texttt{rw-r-{}-{}-{}-{}-} \\
\hline
\hline
& & & \texttt{rw-r-{}-{}-{}-{}-} \\
\hline
force create mode & 020 & ODER & \texttt{-{}-{}-{}-w-{}-{}-{}-} \\
\hline
\hline
Ergebnis & & & \texttt{rw-rw-{}-{}-{}-} \\
\hline
\end{tabular} \]

Die Ausf"uhrungsrechte auf Dateien werden unter DOS nicht verwendet,
sie k"onnen also verwendet werden, um DOS-Attribute im
Unix-Dateisystem abzulegen. Ausf"uhrungsrechte auf Dateiverzeichnissen
wirken sich jedoch auf das Verhalten von Samba aus, da durch sie der
Zugriff zu den Verzeichnissen geregelt wird.  Daher kann es
w"unschenswert sein, da"s die Rechtezuweisung auf Dateien und
Verzeichnissen unterschiedlich geregelt wird. Die Parameter
\param{create mask} und \param{force create mode} wirken daher nur auf
neu angelegte Dateien.  F"ur Verzeichnisse sind die Parameter
\param{directory mask} und \param{force directory mode}
verantwortlich. Der Vorgabewert f"ur \param{directory mask} ist
hierbei \param{755}, um den Zutritt f"ur die Gruppe und den Rest der
Welt zu erm"oglichen, die Vorgabe f"ur \param{force directory mode}
besetzt mit dem Wert \param{000} kein zus"atzliches Recht.

\section{Beispiel: Projektverzeichnisse}

Folgendes Problem stellt sich bei der Migration von Novell zu Samba
recht h"aufig. Unter Novell kann man anhand von
Gruppenzugeh"origkeiten den Zugriff auf Verzeichnisse regeln. Dies ist
unter Samba anhand von Unixrechten ebenfalls m"oglich. Was Unix leider
nicht zur Verf"ugung stellt, ist die M"oglichkeit, Verzeichnisse vor
Benutzern zu verstecken. Ein Benutzer sieht grunds"atzlich alle
Verzeichnisse, bekommt aber bei vielen dieser Verzeichnisse die
Meldung, da"s der Zugriff verweigert wurde. Wenn es jetzt anhand der
Gruppenzugeh"origkeit des Benutzers m"oglich w"are, nur die
Verzeichnisse anzuzeigen, auf die er tats"achlich Zugriff hat,
k"onnten die Verzeichnisse deutlich "ubersichtlicher werden.

Die Flexibilit"at von Samba erm"oglicht es, diese von Unix
vorgegeben Beschr"ankung zu umgehen, und zwar unter Benutzung von
Skripten, die vor dem Verbinden mit einer Freigabe ausgef"uhrt werden.

Folgendes Szenario wird vorausgesetzt: Jeder Benutzer ist in mehrere
Gruppen eingeteilt, die jeweils Projekte, Arbeitsgruppen oder
Abteilungen darstellen k"onnen. Jede dieser Gruppen hat unter
\datei{/data/groups} ein eigenes Verzeichnis, auf das sie schreiben
darf. Die einzelnen Verzeichnisse haben das Set Group ID Bit gesetzt,
damit die neu angelegten Dateien den jeweiligen Gruppen angeh"oren.

Als Beispiel gebe es die drei Gruppen \param{edv}, \param{fibu} und
\param{verkauf}. Das Gruppenverzeichnis \datei{/data/groups} sieht
folgenderma"sen aus:

{\small\begin{verbatim}
root@server:/data/groups> ls -l
total 12
drwxrws---   2 root     edv          4096 Jan 31 06:43 edv
drwxrws---   2 root     fibu         4096 Jan 31 06:43 fibu
drwxrws---   2 root     verkauf      4096 Jan 31 06:43 verkauf
root@server:/data/groups>
\end{verbatim}
}

Die korrekten Rechte erreicht man unter Unix durch:

{\small\begin{verbatim}
root@server:/root> mkdir /data/groups/edv
root@server:/root> chgrp edv /data/groups/edv
root@server:/root> chmod 2770 /data/groups/edv
\end{verbatim}
}

Eine Freigabe, die jedem Benutzer anhand seiner Rechte hierauf Zugriff
gew"ahrt, kann folgenderma"sen aussehen:

{\small\begin{verbatim}
[allgroups]
path = /data/groups
writeable = yes
create mode = 740
directory mode = 750
force create mode = 020
force directory mode = 020
\end{verbatim}
}

Zu beachten ist hier, da"s keine zus"atzlichen Einschr"ankungen anhand
von \param{valid users} notwendig sind, da der Zugriff durch die
Unixrechte beschr"ankt ist. Die Parameter \param{create mask} und
\param{directory mask} sind nicht strikt notwendig, da bereits auf der
Ebene \datei{/data/share} die Benutzer abgewiesen werden. Die
Parameter \datei{force create mode} und \param{force directory mode}
sind hingegen notwendig, da ohne sie neu angelegte Dateien nicht die
notwendigen Gruppenschreibrechte erhalten w"urden, die zum gemeinsamen
Zugriff notwendig sind.

Diese Freigabe erf"ullt funktional genau die Anforderungen, da"s
jeder in die Verzeichnisse schreiben darf, f"ur die er die
Gruppenmitgliedschaft hat. Der Nachteil an diesem Verfahren ist, da"s
er alle anderen Verzeichnisse sieht, was bei gro"sen Servern mit
vielen Gruppen recht un"ubersichtlich werden kann.

Die preexec-Skripte von Samba erm"oglichen die "ubersichtliche
Darstellung der Gruppenstruktur. Ein preexec-Skript wird ausgef"uhrt,
bevor der Benutzer tats"achlich mit der Freigabe verbunden wird.

{\small\begin{verbatim}
[gruppen]
path = /data/users/%U
root preexec = /usr/local/bin/mklinks %U
writeable = yes
\end{verbatim}
}

Die Datei \datei{mklinks} hat folgenden Inhalt:

{\small\begin{verbatim}
#!/bin/sh
umask 022
cd /data/users
rm -rf "$1"
mkdir "$1"
cd "$1"
for i in `groups $1`
do
        ln -s /data/groups/$i .
done
\end{verbatim}
}
    
Beim Verbinden an die Freigabe wird das Verzeichnis
\datei{/data/users/username} frisch erstellt, das anhand der
Gruppenzugeh"origkeit des Benutzers eine Liste von symbolischen
Links erstellt, die auf die eigentlichen Gruppenverzeichnisse
verweisen. Damit bekommt er nur die Verzeichnisse im Explorer
angezeigt, auf die er tats"achlich Zugriff hat. Durch die Angabe
\param{path = /data/users/\%U} ist zudem sichergestellt, da"s die
Freigabe f"ur alle Benutzer gleich hei"st, aber f"ur jeden
Benutzer auf ein eigenes Verzeichnis verweist. Das Skript wird in
diesem Beispiel als \param{root preexec} ausgef"uhrt, um den
Verwaltungsaufwand beim Anlegen neuer Benutzer zu minimieren. Mit
einem reinen \param{preexec} ohne Rootrechte w"are es notwendig,
f"ur jeden Benutzer unterhalb von \param{/data/users} ein eigenes
Verzeichnis mit den notwendigen Rechten anzulegen. Alternativ
k"onnte man das Verzeichnis mit der Gruppenliste im
Heimatverzeichnis des Benutzers anlegen, wobei dabei Zweifel
bez"uglich der "Ubersichtlichkeit angebracht sind. Ein weiteres
Argument, das Skript unter Rootrechten auszuf"uhren, ist die
Betriebssicherheit. Ohne dies w"are es dem Benutzer m"oglich, sich
vollst"andig von einem Gruppenverzeichnis auszuschlie"sen indem er
das gesamte Verzeichnis inklusive symbolischem Link l"oscht. Mit
der dargestellten Version geh"ort das Verzeichnis mit den
symbolischen Links dem Benutzer root, und Fehlbedienungen in
dieser Ebene sind ausgschlossen.

Wenn man die Freigabe \param{[allgroups]} auf \param{[browseable =
  no]} setzt, so hat man maximale "Ubersichtlichkeit bei vollem
Zugriff auf s"amtliche Gruppenverzeichnisse durch den Administrator
gegeben.

"Andern sich die Gruppenzugeh"origkeiten eines Benutzers, so kann
er einfach durch ein Neuverbinden an die Freigabe die neue Sicht auf
die Verzeichnisstruktur bekommen. Dieses Neuverbinden kann erzwungen
werden, indem der richtige Serverprozess get"otet wird. Dieser kann
anhand des Programms \prog{smbstatus} leicht herausgefunden werden.

\section{Pa"sw"orter}
\label{passwoerter}

Protokolle der IP-Welt wie telnet, ftp und pop3 "ubertragen die
Pa"sw"orter zur Benutzerauthentifizierung im Klartext. Damit kann
jeder, der den Netzverkehr abh"oren kann, s"amtliche Pa"sw"orter
mitschreiben. Daf"ur existieren fertige Programme, die Benutzernamen
und dazugeh"orige Pa"sw"orter ausgeben. In der Unixwelt wurde dies
zun"achst nicht als problematisch angesehen, da zum Zugriff auf das
Netz Administratorrechte oder physikalischer Zugriff zum Netz
notwendig sind. Beides war historisch oft nicht gegeben, so da"s das
Risiko als relativ gering eingesch"atzt wurde. Mit dem Aufkommen von
DOS und Ethernet hat jeder Benutzer Administratorrechte, kann also den
Netzverkehr mitschneiden.

Benutzerauthentifizierung mu"s vor allem eins leisten: Der Benutzer
mu"s beweisen, da"s er sein Pa"swort kennt. Ein
Authentifizierungsprotokoll kann es dabei erm"oglichen, da"s das
Pa"swort nicht "ubertragen werden mu"s.

Im SMB-Protokoll wird zur Authentifizierung ein Challenge-Response
Verfahren eingesetzt. Der Server verschickt an den Client eine
Zufallszahl, die sogenannte Herausforderung. Der Client kennt das
Benutzerpa"swort, und verschl"usselt die Herausforderung mit dem
Pa"swort als Schl"ussel. Diesen verschl"usselten Wert verschickt der
Client anstelle des Pa"sworts. Der Server kennt das Benutzerpa"swort
ebenfalls, und kann den versch"usselten Wert entschl"usseln. Entsteht
bei der Entschl"usselung wieder die Herausforderung, so hat der
Benutzer die Herausforderung offensichtlich mit dem korrekten Pa"swort
verschl"usselt. Kommt etwas anderes heraus, war das Pa"swort nicht
richtig.

\begin{figure}\[
\begin{pspicture}(11.5,6.5)
%\psgrid[subgriddiv=1,griddots=10]
\psframe(11.5,6.5)
\psline(3,6.5)(3,0)
\psline(7,6.5)(7,0)
\psframe[fillstyle=solid,fillcolor=lightgray](3,0)(7,6.5)
\rput(2,6){{\sffamily\bfseries Client}}
\rput(5,6){{\sffamily\bfseries Zuh"orer}}
\rput(8,6){{\sffamily\bfseries Server}}
\psline(0,5.7)(11.5,5.7)

\psline{->}(2.5,5)(7.5,5)
\rput(5,5.2){Negotiate Protocol}

\rput[lB](8,4.5){H: Herausforderung}
\psline{->}(7.5,4.5)(2.5,4.5)
\rput(5,4.3){{\bfseries H}}

\psline{->}(2.5,3)(7.5,3)
\rput(5,3.2){Session Setup}
\rput(5,2.8){{\bfseries Username, PW(H)}}
\rput[lB](0.3,3.9){Herausforderung}
\rput[lB](0.3,3.5){Username}
\rput[lB](0.3,3.1){Pa"swort}

\rput[lB](8,2.9){Username}
\rput[lB](8.2,2.5){$\Rightarrow$ Pa"swort}
\rput[lB](8.2,2.1){entschl"ussle PW(H)}

\pscurve{->}(5.8,2.7)(8,1.8)(9.5,1.8)(10,2)
\rput[tl](9.8,1.9){$\Rightarrow$ H}

\pscurve{<->}(10.5,1.6)(10.8,1.5)(11.3,2)(11,3)(8.3,4.4)
\rput[t](10.8,1.4){=?}

\psline{->}(7.5,0.8)(2.5,0.8)
\rput(5,0.6){{\bfseries Ok?}}
\end{pspicture}\]
\caption{Challenge-Response Verfahren}
\end{figure}

Ein Zuh"orer verf"ugt
"uber die Herausforderung und den verschl"usselten Wert. Mit
diesen beiden Werten k"onnte er einen Known Plaintext Angriff gegen
die Verschl"usselung starten. Das hei"st, es mu"s ein
Verschl"uselungsalgorithmus gew"ahlt werden, der gegen einen solchen
Angriff immun ist. Er kann keine Replay Attacke starten, da er bei
jedem neuen Verbindungsaubau eine neue Herausforderung bekommt, die er
verschl"ussen mu"s.

Windows NT verh"alt sich diesbez"uglich vern"unftig. Windows 95 denkt
sich jedoch nur alle 15 Minuten eine neue Herausforderung aus. Das
hei"st, da"s jemand nur einen Verbindungsaufbau mitschneiden mu"s, und
sich sofort danach mit der gleichen Benutzerkennung bei der gleichen
Maschine anmelden kann. Man kann sich
fast sicher darauf verlassen, die gleiche Herausforderung zu
bekommen, und mit der mitgeschnittenen Antwort Zugriff zu erhalten.
Dies gilt selbstverst"andlich nur f"ur die Zugriffe, bei denen Windows
95 als Server benutzt wird. Und wer tut das schon?

Dieses Verfahren setzt voraus, da"s der Server "uber das
Benutzerpa"swort im Klartext verf"ugt. Unter Unix tut er das nicht,
sondern der Server kennt nur eine zerhackte Version des Pa"swortes,
den Wert aus der Datei \datei{/etc/shadow}.

Eine Hashfunktion, wie sie unter Unix eingesetzt wird, hat drei
Eigenschaften.

\begin{enumerate}

\item Sie ist leicht zu berechnen. Dies ist notwendig, damit die
Pa"swort"uberpr"ufung nicht zu lange dauert.

\item Sie ist nur sehr schwer umkehrbar. Das hei"st, aus dem zerhackten 
Pa"swort
ist das Klartextpa"swort nicht berechenbar. Als Beispiel f"ur eine
solche Einwegfunktion soll hier die Multiplikation
herhalten. 98453*34761=3422324733 ist relativ einfach zu
berechnen. Da"s die Zahl 3422324733 aus den beiden Ursprungszahlen
entstanden ist, ist schon sehr viel schwieriger herauszufinden. Es
gibt Verfahren, mit denen der R"uckweg ausgeschlossen ist\footnote{Wie
"uberall in der Kryptographie gilt dies auch nur so lange, bis jemand
den R"uckweg gefunden hat.}.

Mit dieser Eigenschaft war es zu rechtfertigen, da"s in den fr"uhen
Tagen von Unix die Hashwerte der Pa"sw"orter f"ur alle Benutzer lesbar
waren, da niemand daraus etwas ableiten konnte. Mit dem "Uberflu"s an
Rechenleistung kann man aber sogenannte crack-Programme verwenden, die
die erste Eigenschaft der Hashfunktion ausnutzen: Sie probieren
einfach tausende von Pa"sw"ortern pro Sekunde aus. Schlechte
Pa"sw"orter k"onnen so sehr schnell gefunden werden. Daher hat man die
Pa"sw"orter in die nicht allgemein lesbare Datei \datei{/etc/shadow}
ausgelagert.

\item Zwei verschiedene Pa"sw"orter f"uhren zu zwei verschiedenen
Hashwerten. Damit kann das Loginprogramm ausreichend sicher sein, da"s
ein korrekter Hashwert aus dem korrekten Pa"swort entstanden ist.

\end{enumerate}

Authentifizierung unter Unix setzt voraus, da"s der Client dem Server
das Klartextpa"swort pr"asentiert. Der Server kann daraus den Hashwert
berechnen, und mit dem gespeicherten Wert vergleichen. Leider verf"ugt
er nicht "uber das Klartextpa"swort des Benutzers, um das
Challenge-Response Verfahren durchf"uhren zu k"onnen. Daher mu"s unter
Samba f"ur die Pa"swortversch"usselung eine zweite Pa"swortdatenbank
gepflegt werden, die Datei \datei{smbpasswd}.

Auch in der Datei \datei{smbpasswd} stehen keine
Klartextpa"sw"orter. Bevor die Herausforderung mit dem Pa"swort
verschl"usselt wird, wird das Pa"swort unter Windows ebenfalls durch
eine Hashfunktion geschickt. Von dieser Hashfunktion gibt es zwei
Varianten, die beide nicht mit den unter Unix verwendeten Funktionen
"ubereinstimmen. Das hei"st, da"s man mit den dort enthaltenen Werten
so direkt nicht mehr anfangen kann als mit den Werten aus der Datei
\datei{/etc/shadow} unter Unix, denn wenn man sie als Pa"swort
eingeben w"urde, w"urde Windows sofort wieder den Hash darauf anwenden,
und einen anderen, also falschen Wert daraus errechnen. Das Programm
\prog{smbclient} mu"s diese Operation ebenfalls durchf"uhren, nur hat
man hierzu den Quellcode und kann die entsprechenden Stellen
auskommentieren. So hat man die M"oglichkeit, sich anhand der Werte in
der \datei{smbpasswd} ohne Einsatz von crack bei einem NT-Rechner
anzumelden.

Alles nicht dramatisch, sagt Microsoft. Das "Aquivalent zur Datei
\datei{smbpasswd} liegt unter NT verschl"usselt vor. Diese
Verschl"usselung mu"s jedoch reversibel sein, um das
Challenge-Response Verfahren durchf"uhren zu k"onnen. Ein Teil der
Sicherheitsargumentation liegt darin, da"s dieses
Verschl"usselungsverfahren nicht offengelegt wurde. Das Verfahren war
solange geheim, bis Jeremy Allison das Programm \prog{pwdump}
ver"offentlicht hat. Dieses Programm extrahiert aus der
Benutzerdatenbank von NT eine Datei, die direkt als \datei{smbpasswd}
verwendet werden kann\footnote{Allerdings nur f"ur Samba 1.9, zu 2.0
  hin wurde das Format ge"andert. Es gibt in Samba 2.0 aber ein
  Konvertierungsskript.}.

Das hei"st, der Administrator unter NT verf"ugt direkt "uber die
Pa"sw"orter aller Benutzer oder zumindest "uber etwas Gleichwertiges.
Damit hat er automatisch die M"oglichkeit, sich bei fremden Systemen
anzumelden, sofern dort das Pa"swort gleich ist. Bei Unix kann sich
der Administrator zwar in die Identit"at jedes Benutzers versetzen.
Dies bleibt aber auf das lokale System beschr"ankt, da er das Pa"swort
des Benutzers nicht kennt.

Sollte ein neugieriger Administrator einmal an den tats"achlichen
Pa"sw"orten seiner Benutzer interessiert sein, dann macht NT es ihm
deutlich einfacher als Unix dies tut. Unix verwendet sogenannte
versalzene Pa"sw"orter. Wenn ein Pa"swort ge"andert wird, dann wird
ein Zufallswert berechnet, dem Pa"swort hinzugef"ugt und dann die
Hashfunktion durchgef"uhrt. Der Zufallswert wird der Datei
\datei{/etc/shadow} im Klartext hinzugef"ugt, damit die "Uberpr"ufung
die gleichen Operationen durchf"uhren kann. So kann man keine Tabelle
von Pa"sw"ortern und den zugeh"origen Hashwerten anlegen. Man kann
auch nicht erkennen, wenn zwei Benutzer das gleiche Pa"swort
verwenden. Windows NT verwendet dieses Verfahren nicht.

Aus Kompatibilit"atsgr"unden mu"s NT auch noch zus"atzlich einen sehr
schlechten Hashwert mitf"uhren. Bei alten Windowsversionen konnte das
Pa"swort bis zu 14 Zeichen lang sein. War es k"urzer, wurde es mit
Leerzeichen aufgef"ullt. Dann wurde mit den ersten 7 Zeichen ein
Hashwert berechnet, und dann mit den zweiten 7 Zeichen. Das hei"st, es
sind sofort alle Pa"sw"orter erkennbar, die weniger als 7 Zeichen
haben, da die zweite H"alfte des Hashwertes immer gleich ist.

\section{Druckfreigaben}

Um Drucker unter Samba zur Verf"ugung zu stellen, m"ussen diese von
Unix aus ansprechbar sein. Unter Linux mit einem BSD-kompatiblen
Drucksystem geschieht dies durch Eintr"age in der Datei
\datei{/etc/printcap}. Alle Drucker, die dort definiert sind, kann man
als Netzwerkdrucker f"ur Windowsclients freigeben.

Unter Linux ist die Frage der Druckertreiber noch nicht
zufriedenstellend gel"ost. Druckertreiber unter Windows w"urde man
unter Linux nicht als solche bezeichnen. In der Linuxwelt sind Treiber
Softwaremodule, die direkt Hardware wie Netzwerkkarten oder den
parallelen Port ansprechen. Druckertreiber im Sinne von Windows sind
unter Linux sogenannte Filter, die Druckdaten in ein f"ur den Drucker
akzeptables Format aufbereiten. Das einheitliche Druckformat unter
Linux ist Postscript, das mit dem Programm Ghostscript in viele
druckereigene Formate umgewandelt werden kann. Druckertreiber unter
Windows gehen vom Windows Metafile-Format aus, und wandeln dies
entsprechend um. Das Windows Metafile-Format enth"alt Aufrufe an die
Graphische Komponente von Windows, das GDI.

Wenn man einen Drucker, der "uber Unix angesprochen wird, von Windows
aus nutzen m"ochte, mu"s man planen, wo die Aufbereitung in das
druckereigene Format geschehen soll. Zwei Wege sind denkbar.

\begin{itemize}
\item Auf den Arbeitspl"atzen wird ein generischer Postscripttreiber
  installiert. Die Clients m"ussen nicht wissen, welches Druckermodell
  sich hinter einer Freigabe verbirgt.  Die Umwandlung findet auf dem
  Druckerserver mittels \prog{ghostscript} statt.
\item Der Druckertreiber reicht die Daten weiter, ohne sie weiter zu
  behandeln. Auf den Arbeitspl"atzen werden f"ur jeden Netzdrucker die
  korrekten Treiber installiert.
\end{itemize}

Beide Wege haben Vor- und Nachteile. Im ersten Fall hat man weniger
Aufwand mit der Administration auf Clientseite. Man mu"s den korrekten
"`Druckertreiber"' nur einmal definieren, am Druckerserver.  Beim
zweiten Weg kann man die bessere Unterst"utzung der Druckerhersteller
f"ur die Windowsplattformen nutzen. Druckertreiber f"ur Windows bieten
in der Regel die M"oglichkeit, Sonderfunktionen wie die Auswahl des
Papierschachtes zu nutzen. Dieser erh"ohte Komfort zieht jedoch nach
sich, da"s auf jedem Client der korrekte Druckertreiber installiert
ist.

Nutzt eine Windows NT Workstation einen Drucker, der von einem Windows
NT Server freigegeben wurde, so gibt es noch die M"oglichkeit, die
Druckaufbereitung komplett vom NT Server vornehmen zu lassen, und
trotzdem s"amtliche Komfortfunktionen auf der Workstation zu nutzen.
Dazu mu"s auf der Workstation kein Druckertreiber installiert sein.
Diese sogenannten EMF-Druckerwarteschlangen kann Samba zur Zeit nicht
exportieren. Samba wird dies voraussichtlich auch nicht so schnell
erm"oglichen, da hierf"ur gro"se Teile von Windows, n"amlich das GDI,
auf Sambaseite implementiert werden m"u"ste.

Eine Druckfreigabe wird genau wie eine Dateifreigabe in einem eigenen
Abschnitt erstellt, wobei f"ur die Druckfunktion drei Optionen
notwendig sind:

\begin{verbatim}
[deskjet]
printable = yes
printer = lp
path = /tmp
\end{verbatim}

Zu einer Druckfreigabe wird die Definition durch die Angabe
\param{printable = yes}.

Mit der Option \param{printer =} wird festgelegt, welche
Druckerwarteschlange unter Unix angesprochen werden soll. Dieser
Drucker mu"s das Format verstehen, das vom Windowsdruckertreiber
geliefert wird. Also sollte hier entweder Postscript angenommen
werden, oder die Daten sollten per sogenannter Raw-Queue direkt ohne
Umwandlung an den Drucker weitergeleitet werden.

Die Option \param{path =} legt einen Spoolbereich fest. Ein Druckjob,
den ein Windowsrechner an Samba schickt, mu"s zun"achst in einer Datei
abgespeichert werden. Wenn diese Datei geschlossen wird, teilt der
Client dem Server mit, da"s diese nun zum Drucker geschickt werden
soll. Samba realisiert dies, indem das Programm \prog{lpr} mit der
Druckdatei als Argument aufgerufen wird. Samba mu"s also f"ur sich die
M"oglichkeit haben, Druckjobs in Dateien zu speichern, bevor sie an
den \prog{lpd} "ubergeben werden. Dies sollte nicht das
Spoolverzeichnis sein, das der \prog{lpd} selbst f"ur den Drucker
vorsieht.

\section{Samba als Logon-Server}

Wenn sich in einem Netz Windows 95/98 Clients befinden, kann es
w"unschenswert sein, da"s sich die Benutzer dieser Arbeitspl"atze nur
mit einem Pa"swort anmelden k"onnen, das zentral auf einem Server
vorgehalten wird. Dazu mu"s der entsprechende Server spezielle Aufrufe
von Clients entgegennehmen und korrekt beantworten. In der reinen
Windowswelt ist dazu ein Windows NT Server notwendig, der als
sogenannter Primary Domain Controller (PDC) installiert ist. Samba ist
ebenfalls in der Lage, dies zu tun. Dazu ist im Abschnitt
\param{[global]} der Parameter \param{domain logons = yes} zu setzen.
Die Implementation, die Microsoft gew"ahlt hat, um Dom"anenanmeldungen
zu erm"oglichen, erzwingt zus"atzlich, da"s der Domain Master Browser
auf dem gleichen Rechner liegt wie der Logon Server. Das hei"st, man
ben"otigt f"ur Dom"anenanmeldungen die folgenden Parameter:

\begin{verbatim}
[global]
workgroup = samba
domain logons = yes
domain master = yes
\end{verbatim}

Hat man diese Parameter gesetzt, kann man in den Eigenschaften des
Clients f"ur Microsoft-Netzwerke einstellen, da"s der Client sich an
der Dom"ane \texttt{samba} anmelden soll. Hat man verschl"usselte
Pa"sw"orter (Siehe Abschnitt \ref{passwoerter}) aktiviert, kann man
vom Client aus sein SMB-Pa"swort "andern, indem man das entsprechende
Kontrollfeld in der Systemsteuerung von Windows benutzt.

\section{Windows NT Dom"anen}

Die Dom"anenanmeldung unter Windows 95/98 ist eine relativ einfache
Sache, da es sich dabei praktisch nur um eine "Uberpr"ufung der
Benutzerpa"sw"orter handelt. So etwas wie Benutzer kennt Windows 95
praktisch nicht, jeder Benutzer hat vollen Zugriff auf das gesamte
System. Erst mit Windows NT hat Microsoft den Schritt hin zu einem
Betriebssystem gemacht, das Benutzerkonten und Zugriffsrechte
verwalten kann. Damit sind sie sehr viel weiter gegangen, als Unix
dies getan hatte. Um das Konzept der Windows NT Dom"ane zu
verdeutlichen, soll hier zun"achst auf das Konzept des Benutzers unter
Windows und unter Unix eingegangen werden.

Unter Unix besteht ein Benutzer im wesentlichen aus einer numerischen
Userid, und nicht mehr. Das Programm \prog{login} mu"s beim Anmelden
des Benutzers anhand seines Namens herausfinden, welche numerische
Userid er hat. Dazu sieht es in der Datei \datei{/etc/passwd} nach.
Mit der Datei \datei{/etc/shadow} pr"uft \prog{login} das Pa"swort.
Ist es korrekt, wird in die gefundene Userid umgeschaltet und die
Loginshell des Benutzers gestartet.  Nach diesem Vorgang ist es Unix
v"ollig egal, wie der Benutzer hei"st, das einzige, was interessiert,
ist der numerische Wert. Damit h"angt an jedem Proze"s eine endeutige
Identifikation der Rechte, die er hat.

Unter Unix ist es so, da"s Userids nur auf dem Rechner gelten, auf dem
sie zugeordnet wurden. Es gibt keine M"oglichkeit, Rechte von einem
Rechner auf den n"achsten zu "ubernehmen oder global Benutzer
zuzuordnen. Die einzige M"oglichkeit, die man zu Vereinheitlichung
hat, ist der Austausch der jeweils auf einem Rechner geltenden
Tabellen "uber verschiedene Rechner hinweg. Genau das tut NIS oder
Yellow Pages. Die Benutzerdatenbank wird verteilt, gilt aber auf jedem
Rechner rein lokal.

Unter NT sieht das sehr "ahnlich aus, nur da"s hier der Benutzer nicht
durch eine kleine Zahl, sondern durch einen Security Identifier SID
repr"asentiert wird. Ein solcher SID ist mehrteilig. Der erste Teil
dieses SID beinhaltet eine Kennung der Benutzerdatenbank, zu der
dieser Benutzer geh"ort. Ein solcher SID ist 96 Bit lang und Microsoft
behauptet, da"s dieser Wert zuf"allig genug gew"ahlt ist, da"s es
keine zwei Benutzerdatenbanken geben kann, die die gleiche SID haben.
Der zweite Teil besteht aus einem sogenannten Relative Identifier RID,
der den Benutzer innerhalb der Dom"ane eindeutig identifiziert. Die
Kennung f"ur die Dom"ane besteht aus 3 32-Bit Zahlen, die zusammen 96
Bit ergeben.

Unter Windows NT hat nun jeder Rechner eine eigene Benutzerdatenbank,
genau wie unter Unix. Da aber jede Benutzerdatenbank eindeutig
identifiziert ist, kann es keine zwei Benutzer mit gleicher Userid
geben. Der Relative Identifier mag gleich sein, der Identifier f"ur
die Benutzerdatenbank unterscheidet sich aber auf jeden Fall.

Microsoft unterscheidet verschiedene Netzwerkmodelle. Das Peer-To-Peer
Netz ist das Modell, das auch Unix zugrunde liegt. Hier hat jeder
beteiligte Rechner eine eigene Benutzerdatenbank, eigene Pa"sw"orter
und eigene Rechtezuordnungen. Das Dom"anenmodell ist das Modell, das
sich signifikant von Unix unterscheidet. Mit dem Dom"anenmodell wird
eine Workstation in die Lage versetzt, mehr als eine Benutzerdatenbank
zu benutzen. Neben der eigenen Benutzerdatenbank, die jede Workstation
hat, kann sie eine Benutzerdatenbank von einem anderen Rechner
importieren. In einer Windows NT Dom"ane gibt es einen Rechner, der
seine eigene Benutzerdatenbank anderen zur Verf"ugung stellt, den
sogenannten Primary Domain Controller. Dieser reserviert f"ur sich
spezielle NetBIOS-Namen, um sich den Workstations als Logonserver
anzubieten.  Eine Workstation befragt den Primary Domain Controller
nach allen relevanten Daten zu den Benutzern, die sich bei ihr
anmelden wollen, und die Rechte auf der Workstation wahrnehmen
k"onnen.

Die Kommunikation zwischen der Workstation und dem Primary Domain
Controller l"auft verschl"usselt ab. Um eine solche Verschl"usselung
zu erm"oglichen, mu"s ein gemeinsamer Schl"ussel vereinbart werden. Um
sich "uber einen Schl"ussel einig zu werden, gibt es spezialisierte
Protokolle, wie beispielsweise der Diffie-Hellmann
Schl"usselaustausch. Um jeglichen Problemen mit Patenten oder
Exportrestriktionen zu umgehen, ist Microsoft einen anderen Weg
gegangen.  Beim Schl"usselaustausch geht es im wesentlichen darum,
sich "uber ein gemeinsames Geheimnis einig zu werden. Um ein
gemeinsames Geheimnis zu wahren und zu pr"ufen, kennt Microsoft
bereits eine Gruppe von Protokollen: Die Protokolle zum Pr"ufen und
Austauschen von Benutzerpa"sw"ortern. Genau diese Protokolle werden
verwendet, um die Kommunikation zwischen PDC und Workstation zu
sichern. Daher mu"s jede Workstation explizit in die Dom"ane
aufgenommen werden.

Bei Samba ist es so, da"s es zu jedem Benutzer, der ein Pa"swort in
der \datei{/etc/smb.conf} hat, einen Benutzer im System geben mu"s.
Der zu einer Workstation geh"orende Benutzer mu"s den NetBIOS-Namen
der Workstation, erg"anzt um ein \$-Zeichen, haben. Man ben"otigt also
zwei Schritte, um eine Workstation in die Dom"ane aufzunehmen. Im
ersten Schritt wird der Unixbenutzer angelegt. Dies geschieht in
vielen Linuxsystemen mit dem Kommando \texttt{useradd -m $<$user$>$}.
Der angelegte Benutzer ben"otigt im Unixsystem weder ein Pa"swort noch
ein Heimatverzeichnis. Er ist notwendig, da die Workstation in der
Dom"ane eine eigene SID bekommt, die aus der Unix userid berechnet
wird. Dann mu"s die Workstation ein Pa"swort in der
\datei{/etc/smbpasswd} bekommen, und zwar mit dem Befehl
\texttt{smbpasswd -a -m name}. Ein Beispiel sieht folgenderma"sen aus:

\begin{verbatim}
root@erde: useradd -m wks\$
root@erde: smbpasswd -a -m wks
\end{verbatim}

Man beachte, da"s beim Befehl \texttt{useradd} ein Dollarzeichen,
maskiert durch den Backslash, hinzugef"ugt wurde. Der Befehl
\prog{smbpasswd} f"ugt diesen bei Verwendung des Parameters \prog{-m}
selbst hinzu.

\section{Samba als Dom"anenmitglied}

Mit dem Parameter \param{security} kann man den Zeitpunkt steuern, zu
dem das Benutzerpa"swort gepr"uft wird. \param{security = share} legt
fest, da"s die Pr"ufung beim Tree Connect stattfindet, das hei"st,
wenn die Freigabe angesprochen wird. Ist \param{security = user}
angegeben, wird das Pa"swort bereits einen Schritt vorher, also beim
Session Setup gepr"uft. Bei \param{security = user} wird also die
Kombination von Benutzer und Pa"swort gepr"uft bei \param{security =
  share} die Kombination Freigabe und Pa"swort.

Der Parameter \param{security} kann noch zwei weitere Werte annehmen:
\param{server} und \param{domain}.  Bei beiden Einstellungen verh"alt
sich Samba gegen"uber dem Client genau wie bei \param{security =
  user}, der Benutzer mu"s sich unter seinem Namen beim Server
authentifizieren. Die Unterschiede liegen in der Art und Weise, wie
das Pa"swort "uberpr"uft wird.

\begin{itemize}
\item \param{security = user}: Die "Uberpr"ufung findet anhand einer
  lokalen Datenbank statt. Werden Klartextpa"sw"orter verwendet
  (\param{encrypt passwords = no}), so wird die lokale
  Unix-Pa"swortdatenbank in \datei{/etc/passwd}, \datei{/etc/shadow}
  oder die entsprechende NIS-Tabelle herangezogen. Bei
  verschl"usselten Pa"sw"ortern mit wird die Samba-eigene
  Pa"swortdatenbank in der Datei \datei{smbpasswd} zur "Uberpr"ufung
  herangezogen.
\item \param{security = server}: Bei dieser Einstellung bekommt der
  Sambaserver vom Client einen Benutzernamen und ein Pa"swort
  pr"asentiert. Er versucht daraufhin, sich mit diesem Pa"swort bei
  einem weiteren Server anzumelden. Funktioniert dies, hat der
  Benutzer sein Pa"swort offensichtlich richtig eingegeben.  Schl"agt
  dies fehl, wird auch dem Client des Sambaservers der Fehler
  mitgeteilt und der Zugriff verweigert. Der Pa"swortserver, der zur
  "Uberpr"ufung herangezogen wird, mu"s mit seinem NetBIOS-Namen im
  Parameter \param{password server} angegeben werden.
\item \param{security = domain}: Auch hierbei wird die "Uberpr"ufung
  einem Pa"swortserver "uberlassen. Dieser mu"s jedoch ein Primary
  Domain Controller sein, der den Sambaserver in die Dom"ane
  aufgenommen hat. Der Hauptvorteil gegen"uber \param{security =
    server} besteht in einer deutlich reduzierten Last auf dem
  Pa"swortserver und einer verschl"usselten Kommunikation zwischen
  Samba und Pa"swortserver.
\end{itemize}

Um einen Windowsrechner dazu zu bringen, f"ur einen Sambaserver die
Pa"swort"uberpr"ufung zu "ubernehmen, mu"s man nur \param{security =
  server} und den \param{password server} passend setzen. Dabei
"ubernimmt der Server ausschlie"slich die "Uberpr"ufung der
Pa"s\-w"orter.  Bei verschl"usselten Pa"sw"ortern k"onnen Benutzer nur
dann in die \datei{smbpasswd} aufgenommen werden, wenn sie in der
Unix-Benutzerdatenbank existieren. Genau so verh"alt es sich bei
\param{security = server}. Benutzer k"onnen auf Samba nur dann
zugreifen, wenn sie als normale Unixbenutzer existieren.

\param{security = server} ist nicht die optimale L"osung f"ur die
"Uberpr"ufung von Pa"sw"ortern durch einen weiteren Rechner.

Um die Vorteile der Dom"anenmitgliedschaft zu nutzen, ist etwas mehr
Aufwand notwendig. Mitglied einer Dom"ane zu sein hei"st, mit dem
Primary Domain Controller "uber einen verschl"usselten Kanal
kommunizieren zu k"onnen. Diese Verschl"usselung wird verwendet, um
Benutzerinformationen verdeckt austauschen zu k"onnen. Als
Verschl"usselungsverfahren kommt ein symmetrisches oder auch secret
key Verfahren zum Einsatz. Um ein symmetrisches Verfahren anwenden zu
k"onnen, m"ussen sich beide Partner "uber ein gemeinsames Geheimnis,
den \emph{secret key} einig sein.  Ein solches gemeinsames Geheimnis
mu"s regelm"a"sig ge"andert werden, um einer gro"sen Klasse von
kryptographischen Angriffen auszuweichen. Eine solche "Anderung darf
selbstverst"andlich nicht abgeh"ort werden k"onnen, da ein Zuh"orer
damit die gesamte Kommunikation abh"oren kann. F"ur die "Anderung
eines Geheimnisses gab es bereits vor der Implementation des
Dom"anenprotokolls ein fertiges Protokoll, das man direkt verwenden
konnte: Die M"oglichkeit, Benutzerpa"sw"orter "uber das Netz zu
"andern, war mir einem gesicherten Protokoll implementiert. Um dieses
Protokoll zur verschl"usselten Kommunikation zwischen einer
Workstation oder einem Mitgliedsserver und dem Dom"anencontroller
nutzen zu k"onnen, mu"s es f"ur jedes Dom"anenmitglied ein
Benutzerkonto geben.  Genau dies wird auf dem Dom"anencontroller
erstellt, wenn man eine Workstation oder einen Server mit dem
Servermanager in die Dom"ane aufnimmt. Betritt man danach mit der
Workstation die Dom"ane, wird als erstes das Pa"swort des
Computerkontos ge"andert.

Um einen Sambaserver in eine Dom"ane aufzunehmen, sind zwei Schritte
notwendig.

\begin{itemize}
\item Auf dem Server mu"s der Sambaserver mit seinem NetBIOS-Namen in
  die Dom"ane aufgenommen werden.
\item Der Sambaserver selbst mu"s dar"uber informiert werden, da"s er
  sich in der Dom"ane befindet, und er mu"s sein Pa"swort "andern.
  Dies geschieht mit dem Befehl

\verb|smbpasswd -j DOM -r PDC|

Dabei steht \texttt{DOM} f"ur die Dom"ane, die betreten wird.  Mit
\texttt{PDC} wird der NetBIOS-Name des Dom"anencontrollers der Dom"ane
benannt.
\end{itemize}

Mit diesem Kommando wird das Maschinenpa"swort auf dem PDC auf einen
neuen, zuf"alligen Wert ge"andert. Dieses neue Maschinenpa"swort f"ur
den Samba Server wird in einer Datei im gleichen Verzeichnis wie die
Datei \texttt{smbpasswd} abgespeichert und hat folgenden Namen:

\verb|<NT DOMAENENNAME>.<Samba Servername>.mac|

Die Endung .mac steht f"ur \emph{Machine ACcount} Pa"swortdatei. Im obigen
Beispiel w"urde die Datei also \texttt{DOM.SERV1.mac} hei"sen.

Diese Datei wird von root erstellt und ist f"ur keinen anderen
Benutzer lesbar. Sie ist der Schl"ussel zu Ihrer Dom"anensicherheit
und sollte genau so vorsichtig behandelt werden wie die Datei
\texttt{/etc/shadow}.

Nach diesen beiden Schritten kann man mit \param{security = domain},
\param{password server = PDC BDC1 BDC2} und \param{encrypt passwords =
  yes} die Pa"swort"uberpr"ufung an einen der Dom"anencontroller
delegieren. Dies sind die Prim"aren und Backup Dom"anencontroller, die
Samba der Reihe nach kontaktieren wird, um Benutzer zu
authentifizieren. Samba wird sie in der aufgef"uhrten Reihenfolge
ansprechen. Sie k"onnen also die Reihenfolge ver"andern, um eine
g"unstigere Lastverteilung zu erreichen. Eine weitere Option ist die
Angabe \param{password server = *}. Damit sucht Samba mit den
Standardmethoden\footnote{Windows NT findet einen Dom"anencontroller,
  indem der NetBIOS-Name \nbname{DOMAIN<1C>} gesucht wird.} von
Windows NT nach einem Dom"anencontroller und befragt die Server, die
es bei dieser Anfrage herausbekommen hat.

Warum ist \param{security = domain} besser als \param{security =
  server}?

Der Vorteil der Dom"anensicherheit ist, da"s Samba die
Authentifizierung "uber einen gesicherten RPC Kanal schickt, genau wie
ein Windows NT Server es tun w"urde. Das hei"st, da"s Samba nun genau
wie ein Windows NT Server an einer Vertrauensstellung teilnehmen kann.
Das hei"st, Sie k"onnen einen Samba Server in eine Resourcendom"ane
aufnehmen, und Sie k"onnen die Authentifizierung via Resourcen PDC vom
PDC der Benutzerdom"ane vornehmen lassen.

Zus"atzlich mu"s in der Einstellung \texttt{security = server} der
Samba D"amon eine Verbindung zum Authentifizierungsserver w"ahrend
seiner gesamten Laufzeit offenhalten. Dies kann die Anzahl der offenen
Verbindungen auf einem Windows NT Server in die H"ohe treiben, so da"s
dieser keine Verbindungen mehr annimmt. Mit \texttt{security = domain}
verbinden sich die Samba D"amonen nur so lange mit dem PDC, wie es
f"ur die Benutzerauthentifizierung notwendig ist. Danach wird die
Verbindung wieder abgebaut, so da"s die Verbindungen wieder
anderweitig verwendbar sind.

Und nicht zuletzt bekommt der Samba Server als Teil der Antwort auf
die Authentifizierungsanforderung Informationen "uber den Security
Identifier, die Gruppenzuordnungen und andere Informationen "uber den
Benutzer. All diese Informationen werden Samba zuk"unftig erlauben, in
einem sogenannten Appliance Modus zu laufen. In diesem Modus wird
kein manuell angelegter Unixbenutzer mehr notwendig sein. Samba wird Unix
Benutzer und Gruppen aus der Authentifizierungsantwort des PDC
erzeugen. Damit wird Samba wirklich ein Plug and Play Mitglied einer
Dom"ane.

Dieser Appliance Modus kann heute schon ann"ahernd erreicht werden,
indem bei Samba der Parameter \param{add user script} angegeben wird.
In diesem Parameter wird ein Unixprogramm angegeben, das dynamisch
einen Unixbenutzer erzeugen mu"s, nachdem ein Pa"swortserver die
Korrektheit eines Pa"sworts best"atigt hat. Ein Beispiel kann sein:

\verb|add user script = /usr/bin/useradd -m %U|

Damit wird einfach ein Benutzer hinzugef"ugt, wenn er noch nicht
existiert, aber der PDC das Pa"swort best"atigt hat.

\end{document}