summaryrefslogtreecommitdiff
path: root/docs/textdocs/kurs.tex
blob: 93771c40e86613df73d3f5362b0c0a7e34f6b1e4 (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
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
\documentclass{scrartcl}\usepackage{pslatex}\typearea{12}
%\documentclass[ncs]{dpunkt}
\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{\dateistyle}{\texttt}
\newcommand{\nbname}{\texttt}
\newcommand{\todo}[1]{}
\newcommand{\defin}{\emph}
\newcommand{\username}{\textbf}
\hyphenation{Net-BIOS}

\setcounter{tocdepth}{1}

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

\author{Volker Lendecke\\\texttt{VL@SerNet.DE}}
\title{Samba for Runaways}

\begin{document}

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

\author{Volker Lendecke\\
Service Network GmbH\\
G"ottingen\\
http://www.SerNet.DE/\\
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 erscheinen. Das hei"st, man kann von Windows aus auf einen
Unixrechner genau wie auf einen anderen Windowsrechner zugreifen. Der
Clientrechner merkt gar nicht, da"s er es nicht mit einem echten
Windowsserver zu tun hat. Im Detail bedeutet das, da"s sehr einfach
Dateifreigaben erstellt werden k"onnen. Jeder Benutzer kann
transparent Dateien auf seinem Heimatverzeichnis unter Unix und in
anderen freigegebenen Verzeichnissen ablegen. Weiterhin kann man
Drucker, die unter Unix ansprechbar sind, als Netzwerkdrucker in
Windows ansprechen. 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. Dieser stellt Namensdienste f"ur NetBIOS-Netze
  zur Verf"ugung, damit sich Windows-Maschinen "uber Subnetzgrenzen
  hinweg erreichen k"onnen
  
\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 echten Primary Domain Controller
  ist nicht vollst"andig implementiert. F"ur viele Anwendungszwecke,
  insbesondere Authentifizierung von NT-Workstation\-be\-nu\-tzern, reicht
  Samba jedoch v"ollig aus.
  
\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 anderen 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, wird
  m"oglicherweise der f"ur diesen Client zust"andige Proze"s
  abst"urzen. Die anderen Prozesse und damit Clients werden 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 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,
  oder sind aus Kompatibilit"atsgr"unden zu sehr exotischen Clients
  vorhanden.
  
  Soll Samba an spezielle Situationen angepa"st werden, ist es durch
  ein sehr flexibles Schema von Makroersetzungen m"oglich, die
  Konfigurationsdatei weitgehend dynamisch zu ver"andern. Damit sind
  erheblich mehr Konfigurationsm"oglichkeiten gegeben als mit Windows.
  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}

Der Kostenaspekt ist hier bewu"st nicht mit aufgef"uhrt worden. Samba
als freie Software\footnote{Samba wird hier bewu"st als \emph{freie}
  Software im Sinne des GNU-Projektes verstanden. Samba ist dadurch
  nat"urlich auch Open Source Software} ist unter den Bedingungen der
GNU General Public License f"ur alle Zwecke kostenlos einsetzbar.
Damit entstehen beim Einsatz von Samba keinerlei Lizenzkosten. Samba
ist jedoch nicht kostenlos. Es m"ussen Administratoren eingewiesen
werden, wenn Support ben"otigt wird, kann dieser viel Geld kosten.

Das Hauptaugenmerk sollte hier auf dem Aspekt liegen, da"s Samba
h"aufig einfach die technisch beste L"osung ist. Ein Kunde stand
beispielsweise vor der Aufgabe, einige bestehende, kleinere NT-Server
durch eine gr"o"sere L"osung zu ersetzen. Durch einen einzigen gro"sen
NT-Server w"aren die bestehenden Server sehr wohl zu ersetzen gewesen.
Das Problem bestand nun darin, da"s in vielen Dokumenten die
vorhandenen Servernamen "uber Objektreferenzen auf vollst"andige
UNC-Pfadnamen hart kodiert waren. Damit mu"sten die vorhandenen
Servernamen definitiv erhalten bleiben, um nicht jedes Dokument
anfassen zu m"ussen. Ein einziger Server unter NT kam also nicht in
Frage, unter Samba jedoch sehr wohl. Samba erlaubt die Einrichtung
virtueller Server unter verschiedenen Namen auf einer einzigen
Maschine. Mehr dazu ab Seite \pageref{virtuelle-server}.

\section{Eine einfache Konfiguration}

F"ur den Anfang soll hier eine einfache Konfiguration beschrieben
werden, mit der ein Samba-Server im Netz erscheint und einige, wenige
Dienste anbietet. Diese einfache Konfiguration soll als Startpunkt das
Experimentieren in den weiteren Kapiteln erleichtern. Die einzelnen
Parameter werden hier kurz erkl"art, in weiteren Kapiteln gibt es
ausf"uhrlichere Erkl"arungen.

Samba wird mit der Datei \prog{smb.conf} konfiguriert. Je nach Unix
oder Linux-Distribution kann diese Datei an unterschiedlichen Orten zu
finden sein: \prog{/etc/smb.conf}, \prog{/etc/samba/smb.conf} oder
auch \prog{/usr/local/samba/lib/smb.conf}, wenn Samba selbst
kompiliert wurde. Wurde die Datei \prog{smb.conf} wie beschrieben
angelegt, m"ussen zwei D"amonen gestartet werden: Der \prog{nmbd} und
der \prog{smbd}. An dieser Stelle unterscheiden sich die Unix- und
Linuxversionen erheblich, so da"s keine allgemeinen Hinweise gegeben
werden k"onnen. Verschiedene M"oglichkeiten sind:

\begin{verbatim}
/etc/init.d/smb start
/sbin/init.d/smb start
/usr/local/samba/sbin/nmbd -D; /usr/local/samba/sbin/smbd -D
rcsmb start
\end{verbatim}

Die \prog{smb.conf} f"ur eine einfache Konfiguration k"onnte so
aussehen:

\begin{verbatim}
[global]
   workgroup = samba
   netbios name = sambaserver
   interfaces = eth0

   encrypt passwords = yes

[homes]
   valid users = %S
   writeable = yes
   browseable = no

[cdrom]
   path = /cdrom

[public]
   path = /pub
   writeable = yes
\end{verbatim}

Wenn man mit dieser Einstellung Zugriff auf den Server erm"oglichen
m"ochte, mu"s man f"ur jeden Benutzer einen Eintrag in der Datei
\dateistyle{smbpasswd} machen, da verschl"usselte Pa"sw"orter
(\param{encrypt passwords = yes}) eingesetzt werden. Dies geschieht
beispielsweise f"ur den Benutzer \username{linux} "uber:

\begin{verbatim}
delphin:~ # smbpasswd -a linux
New SMB password:
Retype new SMB password:
Added user linux.
delphin:~ #
\end{verbatim}

Die einzelnen Zeilen haben folgende Wirkung:

\begin{description}
\item[\param{[global]}] leitet globale Servereinstellungen ein. Alle
  anderen Abschnitte beschreiben Freigaben.
\item[\param{workgoup = samba}] legt die Arbeitsgruppe fest, in der
  der Server auftauchen soll.
\item[\param{netbios name = sambaserver}] gibt dem Server einen Namen,
  unter dem er im Netz erscheint.
\item[\param{interfaces = eth0}] beschreibt das Netzwerkinterface, auf
  dem Samba Dienste anbieten soll. Selbst wenn der Rechner nur ein
  einziges Netzwerkinterface hat, sollte dieser Parameter angegeben
  werden. Die vorhandenen Interfaces bekommt man bei den meisten
  Unixsystemen "uber den Befehl \prog{netstat -ian} heraus.
  \todo{netstat -ian?}
\item[\param{encrypt passwords = yes}] verlangt vom Client, da"s keine
  Klartextpa"sw"orter "ubertragen werden. Mit modernen Clients gibt es
  Probleme, wenn man diese Option nicht aktiviert. Au"serdem m"ochte
  man aus Sicherheitsgr"unden seine Pa"sw"orter nicht allen mitteilen.
\item[\param{[homes]}] leitet die Freigabe der Heimatverzeichnisse
  s"amtlicher Benutzer ein. Jeder Benutzer bekommt eine eigene
  Freigabe unter seinem eigenen Namen und hat damit einen eigenen
  Bereich, auf dem er schreiben kann.
\item[\param{valid users = \%S}] beschr"ankt den Zugriff auf den
  Benutzer, der sich verbinden m"ochte.
\item[\param{writeable = yes}] vergibt Schreibrecht auf die Freigabe.
  Standardm"a"sig wird nur Lesezugriff vergeben.
\item[\param{browseable = no}] versteckt die Freigabe \param{[homes]}
  in der Netzwerkumgebung. Der Client zeigt sie nicht mehr als
  \param{[homes]} an, sondern nur noch unter dem Benutzernamen.
\item[\param{[cdrom]}] leitet eine weitere Freigabe ein.
\item[\param{path = /cdrom}] gibt den genannten Pfad frei. Dieser mu"s
  selbstverst"andlich im Dateisystem existieren.
\item[\param{[public]}] macht noch eine Freigabe im Netz. Die
  Parameter sollten jetzt selbsterkl"arend sein.
\end{description}

Mit dieser minimalen \dateistyle{smb.conf} sollte es auf jeden Fall
m"oglich sein, auf den Rechner zuzugreifen. Wenn man Probleme mit der
Konfiguration weiterer Dienste bekommt, sollte man von einer
m"oglichst einfachen Konfiguration ausgehen und dann Schritt f"ur
Schritt weitere Parameter hinzunehmen.



\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 bei Windows 2000 die
  NetBIOS-Ebene abgeschafft, Windows 2000 kommuniziert direkt "uber
  TCP. Aus Kompatibilit"atsgr"unden kann Windows 2000 jedoch noch
  "uber NetBIOS kommunizieren.}. Was ist NetBIOS? Je nachdem, wen man
fragt, bekommt man unterschiedliche Antworten. Fragt man IBM, ist
NetBIOS ein Protokoll, viele andere bezeichnen NetBIOS als 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. Beim Entwurf
von NetBIOS wurde zun"achst darauf geachtet, die Dinge sehr einfach zu
halten, um sie in kleinen lokalen Netzen anwendbar zu machen. Auf
Skalierbarkeit und die Andwendung in Weitverkehrsnetzen wurde beim
Design nicht geachtet.

\subsection{NetBIOS-Dienste}

Die Kommunikation mit NetBIOS wurde in drei Teilbereiche aufgeteilt,
den Namens-, 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. Aufeinanderfolgende Pakete k"onnen au"serdem in
  vertauschter Reihenfolge beim Empf"anger ankommen. Es kann sogar
  sein, da"s Pakete auf dem Weg dupliziert werden, also mehrfach
  ankommen.
  
  Ein solches Netzwerk ist folglich zun"achst einmal unzuverl"assig.
  Diese Unzuverl"assigkeit des Netzes wird durch den Datagrammdienst
  an die Benutzerprogramme weitergegeben. Das hei"st, wenn ein
  Programm den Datagrammdienst nutzt, kann es nicht sicher sein, da"s
  die Daten"ubertragung gew"ahrleistet ist. Das Programm mu"s selbst
  daf"ur sorgen, da"s mit Paketverlust vern"unftig umgegangen wird.
  
  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}

\subsection{NetBIOS-Namensdienst}

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.

Wollen zwei Anwendungen per NetBIOS miteinander kommunizieren, 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 den Namen der Dom"ane mit
  dem Namenstyp \nbname{1d} zum richtigen Zeitpunkt reservieren und
  reserviert halten. Dann bootet der PDC nicht mehr sauber.}.

Eine Reservierung geschieht, 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 einen zweiten
Reservierungsversuch und wartet wieder. Nach dem dritten
Reservierungsversuch 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.

\subsection{NetBIOS-Implementationen}

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 jedoch 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.
  
  Wenn NetBIOS "uber TCP/IP verwendet wird, kommen folgende Protokolle
  und Ports zum Einsatz:

  \label{protokolle-und-ports}
%  \begin{tabular}{|L|L|L|L|}\hline
%    \LCC
%    \tabulargray&\tabulargray&\tabulargray&\tabulargray\\
%    \tabularheader{Dienst}&\tabularheader{Protokoll}&\tabularheader{Port}&
%    \tabularheader{Proze"s}\\
%    \hline
%    \ECC
%    &&&\topseparation
%    Namensdienst & UDP &137 & \prog{nmbd} \\
%    Datagrammdienst & UDP &138 & \prog{nmbd} \\
%    Sitzungsdienst & TCP &139 & \prog{smbd}
%    \bottomseparationline
%  \end{tabular}
  \begin{center}\begin{tabular}{|l|l|l|l|}\hline
    Dienst&Protokoll&Port&Samba-Proze"s\\
    \hline\hline
    Namensdienst & UDP &137 & \prog{nmbd} \\\hline
    Datagrammdienst & UDP &138 & \prog{nmbd} \\\hline
    Sitzungsdienst & TCP &139 & \prog{smbd}\\\hline
  \end{tabular}
\end{center}

\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. F"ur
ein gut funktionierendes Netzwerk ist es jedoch sehr wichtig, da"s auf
den Clients nur die Protokolle installiert sind, die \emph{wirklich}
ben"otigt werden. Ist beispielsweise noch NetBEUI zus"atzlich zu
TCP/IP installiert, ist nicht klar, ob die Netzwerkumgebung in der
NetBEUI- oder die in der TCP/IP-Welt gelten soll. Normalerweise ist
heute ausschlie"slich noch TCP/IP notwendig. IPX kann dann noch
ben"otigt werden, wenn es Novellsysteme im Netz gibt.

\section{Bestandteile von Samba}

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

\subsection{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 h"ort auf dem
  TCP-Port 139, und nimmt neue Verbindungen entgegen. Jede neue
  Verbindung st"o"st einen neuen \prog{smbd} Proze"s 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.
  
  Jeder \emph{aktive} Client ben"otigt etwa 1-2 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 kann WINS-Server sein und ist f"ur
  den Computersuchdienst zust"andig.
  
\item[testparm] Mit diesem Programm kann man die \dateistyle{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.
  
\item[smbcontrol] Mit diesem Programm lassen sich die D"amonen von
  Samba kontrollieren. Beispielsweise kann man f"ur einzelne D"amonen
  den Debuglevel gezielt auf einen gew"unschten Wert setzen.

\end{description}

\subsection{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 kann mit \prog{smbclient} die Liste
  der Server im Netz erfragt werden, 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 unter Windows ist das
  Kommandozeilenprogramm \prog{nbtstat}.
  
\item[smbcacls:] Mit diesem Programm lassen sich von Unix aus Access
  Control Lists auf Windows-Dateien auslesen und setzen. Ist Samba mit
  ACL-Support kompiliert, geht dies selbstverst"andlich auch f"ur die
  auf Unix abgelegten Dateien.

\end{description}

\subsection{Weitere Serverkomponenten}

\begin{description}
  
\item[smb.conf:] Die zentrale Konfigurationsdatei von Samba. Ist Samba
  als fester Systembestandteil installiert, findet sie sich in der
  Regel unter \dateistyle{/etc/smb.conf}. Wurde Samba selbst
  kompiliert, so liegt sie h"aufig unter
  \dateistyle{/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 kompiliert, liegt dieses Verzeichnis unter
  \dateistyle{/usr/local/samba/var}.
  
\item[/etc/smbpasswd] ist die Pa"swortdatenbank von Samba, sofern mit
  verschl"usselten Pa"s\-w"ortern gearbeitet wird. Bei selbst
  kompilierten Sambaversionen liegt diese Datei h"aufig im Verzeichnis
  \dateistyle{/usr/local/samba/private/}.

\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 \dateistyle{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 \dateistyle{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. Mit \prog{netstat
  -ia} bekommt man auf den meisten Unix-Systemen Informationen "uber
die vorhandenen Netzwerkinterfaces. Mit \prog{ifconfig <interface>}
kann man sich dann n"ahere Informationen anzeigen lassen.

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 Samba 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.

Meistens funktioniert zus"atzlich zur Notation

\begin{verbatim}
interfaces = <IP-Adresse>/<Netzmaske>
\end{verbatim}

\noindent auch \prog{interfaces = <Interface-Name>}.

Mit diesen beiden Einstellungen wird man direkt den Sambarechner in
der Netzwerkumgebung sehen. Will man Tests auf NetBIOS-Ebene
durchf"uhren, sollte man zur Vereinfachung zwei weitere Parameter
setzen. Mit diesen drei Parametern bekommt man einen \emph{komplett
  offenen} Server. Die Parameter werden in sp"ateren Abschnitten
genauer erkl"art. Die vollst"andige \dateistyle{smb.conf} sieht
folgenderma"sen aus:

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

Mit dieser Konfiguration kann Samba gestartet werden. Es werden die
beiden D"amonen \prog{nmbd} und \prog{smbd} ben"otigt. Diese kann man
direkt von der Kommandozeile starten.

Setzt man SuSE Linux ein, so kann man Samba 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
\dateistyle{/etc/rc.config} auf \texttt{yes} gesetzt 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, das hei"st an 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 \dateistyle{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@delphin:~ > nmblookup -B 192.168.234.31 server
querying server on 192.168.234.31
name_query failed to find name server
vlendec@delphin:~ >
\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
  \textbackslash{}\textbackslash{}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} und \prog{nbtstat} 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{nmblookup -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.

\begin{quote}\begin{small}\begin{verbatim}
vlendec@delphin:~ > nmblookup -A 192.168.234.5
Looking up status of 192.168.234.5
received 6 names
        NT4WKS          <00> -         B <ACTIVE>
        SAMBA           <00> - <GROUP> B <ACTIVE>
        NT4WKS          <03> -         B <ACTIVE>
        ADMINISTRATOR   <03> -         B <ACTIVE>
        NT4WKS          <20> -         B <ACTIVE>
        SAMBA           <1e> - <GROUP> B <ACTIVE>
num_good_sends=0 num_good_receives=0

vlendec@delphin:~ >
\end{verbatim}\end{small}\end{quote}
  
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 Einzelname 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. Der Wert des
Typfeldes wird hexadezimal in spitzen Klammern angegeben.

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 so genannte
  \defin{Locale 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$<$1c$>$] Jeder Domain Logon Server reserviert
  diesen Namen f"ur sich. Clients finden ihre Domain Controller "uber
  diesen NetBIOS-Namen.
  
\item[arbeitsgruppe$<$1e$>$] Wahlen zum Local Master Browser werden
  "uber diesen Namen abgewickelt. Siehe hierzu Kapitel
  \ref{netzwerkumgebung}.

\end{description}

Damit sind die f"ur Datei- und Druckerdienste wichtigsten Namenstypen
beschrieben. Sobald unter NT andere Dienste installiert werden, kommen
andere Namenstypen hinzu. Exchange zum Beispiel nutzt die Namenstypen
22, 23 und 24. Mehr Namenstypen findet man in der Microsoft Knowlegde
Base unter Artikel Nummer Q163409.

\section{Netzwerkumgebung}
\label{netzwerkumgebung}

Die Netzwerkumgebung ist eine Anzeige, in der s"amtliche Server im Netz
aufgef"uhrt sind. Alle Rechner, die Datei- oder Druckfreigaben
zur Verf"ugung stellen, erscheinen dort oder sollten es zumindest, wenn alles
reibungslos funktioniert. Jeder Client, der auf eine solche Resource
zugreifen m"ochte, kann sich die Liste der Server im Netz geben lassen. Damit
diese Anzeige nicht zu un"ubersichtlich ger"at, werden die Rechner in so
genannte Arbeitsgruppen aufgeteilt. Jeder Rechner wird einer Arbeitsgruppe
zugeordnet, in erscheint und die er als erstes beim Doppelklick auf das
Symbol "`Netzwerkumgebung"' angezeigt. Die anderen Arbeitsgruppen sind
ebenfalls "uber den Unterzweig "`Gesamtes Netzwerk"' sichtbar.

Bez"uglich des Zugangs zu Arbeitsgruppen findet keinerlei Authentifizierung
statt. Jeder Rechner kann frei f"ur sich entscheiden, in welcher Arbeitsgruppe
er erscheinen m"ochte, jeder im Netz kann sich beliebige Arbeitsgruppen
anzeigen. Dies gilt ebenfalls, wenn im Netz mit NT-Dom"anen gearbeitet wird.
NT-Dom"anen haben nur eher zuf"allig im Netz ein der Arbeitsgruppe "ahnliches
Erscheinungsbild.

Das klingt verwirrend, ist es vermutlich beim ersten Lesen auch. Zum
Verst"andnis des Windows-Networking mu"s man drei Begriffe ganz klar
von einander trennen:

\begin{description}
\item[NetBIOS] Unter jeglicher Kommunikation von Windowsrechnern liegt
  das API NetBIOS. Mit Hilfe des NetBIOS sind Rechner im Netz
  ansprechbar, sie k"onnen verschiedenste Dienste anbieten. Einer
  dieser Dienste ist die Netzwerkumgebung.
\item[Arbeitsgruppe] Eine Arbeitsgruppe ist eine reine Liste von
  Rechnern. Sie hat mit NetBIOS \emph{ausschlie"slich} als
  Transportmedium zu tun. Der Dienst, der die Netzwerkumgebung bereit stellt,
k"onnte theoretisch vollst"andig unabh"angig von NetBIOS implementiert werden,
ist in der Praxis aber sehr von einem funktionierenden NetBIOS abh"angig. 
  
\item[Dom"ane] Eine Dom"ane bezeichnet etwas v"ollig anderes als eine
  Arbeitsgruppe.Eine Dom"ane ist eine gemeinsam genutzte
  Benutzerdatenbank. Microsoft hat in seiner Implementation einer
  Dom"ane die Einschr"ankung gemacht, da"s alle Rechner einer Dom"ane
  in einer Arbeitsgruppe auftauchen m"ussen. Das hei"st aber nicht,
  da"s alle Rechner in der Arbeitsgruppe einer Dom"ane auch die
  gemeinsame Benutzerdatenbank nutzen m"ussen.
\end{description}

Das Auftauchen eines Rechners in der Netzwerkumgebung hat nichts mit
seiner Erreichbarkeit zu tun, es ist h"ochstens ein vager Hinweis
darauf, da"s man es dort einmal versuchen kann. Ein Rechner
erreichbar sein, aber nie auftauchen, oder er kann in der
Netzwerkumgebung stehen, aber lange nicht mehr erreichbar sein.

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 so aussehen: Jeder Rechner,
der Serverdienste anbietet, teilt dies regelm"a"sig per Broadcast im Netz
mit. 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{Local Master Browser\footnote{Der Local Master Browser
    wird in der deutschen Dokumentation von Windows
    \emph{Computersuchdienst} genannt. Der Domain Master Browser ist
    der Dom"anenhauptsuchdienst. Local Master Browser finde ich sehr
    viel handlicher, und daher werde ich den englischen Begriff
    verwenden.}} (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 Local Master Browser gibt.  Beispielsweise
kann der Explorer von Windows eine solche Wahl ansto"sen. Wenn Windows
95 beim "Offnen der Netzwerkumgebung 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. Hieraus folgt,
da"s es in einem Subnetz f"ur jede vorhandene Arbeitsgruppe einen LMB gibt.

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 Rechner mit Windows 95, so h"alt sie sich
selbst f"ur geeigneter, den Local 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 Local Master Browser.

Drei Parameter in der \dateistyle{smb.conf} bestimmen das Verhalten von Samba
in der Wahl zum Local 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
Samba & 20 \\
\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 Local Master Browser Fehler bereinigt wurden.
Dann ist es sinnvoll, da"s diese neue Software die Rolle des LMB
"ubernimmt.

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.

\end{description}

Es ist sehr sinnvoll, den Local Master Browser st"andig auf einer
festen Maschine laufen zu lassen. H"aufige Wechsel des Local Master
Browser lassen die Netzwerkumgebung aus zwei Gr"unden sehr instabil
werden. Erstens m"ussen sich die Server im Netz h"aufig an neuen Local
Master Browsern anmelden. Diese Anmeldung erfolgt per UDP und kann
auch mal fehlschlagen. Zweitens kann es passieren, da"s ein Client den
Wechsel eines Local Master Browser nicht mitbekommt und Informationen
von einem nicht mehr aktuellen Local Master Browser beziehen m"ochte.
Ein Sambaserver ist typischerweise eine Maschine, die als Server
durchl"auft und auch deutlich stabiler als Windows-Clients ist. Mit
den Einstellungen

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

\noindent
kann man sicher sein, da"s der Sambarechner immer den Local Master
Browser innehat. \param{preferred master = yes} stellt sicher, da"s
beim Start von Samba eine Wahl angesto"sen wird, und mit \param{os
  level = 100} gewinnt Samba diese Wahl gegen alle anderen Maschinen
im Netz. 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.

\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}}}

Die wenigsten Firmen haben heutzutage nur ein einziges LAN. Entweder
sind verschiedene Geb"aude oder Standorte mit Routern verbunden, oder
jemand w"ahlt sich in das Firmennetz ein. In diesen F"allen
funktioniert die Namensaufl"osung nicht mehr wie beschrieben. 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.

\subsection{\nbname{LMHOSTS}}

Der einfachste Weg, die Namensaufl"osung "uber Subnetzgrenzen hinweg
zu realisieren, geht "uber eine statische Tabelle. Unter Windows
liegt diese in der Datei \dateistyle{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 \dateistyle{/etc/hosts} unter Unix. Ein
Beispieleintrag ist der folgende:

\verb|192.168.1.5 samba|

Die Eintr"age in der \dateistyle{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 \dateistyle{LMHOSTS} nachgeschaut. Ist der Zusatz
vorhanden, so wird ohne Namensaufl"osung direkt der Wert in der
\dateistyle{LMHOSTS} verwendet.

Die Namensaufl"osung "uber die Datei \dateistyle{LMHOSTS} hat wie die
Datei \dateistyle{/etc/hosts} den entscheidenden Nachteil, da"s sie
auf jedem Rechner einzeln gepflegt werden mu"s. Das macht diese Art
der Namenspflege sehr schnell unwartbar. Die Syntax der
\dateistyle{LMHOSTS} l"a"st einen einfachen Trick zu, mit dem zentral
eine \dateistyle{LMHOSTS}\footnote{Zentrale LMHOSTS} vorgehalten
werden kann, das Statement \nbname{\#INCLUDE}. Man stellt an zentraler
Stelle eine Freigabe zur Verf"ugung, in der die \dateistyle{LMHOSTS}
steht, und f"ugt sie automatisch bei jedem booten in die Liste auf den
Clients ein.  Dazu mu"s einmalig auf den Clients die
\dateistyle{LMHOSTS} folgenderma"sen aufgesetzt werden:

\begin{verbatim}
192.168.1.1 samba #PRE
#INCLUDE \\samba\public\lmhosts
\end{verbatim}

Die einzelnen Werte sind nat"urlich den Gegebenheiten vor Ort
anzupassen. Es ist darauf zu achten, da"s die Worte \nbname{\#PRE} und
\nbname{\#INCLUDE} in Gro"sbuchstaben geschrieben sind. Bei den Namen
selbst die Gro"sschreibung egal.

\subsection{WINS}

Die zweite M"oglichkeit, das Problem zu l"osen, ist ein zentraler
Server, der die NetBIOS-Namen in einer Datenbank dynamisch pflegt.
Dazu gibt es den WINS-Server.  Ein solcher Server ist ein Rechner, bei
dem sich jede NetBIOS-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
\dateistyle{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 als WINS-Server konfiguriert werden, indem der Parameter
\param{wins support = yes} gesetzt wird. Ist dieser 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
\dateistyle{/var/lock/samba/wins.dat} abgelegt. Der \prog{nmbd} pflegt
diese Datei dynamisch, je nach Reservierungen und Abmeldungen. Die
Datei \dateistyle{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 \dateistyle{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 ben"otigt 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 und handelt sich damit massive Probleme ein, da
Windows Namen sowohl beim WINS als auch per Broadcast aufl"ost.

Rechner im einen Namensraum k"onnen mit Rechnern, die an einem anderen
WINS-Server angeschlossen sind, nicht kommunizieren, da die Namen
nicht aufgel"ost werden k"onnen. Namen, die beim WINS nicht bekannt
sind, werden von Windows zus"atzlich lokal per Broadcast aufgel"ost.
Das hei"st, man findet beim einige Rechner nur per WINS, andere auch
lokal. Die Fehlerdiagnose wird dadurch stark erschwert.

Unter Windows NT kann man mehrere WINS-Server einsetzen, die sich
gegenseitig abstimmen. Diese Replikation stellt sicher, da"s die
Clients unabh"angig von der Anzahl der WINS-Server nur eine einzige
Namensdatenbank sehen. Die WINS-Server stellen sich somit gegen"uber
den Clients als eine konsistente Datenbank dar.

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.
Stellt man mit dieser Einstellung einen Samba-Server in ein Subnetz,
werden 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 \dateistyle{/etc/hosts} nachschauen und
danach dann das DNS anhand der Konfiguration in der Datei
\dateistyle{/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{Windows-Namensaufl"osung im Detail}

Um die Namensaufl"osung unter Windows zu verstehen, mu"s man zwei
Arten von Anwendungen unterscheiden:

\begin{description}
\item[NetBIOS-Anwendungen:] Dies sind die klassischen
  Windows-Programme, zum Beispiel um Laufwerke mit einem Server zu
  verbinden, oder um Outlook mit dem Exchange-Server zu verbinden. Die
  gesamte Netzwerkumgebung geh"ort ebenfalls zu den
  NetBIOS-Anwen\-dun\-gen.
\item[TCP/IP-Anwendungen:] Telnet, ping und Netscape geh"oren zu den
  Anwendungen, die es nur in der TCP/IP-Protokollfamilie gibt. Bei
  diesen funktioniert die Namensaufl"osung etwas anders als bei den
  NetBIOS-Anwendungen.
\end{description}

Wenn eine {\bfseries NetBIOS-Anwendung} einen Namen aufl"osen will,
dann geschieht dies in mehreren Schritten, die nacheinander
ausgef"uhrt werden, bis der Name gefunden ist.

\begin{enumerate}
\item Das System schaut im NetBIOS-Namenscache nach. Dieser kann durch
  \prog{nbtstat -c} vom Benutzer abgefragt werden.
\item Ist ein WINS-Server konfiguriert, so wird dieser befragt.
\item Kann der Name im WINS nicht aufgel"ost werden, so wird eine
  Broadcast-Anfrage ausgel"ost.
\item Es wird in der Datei \dateistyle{LMHOSTS} nachgesehen.
\item Sofern in den Eigenschaften von TCP/IP die DNS-Aufl"osung f"ur
  NetBIOS-Namen aktiviert ist, wird nun an das Aufl"osungssystem f"ur
  TCP/IP-Anwendungen "ubergeben.
\end{enumerate}

Wenn man Namen in die Datei \dateistyle{LMHOSTS} eintr"agt, so werden diese
erst nach den WINS- und Broadcast-Timeouts ber"ucksichtigt. Wenn man
diese sofort aufgel"ost haben m"ochte, so kann man sie mit dem Zusatz
\nbname{\#PRE} versehen. Dann werden sie beim n"achsten Reboot
dauerhaft in den NetBIOS-Namenscache geladen. Im laufenden Betrieb
kann man dieses Laden in den Namenscache durch ein \prog{nbtstat -R}
erzwingen.

Setzt man f"ur die IP-Adre"svergabe DHCP ein, kann man Windows-Clients
die IP-Adresse des WINS-Servers auf diesem Weg mitteilen. Tut man
dies, mu"s man den Clients ebenfalls einen Knotentyp zuweisen. Die
oben beschriebene Tabelle gilt f"ur den Knotentyp 8, den sogenannten
H-Knoten. Setzt man den Knotentyp auf 4, so bekommt man einen
M-Knoten, der zuerst Broadcast und dann WINS ausf"uhrt. Diese
Einstellung ist jedoch nur in Ausnahmef"allen sinnvoll, da jede
Anfrage beim WINS die Broadcastlast im Netz reduziert.

Die Namensaufl"osung f"ur {\bfseries TCP/IP-Anwendungen} ist
einfacher.

\begin{enumerate}
\item Zun"achst wird in der Datei \dateistyle{HOSTS} nachgesehen.
\item Ist ein DNS-Server konfiguriert, wird dieser befragt.
\item Der DNS-Name wird, so wie er ist, an die
  NetBIOS-Namensaufl"osung "ubergeben. Damit kann f"ur interne Systeme
  vermeiden, sie ins DNS aufnehmen zu m"ussen. Will man etwa einen
  Proxy unter dem Namen "`proxy"' einrichten, gen"ugt es, auf dieser
  Maschine einen korrekt konfigurierten \prog{nmbd} zu installieren,
  der den Namen "`proxy"' registriert. Damit kann man auf allen
  Browsern einfach "`proxy"' eintragen.
\end{enumerate}

\todo{Tabelle}

Die Namensaufl"osung von Samba ist weit weniger kritisch als die von
Window-Systemen, da Samba in der Regel ausschlie"slich als Server
auftritt. Samba als Server ist es gleichg"ultig, wie Namen aufgel"ost
werden k"onnen. Es gibt zwei Situationen, in denen Samba Namen
aufl"osen mu"s:

\begin{description}
\item[smbclient] Samba als Client mu"s offensichtlich Namen aufl"osen.
\item[Samba als Dom"anenmitglied] Mit dem Parameter \param{password
    server} wird Samba als Dom"anenmitglied mitgeteilt, welcher
  Dom"anencontroller f"ur Pa"sw"orter zust"andig ist. Es ist enorm
  wichtig, da"s f"ur diese Funktion die Namensaufl"osung korrekt
  funktioniert.
\end{description}

Wie Windows kennt Samba vier Mechanismen zur Namensaufl"osung:
Broadcast, WINS, LMHOSTS und die normale Unix-Namensaufl"osung. Die
Reihenfolge, in der die Mechanismen abgefragt werden, wird durch den
Parameter \param{name resolve order} festgelegt. Mit den vier Werten
\param{bcast}, \param{wins}, \param{lmhosts} und \param{host} werden
die vier Mechanismen beschrieben. Die Standardreihenfolge ist

\begin{verbatim}
name resolve order = lmhosts host wins bcast
\end{verbatim}

\noindent und legt fest, da"s vor der Windows-Namensaufl"osung zun"achst das
DNS
befragt wird. Dies ist h"aufig ein Problem f"ur \prog{smbclient}, da
man m"oglicherweise auf einen DNS-Timeout warten mu"s, bevor die
Windows-Namensaufl"osung benutzt wird. In vielen F"allen kann es von
Vorteil sein, f"ur Samba als Client vollst"andig auf die
DNS-Namensaufl"osung zu verzichten oder sie ans Ende der Liste zu
stellen:

\begin{verbatim}
name resolve order = lmhosts wins bcast host
\end{verbatim}

\section{Browsing "uber Subnetzgrenzen}
\label{browsing-im-wan}

So, wie die Netzwerkumgebung in Abschnitt \ref{netzwerkumgebung}
betrachtet wurde, funktioniert sie nur in einem einzigen lokalen Netz.
Die Wahl zum Local 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 \dateistyle{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 drei Subnetzen (1,2,3), die durch zwei Router (R1
und R2) verbunden sind. Die Router lassen keine Broadcasts durch. Alle
Subnetze bestehen aus jeweils vier 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 Browserliste 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{N1B}, 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
Browserliste. 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 zwei 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 Local
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}

\subsection{Browsing mit vielen Arbeitsgruppen}

Wenn man in der Netzwerkumgebung auf das Microsoft Windows Netzwerk
klickt, bekommt man eine Liste s"amtlicher Arbeitsgruppen im Netz
angezeigt. Diese Liste der Arbeitsgruppen wird vom Local Master
Browser vorgehalten. Wie bekommt er diese Liste?

Jeder Local Master Browser reserviert f"ur sich einen speziellen
Gruppennamen, der folgenderma"sen dargestellt wird:
\nbname{..\_\_MSBROWSE\_\_.<01>}. Die Punkte stehen dabei f"ur die
Ascii-Werte eins und zwei. Regelm"a"sig wird jeder Local Master
Browser seine Existenz an diesen Gruppennamen senden. Alle anderen
Local Master Browser im Netz sammeln diese Ank"undigungen, damit sie
Clients die Liste der vorhandenen Arbeitsgruppen und Local Master
Browser mitteilen k"onnen.

Wenn Domain Master Browser ins Spiel kommen, wird das Bild etwas
komplizierter. Samba hat Erweiterungen implementiert, mit denen das
Browsing "uber Subnetzgrenzen stabiler gemacht werden soll. Samba
fragt den WINS-Server regelm"a"sig nach allen Domain Master Browsern.
Diese werden in zuf"alligen Abst"anden kontaktiert, um die Browse
Listen mit ihnen abzugleichen. Dadurch kann es passieren, da"s
Arbeitsgruppen, die nicht mehr existieren, weiterhin in der
Netzwerkumgebung auftauchen und sich nicht l"oschen lassen. Samba
kennt den Parameter \param{enhanced browsing = no}, mit dem sich
dieses Verhalten abstellen l"a"st.

\section{Virtuelle Sambaserver}
\label{virtuelle-server}

Manchmal kann es notwendig sein, mehr als einen Sambaserver
gleichzeitig auf einem Rechner laufen zu lassen. Zur
Serverkonsolidierung kann es notwendig sein, unter mehreren Namen in
der Netzwerkumgebung zu erscheinen. Dies ist mit dem Parameter
\param{netbios aliases} sehr einfach m"oglich. Wenn es n"otig ist, in
mehr als einer Arbeitsgruppe aufzutauchen, dann scheitert dies
Verfahren jedoch, da der Parameter \param{workgroup} nur einmal
angegeben werden kann.

Eine andere Konfiguration ist die Einbindung von virtuellen Servern in
eine Hochverf"ugbarkeitsumgebung. Es kann w"unschenswert sein, zwei
physikalisch vorhandene Server unabh"angig voneinander arbeiten und
sich gegenseitig "uberwachen zu lassen. Jeder der beiden Server hat
seinen eigenen Namen und seine eigenen Freigaben. Stellt ein Server
fest, da"s sein Partner defekt ist, mu"s er dessen Aufgaben
"ubernehmen. Dies ist am einfachsten m"oglich, wenn die Aufgaben des
defekten Servers isoliert in einer eigenen Samba-Instanz wahrgenommen
werden. Die Hochverf"ugbarkeitssoftware mu"s nur daf"ur sorgen, da"s
die Platten "ubernommen werden und der ausgefallene Dienst auf dem
noch lebenden Server gestartet wird. Es ist keine Neukonfiguration des
bereits laufenden Servers notwendig.

Hier soll ein Beispiel aufgebaut werden, mit dem Samba auf einem
Rechner f"ur verschiedene Arbeitsgruppen Local Master Browser
wird. Ist dieser Rechner ein Unixserver, der 24 Stunden durchl"auft,
kann so mit sehr einfachen Mitteln eine recht stabile Netzwerkumgebung
f"ur beliebig viele Arbeitsgruppen erreicht werden.

Zun"achst wird ein isolierter Local Master Browser f"ur die
Arbeitsgruppe \nbname{GOETTINGEN} installiert. Der Name dieses
Rechners soll der Einfachheit halber \nbname{GOE} hei"sen. Die gesamte
Konfiguration wird unter \dateistyle{/samba/goe} abgelegt, so da"s sie
recht einfach duplizierbar ist. Die Datei
\dateistyle{/samba/goe/smb.conf} hat folgenden Aufbau:

\begin{verbatim}
[global]
workgroup = goettingen
netbios name = goe

interfaces = eth0:1
bind interfaces only = yes

encrypt passwords = yes 
smb passwd file = /samba/goe/smbpasswd

log file = /samba/goe/var/log.smb
lock directory = /samba/goe/locks

os level = 100
preferred master = yes
\end{verbatim}
\label{smbconf-goe}

In dieser Konfigurationsdatei gibt es einige Einstellungen, die die
Voreinstellungen vom Kompilieren "uberschreiben. Normalerweise finden
sich die Logdateien unter Linux in \dateistyle{/var/log} oder bei
selbstkompilierten Sambas in \dateistyle{/usr/local/samba/var}, hier
sollen sie pro Server separat in einem eigenen Verzeichnis abgelegt
werden.

Die nicht offensichtlichen Einstellungen bedeuten:

\begin{description}
\item[bind interfaces only:] Normalerweise nimmt der \prog{smbd} auf
  jeder im System konfigurierten IP-Adresse Verbindungen entgegen. Den
  Vorgang, mit dem der \prog{smbd} dies dem Kernel mitteilt, nennt
  sich "`An eine Adresse binden"'. Um auf jeder Adresse Verbindungen
  entgegen zu nehmen, bindet Samba an die spezielle Adresse 0. Jede
  konfigurierte IP-Adresse kann nur von einem einzigen Proze"s
  gebunden werden. Versucht ein \prog{smbd}, eine bereits verwendete
  Adresse zu binden, wird dies mit der Fehlermeldung \textbf{Address
    already in use} verweigert. Mit \prog{bind interfaces only = yes}
  wird der \prog{smbd} nur die im Parameter \prog{interfaces}
  angegebenen Adressen beziehungsweise Interfaces verwenden.
  
  Der Unterschied wird im Vergleich zweier Ausgaben des Programms
  \prog{netstat -nat} (hier unter Linux) deutlich. Zun"achst der
  relevante Teil \emph{ohne} \param{bind interfaces only = yes}:

\begin{verbatim}
vlendec@server:~ > netstat -natu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State    
 
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN   
  
vlendec@server:~/ > 
\end{verbatim}
  
  Im Vergleich dazu die Ausgabe des gleichen Programmaufrufs
  \emph{mit} \param{bind interfaces only = yes}:

\begin{verbatim}
vlendec@server:~ > netstat -natu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State    
 
tcp        0      0 192.168.42.1:139        0.0.0.0:*               LISTEN   
  
vlendec@server:~/ > 
\end{verbatim}
  
  Mit \param{bind interfaces only = yes} wird ausschlie"slich an die
  im Parameter \param{interfaces} referenzierte IP-Adresse gebunden,
  so da"s sich mehrere \prog{smbd}s nicht st"oren.


\item[log file:] Hier wird das Logfile nur f"ur den \prog{smbd}
  festgelegt. Es ist m"oglich, f"ur alle Samba-Instanzen ein
  gemeinsames Logfile zu verwenden, das kann jedoch sehr schnell
  un"ubersichtlich werden. Der \prog{nmbd} ignoriert diese
  Einstellung. Sein Logfile mu"s "uber den Kommandozeilenparameter
  \prog{-l} festgelegt werden.
\item[lock directory:] Die verschiedenen D"amonen von Samba
  kommunizieren "uber viele Datenbanken miteinander. Sie haben die
  Endung \dateistyle{.tdb}, und ihr Verzeichnis ist durch das
  \param{lock directory} festgelegt. Jede Instanz von Samba ben"otigt
  ihr eigenes \param{lock directory}, da die Datenbanken jeweils nur
  f"ur eine Samba-Instanz ausgelegt sind.
\end{description}

Diese Samba-Instanz kann "uber die folgende Startdatei kontrolliert werden:

\begin{verbatim}
#!/bin/sh
DIR=/samba/goe
case "$1" in
  start)
    echo "Starte Samba in $DIR"
    /usr/local/samba/bin/smbd -D -s $DIR/smb.conf
    /usr/local/samba/bin/nmbd -D -s $DIR/smb.conf -l $DIR/var
    ;;
  stop)
    echo "Fahre Samba in $DIR herunter"
    kill -TERM $(cat $DIR/locks/smbd.pid)
    kill -TERM $(cat $DIR/locks/nmbd.pid)
    ;;
  *)
    echo "Usage: $0 [start|stop]"
    ;;
esac
\end{verbatim}

Diese Installation von Samba ist so weit isoliert, da"s eine zweite
ungest"ort gleichzeitig laufen kann. Um jetzt eine zweite Installation
zu bauen, m"ussen folgende Dinge angepa"st werden:

\begin{description}
\item[workgroup:] Die Arbeitsgruppe mu"s nur in dem aktuell
  verwendeten Beispiel der Local Master Browser ge"andert werden. Ein
  zweites Samba kann selbstverst"andlich auch in der gleichen
  Arbeitsgruppe sein.
\item[netbios name:] Jede Instanz braucht zwingend ihren eigenen
  Namen.
\item[interfaces:] Jede Instanz ben"otigt ihre eigene IP-Adresse.
\item[smb passwd file:] Falls jede der Instanzen ihre eigene
  Benutzerdatenbank m"ochte, so mu"s die Datei \dateistyle{smbpasswd}
  separat angelegt werden. Die Unix-Benutzerdatenbank teilen jedoch
  alle Instanzen. Das hei"st, Benutzer \username{meier} auf der einen
  Instanz wird immer der gleiche Unixbenutzer wie Benutzer
  \username{meier} auf allen anderen Instanzen sein.  Wenn man die
  gleiche Benutzerdatenbank ben"otigt, kann man auf die gleiche
  \dateistyle{smbpasswd} zugreifen. Empfehlenswerter ist es jedoch,
  eine der beiden Instanzen als Dom"anencontroller einzurichten und
  die andere als Dom"anenclient. Dann kann man v"ollig ohne
  Unterbrechung die gesamte Konfiguration komplett auf einen anderen
  Rechner migrieren, ohne da"s irgend etwas ge"andert werden m"u"ste.
  Insbesondere f"ur Hochverf"ugbarkeitsl"osungen ist dies die
  Konfiguration der Wahl.
\item[log file:] Dies kann f"ur alle Instanzen gleich sein, meistens
  wird man jedoch separate logfiles f"ur die einzelnen \prog{smbd}s
  haben wollen.
\item[lock directory:] Dieses mu"s zwingend f"ur jede Instanz separat
  angelegt werden.
\end{description}

Als letztes ist die Variable DIR in der Startdatei anzupassen, und
mehreren Instanzen von Samba steht nichts mehr im Wege.

\section{Browsing im WAN -- schneller}

Das im Kapitel \ref{browsing-im-wan} beschriebene Verfahren, mit dem
"uber Subnetzgrenzen hinweg die Netzwerkumgebung gepflegt wird, ist
au"serordentlich tr"age. Jede "Anderung mu"s vom Local Master Browser
an den Domain Master Browser "ubergeben werden und von dort aus wieder
an die anderen Local Master Browser zur"uck. Bis diese "Anderung beim
Client ankommt, kann es sehr lange dauern.

Zudem ist bei einem komplexen Setup die Zahl der beteiligten Rechner
sehr hoch. Als Beispiel sei ein Netz auf 4 Subnetze verteilt. Jeder
Mitarbeiter ist einer von 5 verschiedenen Arbeitsgruppen zugeteilt.
Nun ist es gefordert, da"s die Mitarbeiter sich im Netz frei bewegen
k"onnen m"ussen, da"s sie also unabh"angig von ihrem Standort im Netz
immer ihre eigene Arbeitsgruppe vorfinden m"ussen. Dazu mu"s
selbstverst"andlich ein WINS-Server eingerichtet sein. Damit das
Browsing funktioniert, mu"s es zudem f"ur jede Arbeitsgruppe einen
Domain Master Browser geben, der sich mit den jeweiligen Local Master
Browsern abgleicht. Die Zahl der Local Master Browser ist hier recht
hoch. Da jeder Mitarbeiter in jedem Subnetz seine Arbeitsgruppe sehen
soll, mu"s es in jedem Subnetz f"ur jede Arbeitsgruppe einen eigenen
Local Master Browser geben. Das hei"st, es werden 20 Local Master
Browser ben"otigt.

Um das folgende Beispiel zu verstehen, sollte man sich
vergegenw"artigen, von welchen Rechnern welche Information bezogen
wird, wenn man im Explorer die Netzwerkumgebung durchklickt. Man kann
die Vorg"ange sehr gut nachvollziehen, wenn man an einer frisch
angemeldeten Sitzung mit \prog{nbtstat -s} die aktiven
NetBIOS-Sitzungen nach jedem Schritt nachvollzieht. Direkt nach dem
anmelden sollte keine NetBIOS-Sitzung aktiv sein, mit jedem Klick in
der Netzwerkumgebung kommt gegebenenfalls eine Verbindung hinzu.

\begin{description}
\item[Netzwerkumgebung:] Hier wird die eigene Arbeitsgruppe
  dargestellt. Diese Information liefert der eigene Local Master
  Browser. Dieser wird "uber eine Broadcast-Anfrage auf den Namen der
  eigenen Arbeitsgruppe vom Typ \nbname{<\#1d>} herausgefunden.
\item[Gesamtes Netzwerk:] Dieser Schritt liefert nur die lokal
  installierten Clientsysteme. Wenn ein Novell-Client installiert ist,
  wird hier das Novell-Netz neben dem Microsoft Windows-Netzwerk
  angeboten, ansonsten nur das Microsoft-Windows Netzwerk. Da dies
  rein lokal passiert, wird es keine zus"atzliche Verbindung geben.
\item[Microsoft Windows Netzwerk:] Hier wird die Liste der
  verf"ugbaren Arbeitsgruppen angezeigt. Diese Information liefert
  ebenfalls der eigene Local Master Browser. Das kann man sich mit
  einem \prog{smbclient -L} \emph{ lmb} verdeutlichen. Neben der Liste der
  Freigaben und der Server liefert der LMB eine Liste der
  Arbeitsgruppen, die er kennt. Zus"atzlich gibt er noch den jeweils
  zust"andigen Local Master Browser heraus.
\item[Arbeitsgruppe:] Diese Information liefert der jeweilige Local
  Master Browser. Der eigene Local Master Browser hat im letzten
  Schritt dessen Namen herausgegeben. Dessen IP-Adresse findet der
  Client durch eine normale NetBIOS-Namensanfrage heraus.
\item[Freigabeliste:] Ein Rechner ist f"ur seine Freigaben selbst
  verantwortlich, nur der Rechner selbst kann die Liste der von ihm
  freigegebenen Verzeichnisse herausgeben.
\end{description}

Gibt ein Rechner Informationen der genannten Art heraus, dann
geschieht dies "uber eine vollst"andig aufgebaute SMB-Sitzung, die auf
einer NetBIOS-Sitzung aufbaut. Kapitel \ref{smb-sitzungen} beschreibt
dies im Detail. Wie auf Seite \pageref{protokolle-und-ports}
dargestellt, nutzt der NetBIOS-Sitzungsdienst TCP "uber Port 139.

\subsection{Trennung von \prog{nmbd} und \prog{smbd}}

Die folgende Situation l"a"st sich erheblich einfacher und stabiler
l"osen als mit einem Domain Master Browser. Das Beispielnetz besteht
aus zwei Filialen einer Firma in G"ottinen und Heidelberg. F"ur das
sp"ater vollst"andig aufgebaute Beispiel seien die beiden Netze
192.168.1.0/24 in G"ottingen und 192.168.2.0/24 in Heidelberg
vergeben.

In jeder Filiale gibt es eine Arbeitsgruppe, also die Gruppen
\nbname{GOETTINGEN} und \nbname{HEIDELBERG}. In G"ottingen stehen nur
Rechner der Arbeitsgruppe \nbname{GOETTINGEN}, in Heidelberg nur
Rechner der Arbeitsgruppen \nbname{HEIDELBERG}. Nun soll auf beiden
Seiten jeweils die eigene und die entfernte Arbeitsgruppe sichtbar
sein, um sich im Netz mit dem Explorer frei bewegen zu k"onnen.  Dazu
mu"s es sowohl in G"ottingen als auch in Heidelberg jeweils einen
Local Master Browser f"ur \nbname{GOETTINGEN} und \nbname{HEIDELBERG}
geben. Es gibt im Beispiel vier Local Master Browser, die hier auch
bereits mit IP-Adressen versehen wurden:

\vspace{\baselineskip}
\begin{center}
\begin{tabular}{|l|l|l|}\hline
&\nbname{GOETTINGEN}&\nbname{HEIDELBERG}\\
\hline
Ort: G"ottingen & \nbname{GOE}, 192.168.1.1 & \nbname{GOEHD}, 192.168.1.2 \\
Ort: Heidelberg & \nbname{HDGOE}, 192.168.2.2 & \nbname{HD}, 192.168.2.1 \\
\hline
\end{tabular}
\end{center}
\vspace{\baselineskip}

%\begin{tabular}{|L|L|L|}\hline
%  \LCC
%  \tabulargray&\tabulargray&\tabulargray\\
%  &\tabularheader{\nbname{GOETTINGEN}}&\tabularheader{\nbname{HEIDELBERG}}\\
%  \hline
%  \ECC
%  &&\topseparation
%  Ort: G"ottingen & \nbname{GOE} & \nbname{GOEHD} \\
%  Ort: Heidelberg & \nbname{HDGOE} & \nbname{HD}
%  \bottomseparationline
%\end{tabular}

Die Idee f"ur die Konfiguration ist nun, die G"ottinger Anfragen an
den Local Master Browser f"ur \nbname{HEIDELBERG} (Rechner
\nbname{GOEHD}) direkt nach Heidelberg an den Rechner \nbname{HD}
umzuleiten. In G"ottingen mu"s nur ein \prog{nmbd} behaupten, er sei
Local Master Browser f"ur die Arbeitsgruppe \nbname{HEIDELBERG}. Dies
tut er, indem er auf UDP Port 137 die NetBIOS-Namensanfragen f"ur
\nbname{HEIDELBERG\#1D} beantwortet. Der TCP-Port 139 auf dem Rechner
\nbname{GOEHD} in G"ottingen wird dann an den echten Local Master
Browser \nbname{HD} weitergeleitet.

Das Weiterleiten von TCP Port 139 auf dem Rechner \nbname{GOEHD} an
Port 139 des Rechners \nbname{HD} kann unterschiedlich geschehen. 

\setlength{\unitlength}{4144sp}%
%
\begingroup\makeatletter\ifx\SetFigFont\undefined%
\gdef\SetFigFont#1#2#3#4#5{%
  \reset@font\fontsize{#1}{#2pt}%
  \fontfamily{#3}\fontseries{#4}\fontshape{#5}%
  \selectfont}%
\fi\endgroup%
\begin{picture}(5019,4611)(1789,-4483)
\thinlines
{\color[rgb]{0,0,0}\put(1936,-1051){\framebox(945,405){}}}%
{\color[rgb]{0,0,0}\put(2386,-646){\line( 0, 1){405}}}%
{\color[rgb]{0,0,0}\put(3286,-1051){\framebox(945,405){}}}%
{\color[rgb]{0,0,0}\put(3736,-646){\line( 0, 1){405}}}%
{\color[rgb]{0,0,0}\put(4861,-1051){\framebox(945,405){}}}%
{\color[rgb]{0,0,0}\put(5311,-646){\line( 0, 1){405}}}%
{\color[rgb]{0,0,0}\put(4861,-3166){\framebox(945,405){}}}%
{\color[rgb]{0,0,0}\put(5311,-2761){\line( 0, 1){405}}}%
{\color[rgb]{0,0,0}\put(3826,-1276){\framebox(405,225){}}}%
\put(3916,-1231){\makebox(0,0)[lb]{\smash{\SetFigFont{12}{14.4}{\rmdefault}{\mddefault}{\updefault}{\color[rgb]{0,0,0}139}%
}}}
{\color[rgb]{0,0,0}\put(4771,-4471){\framebox(405,225){}}}%
\put(4861,-4426){\makebox(0,0)[lb]{\smash{\SetFigFont{12}{14.4}{\rmdefault}{\mddefault}{\updefault}{\color[rgb]{0,0,0}139}%
}}}
{\color[rgb]{0,0,0}\put(4231,-4246){\framebox(945,405){}}}%
{\color[rgb]{0,0,0}\put(4681,-3841){\line( 0, 1){405}}}%
{\color[rgb]{0,0,0}\put(5401,-4246){\framebox(945,405){}}}%
{\color[rgb]{0,0,0}\put(5851,-3841){\line( 0, 1){405}}}%
{\color[rgb]{0,0,0}\put(1801,-241){\line( 1, 0){4050}}}%
{\color[rgb]{0,0,0}\put(5311,-2671){\line( 0, 1){1620}}}%
{\color[rgb]{0,0,0}\put(5311,-3166){\line( 0,-1){270}}}%
{\color[rgb]{0,0,0}\put(4231,-1141){\line( 3, 1){945}}\put(5176,-826){\line( 0,-1){2205}}
\put(5176,-3031){\line(-1,-5){242.308}}}%
{\color[rgb]{0,0,0}\put(3691,-3436){\line( 1, 0){3105}}}%
\put(2071,-871){\makebox(0,0)[lb]{\smash{\SetFigFont{12}{14.4}{\rmdefault}{\mddefault}{\updefault}{\color[rgb]{0,0,0}GOE}%
}}}
\put(3466,-871){\makebox(0,0)[lb]{\smash{\SetFigFont{12}{14.4}{\rmdefault}{\mddefault}{\updefault}{\color[rgb]{0,0,0}GOEHD}%
}}}
\put(4366,-4111){\makebox(0,0)[lb]{\smash{\SetFigFont{12}{14.4}{\rmdefault}{\mddefault}{\updefault}{\color[rgb]{0,0,0}HD}%
}}}
\put(5581,-4111){\makebox(0,0)[lb]{\smash{\SetFigFont{12}{14.4}{\rmdefault}{\mddefault}{\updefault}{\color[rgb]{0,0,0}HDGOE}%
}}}
\put(2386,-16){\makebox(0,0)[lb]{\smash{\SetFigFont{12}{14.4}{\rmdefault}{\mddefault}{\updefault}{\color[rgb]{0,0,0}Goettingen}%
}}}
\put(5941,-3301){\makebox(0,0)[lb]{\smash{\SetFigFont{12}{14.4}{\rmdefault}{\mddefault}{\updefault}{\color[rgb]{0,0,0}Heidelberg}%
}}}
\end{picture}

\subsection{Konfiguration}

Als Beispiel soll hier die vollst"andige Konfiguration am Standort
G"ottingen mit beiden Local Master Browsern beschrieben werden, die am
Standort Heidelberg kann dann spiegelverkehrt aufgesetzt werden.

Der Local Master Browser in G"ottingen hat die beiden IP-Adressen
192.168.1.1 (Interface eth0) f"ur den LMB der Arbeitsgruppe
\nbname{GOETTINGEN} und 192.168.1.2 (Interface eth0:1) f"ur die
Arbeitsgruppe \nbname{HEIDELBERG}. Die Interface-Bezeichnungen sind
hier Linux-spezifisch. Andere Unix-Versionen vergeben virtuelle
IP-Adressen m"oglicherweise anders. Die beiden virtuellen Sambaserver
werden mit ihren Konfigurationen in den Verzeichnissen
\dateistyle{/samba/goe} und \dateistyle{/samba/goehd} abgelegt.

Es m"ussen nun zwei Dateien \dateistyle{smb.conf} erstellt werden,
f"ur jeden Local Master Browser eine. F"ur die Arbeitsgruppe
\nbname{GOETTINGEN} kann direkt die \dateistyle{smb.conf} von Seite
\pageref{smbconf-goe} verwendet werden. Nur die Zeile \prog{interfaces
  =} mu"s angepa"st werden, so da"s sich die folgende
\dateistyle{/samba/goe/smb.conf} ergibt:

\begin{verbatim}
; /samba/goe/smb.conf
[global]
workgroup = goettingen
netbios name = goe
interfaces = eth0
bind interfaces only = yes
encrypt passwords = yes 
smb passwd file = /samba/goe/smbpasswd
log file = /samba/goe/var/log.smb
lock directory = /samba/goe/locks
os level = 100
preferred master = yes
\end{verbatim}

Entsprechend ist die Datei \dateistyle{/samba/goehd/smb.conf}
aufgebaut. Um der K"urze willen sind s"amtliche Einstellungen, die
ausschlie"slich den \prog{smbd} betreffen, weggelassen worden. In
G"ottingen soll f"ur die Arbeitsgruppe \nbname{HEIDELBERG} kein
\prog{smbd} gestartet werden, daf"ur ist der \prog{smbd} auf dem
Rechner \nbname{HDGOE} in Heidelberg zust"andig.

\begin{verbatim}
; /samba/goehd/smb.conf
[global]
workgroup = heidelberg
netbios name = goehd
interfaces = eth0:1
bind interfaces only = yes
lock directory = /samba/goe/locks
os level = 100
preferred master = yes
\end{verbatim}

Die Startdatei f"ur die Local Master Browser kann folgenderma"sen
aussehen. Es werden drei Prozesse gestartet, ein vollst"andiges Samba
f"ur den Rechner \nbname{GOE} und nur den \prog{nmbd} f"ur
\prog{GOEHD}.

\begin{verbatim}
#!/bin/sh
SMBD=/usr/local/samba/bin/smbd
NMBD=/usr/local/samba/bin/nmbd
case "$1" in
  start)
    echo "Starte Samba"
    $SMBD -D -s /samba/goe/smb.conf
    $NMBD -D -s /samba/goe/smb.conf
    $NNBD -D -s /samba/goehd/smb.conf -l /samba/goehd/var
    ;;
  stop)
    echo "Fahre Samba herunter"
    kill -TERM $(cat /samba/goe/locks/smbd.pid)
    kill -TERM $(cat /samba/goe/locks/nmbd.pid)
    kill -TERM $(cat /samba/goehd/locks/nmbd.pid)
    ;;
  *)
    echo "Usage: $0 [start|stop]"
    ;;
esac
\end{verbatim}

Die Weiterleitung des TCP-Ports 139 von der IP-Adresse 192.168.1.2 in
G"ottingen an die Adresse 192.168.2.1 Port 139 in Heidelberg kann mit
unterschiedlichen Methoden geschehen. Die einfachste Methode mit dem
Programm \prog{netcat} und dem \prog{inetd} funktioniert hier leider
nicht, da dem \prog{inetd} leider nicht gesagt werden kann, da"s er
bitte nur an ein spezielles Interfaces binden soll. G"abe es f"ur den
Rechner \nbname{GOEHD} eine eigene Maschine, k"onnte man den
\prog{inetd} jedoch problemlos verwenden. Die Zeile

\begin{verbatim}
netbios-ssn stream tcp nowait nobody /usr/bin/netcat netcat 192.168.2.1 139
\end{verbatim}

in der \dateistyle{/etc/inetd.conf} zusammen mit

\begin{verbatim}
netbios-ssn     139/tcp
\end{verbatim}

in der \prog{/etc/services} leiten eingehende TCP-Verbindungen auf
Port 139 zum Port 139 des Rechners 192.168.2.1 weiter.

Die zweite M"oglichkeit der Portweiterleitung bietet das Programm
\prog{rinetd}. Der \prog{rinetd} ist f"ur genau diesen Zweck
geschaffen worden und ist bei SuSE-Linux als fertiges Paket
mitgeliefert. Im Gegensatz zum \prog{inetd} kann der \prog{rinetd} an
spezielle Interfaces binden, so da"s sein Einsatz auch mit virtuellen
Sambaservern m"oglich ist. Der \prog{rinetd} wird "uber die Datei
\prog{/etc/rinetd.conf} konfiguriert. Die notwendige Datei besteht nur
aus einer einzigen Zeile:

\begin{verbatim}
192.168.1.2 139 192.168.2.1
\end{verbatim}

Alternative drei besteht beim Einsatz des \prog{xinetd}, der den
\prog{inetd} vollst"andig ersetzt und erheblich leistungsf"ahiger ist.
Der \prog{xinetd} beherrscht einerseits das Binden an einzelne
Interfaces, andererseits kennt er bereits die M"oglichkeit,
TCP-Verbindungen weiterzuleiten. Der Abschnitt in der
Konfigurationsdatei \dateistyle{/etc/xinetd.conf} k"onnte
beispielsweise so aussehen\todo{CHECK}:

\begin{verbatim}
service goehd
{
   socket_type = stream
   protocol    = tcp
   wait        = no
   port        = 139
   redirect    = 192.168.2.1 139
   bind        = 192.168.1.2
}
\end{verbatim}

F"ur welche der Alternativen man sich entscheidet, h"angt von der
Umgebung ab. Setzt man virtuelle Server ein, f"allt der \prog{inetd}
aus. Die Entscheidung zwischen \prog{rinetd} und \prog{xinetd} wird
vermutlich danach fallen, ob der eventuell vorhandene \prog{inetd}
abgel"ost werden soll. Die Kombination von \prog{inetd} und virtuellen
Servern l"a"st nur die Wahl, den \prog{rinetd} einzusetzen. Wird der
\prog{xinetd} bereits verwendet, sollte man ihn selbstverst"andlich
auch f"ur die Portweiterleitung nutzen.

\section{Einfache Freigaben}

Warum setzt man Samba "uberhaupt ein? Einer der wichtigsten Dienste
von Samba ist, Festplattenbereiche f"ur Clients zur Verf"ugung zu
stellen. Damit ein Client Plattenplatz eines Servers erreichen kann,
mu"s man eine sogenannte \emph{Freigabe} erstellen.

Beispielsweise m"ochte man den Inhalt des Unix-CDROM-Laufwerks an
Clients exportieren. Das Laufwerk sei unter \dateistyle{/cdrom}
eingebunden, und soll f"ur Clients unter
\nbname{\textbackslash{}\textbackslash{}servername\textbackslash{}cd}
erreichbar sein. Dazu mu"s man in der \dateistyle{smb.conf} einen
neuen Abschnitt einleiten, der den Namen \param{[cd]} tr"agt. Damit
wird eine Freigabe eingeleitet, die im Netz unter dem Namen
\nbname{cd} zu sehen ist.

Das folgende Beispiel gibt genau dieses Verzeichnis frei. Dabei ist
zus"atzlich die Zugriffskontrolle so angelegt, da"s wirklich
\textbf{jeder} darauf zugreifen kann. Wenn Sie irgend eine Art von
sch"utzenswerten Daten auf der exportierten CD haben, sollten Sie sich
auf jeden Fall das Kapitel \ref{freigaberechte} zu Rechten an
Freigaben und das Kapitel \ref{smb-sitzungen} ansehen, um die Freigabe
sinnvoll sch"utzen zu k"onnen.

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

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


\section{SMB-Sitzungen}
\label{smb-sitzungen}

Sobald ein Rechner Freigaben im Netz zur Verf"ugung stellt, k"onnen
Clients darauf zugreifen. Bevor ein Client tats"achlich auf eine
Freigabe zugreifen kann, werden sechs Schritte durchlaufen. Diese
sechs Schritte im Detail zu verstehen, ist f"ur die Konfiguration
einfacher Server nicht wirklich notwendig. Sobald es aber darum geht,
Fehlerdiagnose zu betreiben, ist das Wissen um die genaue
Fehlerursache sehr wertvoll. Die genaue Stelle, an der eine
Freigabeverbindung scheitert, kann bei der Fehlersuche gute Hinweise
geben.

\subsection{NetBIOS-Namensaufl"osung}

Ein Benutzer an einem Client gibt den Namen des Servers mit
unterschiedlichen Methoden an. Ein typischer Weg geht "uber die
Netzwerkumgebung "uber einen Doppelklick auf den Rechner. Das
Erscheinen in der Netzwerkumgebung ist jedoch nicht notwendig, da ein
Client auch auf der Kommandozeile "uber ein

\begin{verbatim}
net use h: \\server\freigabe
\end{verbatim}

\noindent das Laufwerk H verbinden kann. Genauso kann im Explorer durch den
Men"upunkt "`Netzwerklaufwerk verbinden"' eine direkte Verbindung
ge"offnet werden. Ein weiterer Weg ist "uber Men"upunkt "`Ausf"uhren"'
im Startmen"u von Windows 95. Wenn man dort \verb|\\server| angibt,
bekommt man die Liste der Freigaben des Servers angezeigt,
unabh"angig, in welcher Arbeitsgruppe sich der Server befindet.

\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}.

Ob die TCP-Verbindung klappt, pr"uft man am besten mit

\begin{verbatim}
telnet <ip> 139
\end{verbatim}

\noindent und einem Test mit \prog{netstat}, ob die Verbindung
im Zustand \prog{ESTABLISHED} ist.

\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 SMB-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, der CIFS von seinem Urvater SMB unterscheidet.
  Mit Windows 2000 werden diese NetBIOS-Namen beim Verbindungsaufbau
  gar komplett unterschlagen. Daf"ur war 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 diese Dateien \dateistyle{/etc/smb.conf.birke},
\dateistyle{/etc/smb.conf.eiche} und so weiter nennen. Die Datei
\dateistyle{/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.

Im Jahr 1996 wurde SMB in CIFS umbenannt. CIFS ist die Abk"urzung f"ur
Common Internet File System. Warum diese neue Bezeichnung, und warum
zu diesem Zeitpunkt? Kurz vorher hatte Sun Microsystems sein Protokoll
NFS angepa"st, um "uber Weitverkehrsstrecken besser benutzbar zu sein.
NFS setzt voraus, da"s zwischen Client und Server nur sehr kurze
Pingzeiten vorliegen. F"ur jeden Dateizugriff sind mehrere Anfragen
notwendig. Auch wenn jede Anfrage nur sehr kurz ist und wenig
Bandbreite verbraucht, mu"s doch jedesmal die Antwort des Servers
abgewartet werden. Hohe Pingzeiten belasten so die Leistung des NFS
erheblich. Sun hat das NFS so ver"andert, da"s die Anzahl der Anfragen
erheblich reduziert wurde. Das Ergebnis nannten sie WebNFS und haben
um dieses "`neue"' Protokoll eine gro"se Marketinginitiative
gestartet. Kurz vorher hatte Microsoft die Kr"ote namens Java von SUN
schlucken m"ussen und wollte sich nicht ein zweites Mal von SUN eine
Technologie aufzwingen lassen. Daher hat man einfach das hauseigene
Datei- und Druckprotokoll so umbenannt, da"s das Wort Internet im
Namen vorkam. Im Gegensatz zu SUN hat sich Microsoft bis auf ein
kleines Detail\footnote{Dies Detail hat nichts mit SMB, sondern mit
  NetBIOS zu tun. SMB-Server wollen im NetBIOS-Sitzungsaufbau mit
  ihrem eigenen NetBIOS-Namen angesprochen werden. Ein CIFS-Server im
  Internet ist aber nur unter seinem DNS-Namen oder seiner IP-Adresse
  bekannt. Der NetBIOS-Name ist normalerweise nicht publiziert. Daher
  lauschen alle CIFS-Server auf den eigentlich illegalen NetBIOS-Namen
  \nbname{*SMBSERVER}. Das ist der ganze Unterschied zwischen SMB und
  CIFS.} nicht die M"uhe gemacht, das Protokoll wirklich in Richtung
Internet zu optimieren.

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{Rechte an Freigaben}
\label{freigaberechte}

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 bei der Einstellung einer Freigabe
keine Parameter f"ur die Zugriffsrechte gesetzt sind, 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
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{Zugriffsrechte im Dateisystem}

Unter Windows NT gibt es zwei M"oglichkeiten, Netzzugriff auf Dateien
zu kontrollieren. "Uber eine Freigabe kann ein Lese- oder ein
Schreibrecht vergeben werden. Ist das freigegebene Dateisystem mit
NTFS formatiert, k"onnen durch Access Control Lists im Dateisystem
Rechte vergeben werden. Damit mu"s ein Benutzer sowohl durch die
Freigabe- als auch durch die Dateisystemrechte zu einer Operation
berechtigt sein.

Auch bei Samba auf Unix gibt es zwei Stellen, an denen Zugriff auf
Dateien und Verzeichnisse geregelt ist. Die im Kapitel
\ref{freigaberechte} beschriebenen Zugriffsrechte beziehen sich
ausschlie"slich auf die von Samba selbst vergebenen Rechte. Diese von
Samba vergebenen Rechte k"onnen die darunter liegenden Unixrechte
nicht erweitern. Das hei"st, Samba kann f"ur bestimmte Freigaben
Schreibrecht vergeben. Der Benutzer, der zugreift, kann aber nur dann
wirklich in den freigegebenen Dateien und Verzeichnissen schreiben,
wenn er dies unter Unix ebenfalls darf. Diese Einschr"ankung durch
Unixrechte ist ein wichtiges Prinzip von Samba: Im Dateisystem
implementiert Samba keine eigenen Zugriffskontrollen, sondern
verl"a"st sich auf die Unixmechanismen.

Samba k"onnte theoretisch eine eigene Datenbank von Zugriffsrechten
f"uhren. In dieser Datenbank k"onnte die vollst"andige NT-Semantik von
Access Control Lists abgelegt und implementiert werden. Zwei Gr"unde
sprechen gegen diesen Ansatz:

\begin{itemize}
\item Wenn Samba tats"achlich Dateisystemrechte implementieren w"urde,
  w"aren die Entwickler daf"ur verantwortlich, da"s diese korrekt
  eingehalten werden. Zugriffsrechte auf Dateien werden vom
  Betriebssystem bereits hervorragend implementiert, warum sollte man
  sich also die zus"atzliche Komplexit"at einhandeln?\footnote{Unter
    Marketinggesichtspunkten kann es wichtig sein, vollst"andige
    NT-Kompatibilit"at zu implementieren, die Samba mit dem
    Unix-Rechtemodell bisher nicht bietet. Es existieren Patches, die
    eine eigene ACL-Datenbank implementieren. Diese sind jedoch leider
    momentan noch nicht frei verf"ugbar. Dies ist mit der GPL durchaus
    m"oglich, da sie niemandem zug"anglich gemacht wurden. Es wird
    jedoch in der Zukunft eine ver"offentlichte Version geben.}
\item Sobald Samba eine eigene ACL-Datenbank implementiert, gilt diese
  ausschlie"slich f"ur den Dateizugriff via SMB. Es ist nicht
  m"oglich, Samba-ACL synchron mit dem Unix-Dateisystem zu halten,
  wenn auch noch Zugriff von Unixprozessen aus erlaubt wird. Wenn sich
  Verzeichnisb"aume "andern, ohne da"s Samba involviert ist, wie soll
  Samba dann die ACLs korrekt anpassen?
\end{itemize}

Eng verwoben mit den Unix-Zugriffsrechten auf Dateien ist in der
Implementation von Samba die Behandlung der DOS-Attribute. Diese
Attribute sind Eigenschaften von Dateien, die es in dieser Form unter
Unix nicht gibt. Viele Applikationen, die auf ein Netzwerklaufwerk
zugreifen, setzen jedoch funktionierende Attribute voraus.
Insbesondere das Archiv-Attribut wird von vielen Programmen verwendet.
Insgesamt kennt DOS vier verschiedene Attribute, die f"ur Dateien
vergeben werden k"onnen:

\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 unter DOS von jedem Benutzer frei gesetzt und
wieder zur"uckgesetzt werden. Das Schreibschutzbit ist also nicht als
echter Zugriffschutz zu verstehen, sondern nur als kleine
Hilfestellung gegen Fehlbedienungen.

\subsection{Abbildung DOS-Attribute zu Unix-Rechten}

Unix f"uhrt mit jeder Datei einen Satz von Zugriffsrechten mit. Diese
sind aufgeteilt in drei Gruppen von Benutzern: Der Dateibesitzer, die
besitzende Gruppe und alle anderen. Jeder Gruppe k"onnen drei
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 besitzende 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.

\subsection{Beispiel: Ein Projektverzeichnis}

H"aufig mu"s man einer Anzahl von Benutzern gemeinsamen Schreibzugriff
auf eine Freigabe, beispielsweise auf die Freigabe \param{fibu},
geben. Das Beispiel der Projektverzeichnisse wird noch mehrfach
betrachtet werden. Es gibt mit Samba viele M"oglichkeiten der
Realisation, die alle f"ur unterschiedliche Situation geeignet sind.

Ein einfaches Projektverzeichnis l"a"st sich folgenderma"sen
realisieren:

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

Damit darf die Gruppe \username{fibu} das Recht, auf diese Freigabe
schreibend zuzugreifen. \username{mueller} und \username{meier}, die
nicht Mitglied der Finanzbuchhaltung sind, d"urfen ebenfalls
schreiben.  Damit problemloser gemeinsamer Zugriff m"oglich ist, mu"s
die Rechtevergabe im Unix-Dateisystem geregelt werden. Dabei wird hier
vorausgesetzt, da"s im Unix selbst nur die Benutzer der Gruppe
\username{fibu} auf \dateistyle{/data/fibu} zugreifen sollen.
\username{meier} und \username{mueller} sind \emph{nicht} Mitglieder
der Gruppe \username{fibu}, sollen aber trotzdem schreiben k"onnen.
F"ur sie mu"s eine Sonderregelung geschaffen werden, die sich mit
Standard-Unixrechten nicht abbilden l"a"st. Dazu ben"otigt man die
ACLs aus Kapitel \ref{acl}.

Hat man keine ACLs zur Verf"ugung, gibt es eine sehr einfache
M"oglichkeit, jegliche Probleme im gemeinsamen Dateizugriff zu
vermeiden, ist der Parameter \param{force user}. Will man diesen
Parameter anwenden, so sollte man f"ur diese Freigabe oder f"ur alle
solchen Gruppenfreigaben einen separaten User anlegen, und diesem dann
das freigegebene Verzeichnis "ubergeben:

\begin{verbatim}
root@delphin:~ > mkdir -p /data/fibu
root@delphin:~ > useradd fibuuser
root@delphin:~ > chown projektuser /data/fibu/
root@delphin:~ > chmod 770 /data/fibu
\end{verbatim}

Die Freigabe sieht dann folgenderma"sen aus:

\begin{verbatim}
[fibu]
   path        = /data/fibu
   writeable   = yes
   valid users = @fibu, mueller, meier
   force user  = fibuuser
\end{verbatim}

Die Zugriffskontrolle wird bei dieser Definition ganz normal anhand
von \param{valid users} vorgenommen. Nur die dort erw"ahnten Benutzer
bekommen Zugriff auf die Freigabe. \emph{Nachdem} der Zugriff gew"ahrt
wurde, vergi"st Samba den Namen, mit dem sich der Benutzer angemeldet
hat. Samba schaltet f"ur jegliche Zugriffe im Dateisystem in den
Benutzer \username{fibuuser}. Man mu"s sich damit nicht mehr um
gemeinsame Zugriffsrechte im Unix k"ummern, da man ohnehin nur unter
einer einzigen Userid arbeitet. Man verliert jedoch die
Nachvollziehbarkeit. Alle Dateien geh"oren \username{pcuser}. Dies
wird insbesondere auch so im entsprechenden Dialog von Windows
angezeigt.

Mit etwas mehr Aufwand kann man es schaffen, den Dateibesitzer korrekt
zu behalten und gleichzeitig gemeinsames Schreiben zu erm"oglichen.
Das Verzeichnis \dateistyle{/data/fibu} selbst kann mit den
korrekten Gruppenschreibrechten angelegt werden:

\begin{verbatim}
root@delphin:~ > mkdir -p /data/fibu
root@delphin:~ > groupadd fibu
root@delphin:~ > chgrp fibu /data/fibu/
root@delphin:~ > chmod 770 /data/fibu
\end{verbatim}

Die Benutzer der Gruppe \username{fibu} k"onnen in diesem
Verzeichnis einwandfrei Dateien anlegen und ihre eigenen Dateien auch
"andern. Es gibt jedoch noch zwei Probleme.

\begin{itemize}
\item \username{mueller} und \username{meier} k"onnen nicht auf das
  Verzeichnis zugreifen, da Unix ihnen den Zugriff verweigert.
\item Die Benutzer aus der Gruppe \username{fibu} m"ussen nicht
  notwendigerweise diese Gruppe als Hauptgruppe haben. Das hei"st, neu
  angelegte Dateien geh"oren m"oglicherweise anderen Gruppen an.
  Dieses spezielle Problem lie"se sich mit dem set-group-id Bit auf
  dem Verzeichnis \dateistyle{/data/fibu} l"osen:

\begin{verbatim}
chmod g+s /data/fibu
\end{verbatim}
  
  \username{mueller} und \username{meier} blieben jedoch immer noch
  au"sen vor, da sie nicht in der Gruppe \username{fibu} sind, also
  auf dem Verzeichnis \dateistyle{/data/fibu} kein Schreibrecht haben.
\end{itemize}

Beide Probleme bekommt man mit dem Parameter \param{force group =
  fibu} in den Griff. Dieser Parameter arbeitet genau so wie
\param{force user}, nur da"s er sich anstatt der User-ID auf die
Group-ID bezieht. Jegliche Dateisystemzugriffe werden damit als Gruppe
\username{fibu} vorgenommen, die User-ID bleibt unangetastet.

Als letztes mu"s nun noch sichergestellt werden, da"s die Gruppe, in
diesem Fall \username{fibu}, immer schreiben kann, und da"s der
Rest der Welt keinen Zugriff bekommt. Die vollst"andige
Freigabedefinition sieht demnach folgenderma"sen aus:

\begin{verbatim}
[fibu]
   path                 = /data/fibu
   writeable            = yes
   valid users          = @fibu, mueller, meier
   force group          = fibu
   create mask          = 740
   directory mask       = 750
   force create mode    = 020
   force directory mode = 020
\end{verbatim}

\todo{Global- und shareparameter, copy = freigabe}

\section{Projektverzeichnisse, zum zweiten}

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
\dateistyle{/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}. Unter \dateistyle{/data/groups} kann man folgende
Gruppenverzeichnisse anlegen:

{\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 \dateistyle{/data/share} die Benutzer abgewiesen werden. Die
Parameter \dateistyle{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 \dateistyle{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
\dateistyle{/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. Jedoch darf dieses
Verfahren nur dann angewendet werden, wenn die Benutzernamen unter
vertrauensw"urdiger Kontrolle stehen. Wenn es m"oglich ist, da"s
Benutzernamen beispielsweise von einem NIS-Server bezogen werden, kann "uber
einen Benutzernamen \username{../..} das gesamte Dateisystem
gel"oscht werden. Ist ein NIS-Server beteiligt, mu"s man das Verfahren
ohne \param{root preexec} und nur mit \param{preexec} ohne Root-Rechte
verwenden.

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
ausgechlossen.

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{ACLs}
\label{acl}

Die Zugriffsrechte unter Unix werden durch den Dateimodus bestimmt.
Dieser Dateimodus enth"alt neun Bits, die den Zugriff auf die Datei
regeln. Dazu kommen drei zus"atzliche Bits f"ur spezielle Anwendungen.
Mit diesen neun Bits k"onnen Zugriffsrechte f"ur drei Benutzerklassen
vergeben werden: Den Dateibesitzer, die besitzende Gruppe und den Rest
der Welt. Mit dem Befehl \prog{chmod} werden diese Rechte gesetzt.

Dieser Mechanismus hat einen unsch"atzbaren Vorteil: Er ist einfach.
Mit insgesamt zw"olf Bits kann ein sehr gro"ses Spektrum an Szenarien
abgedeckt werden. Jedoch ist es oft notwendig, Zugriffsrechte feiner
zu vergeben, als dies mit Unix m"oglich ist. Insbesondere haben viele
Unternehmensanwendungen komplexere Anforderungen an die
Zugriffsrechte.

Beispielsweise soll auf einem Verzeichnis die Gruppe \username{fibu}
Schreibrecht haben und die Gruppe \username{controlling} soll Leserecht
bekommen. Der Benutzer \username{mueller} ist nun in der Gruppe
\username{controlling} und hat sich bei der Finanzbuchhaltung unbeliebt
gemacht. Er soll auf dieses Verzeichnis keinen Zugriff mehr haben. Eine
solche Konfiguration ist mit den traditionellen Unix-Zugriffsrechten nicht
mehr abzubilden.

Die Hersteller von Unix haben sich irgendwann zusammengefunden, um das
beschr"ankte Rechtemodell zu erweitern. Geplant war eine Erweiterung, die
sich in das vorhandene Rechtemodell von Unix nahtlos einbinden l"a"st, aber
die dem Benutzer erheblich mehr M"oglichkeiten zur
Rechtesteuerung gibt.

Zugriffskontrollisten (Access Control Lists oder ACLs) unterst"utzen genau
diese weitergehenden Zugriffsrechte. Beliebige Benutzer und
Gruppen k"onnen Rechte auf Dateien und Verzeichnissen bekommen oder
verweigert bekommen. Die klassischen drei Benutzerklassen kann man als drei
Eintr"age in einer ACL ansehen.

Das Modell der ACLs erweitert M"oglichkeiten, wem man Rechte geben
kann. Es erweitert nicht die Art der Rechte, die vergeben werden
k"onnen. Es geht weiterhin nur um die Rechte Lesen, Schreiben und
Ausf"uhren, mit der bekannten Bedeutung auf Dateien und
Verzeichnissen.

\subsection{Rechte unter Unix}

Die Auswertung der Zugriffsrechte unter Unix funktioniert, indem
zuerst entschieden wird, welche der drei Rechtegruppen Benutzer,
Gruppe und Andere benutzt werden soll. Im zweiten Schritt wird
nachgesehen, ob das gew"unschte Recht auf der Datei gesetzt ist.

Die Zugriffsrechte eines Benutzers werden bestimmt durch seinen
Sicherheitskontext. Dieser Sicherheitskontext besteht aus seiner
effektiven User ID (EUID), seiner prim"aren Gruppe (EGID) und seinen
zus"atzlichen Gruppen (GIDs). Die Entscheidung f"ur eine Rechtegruppe
funktioniert in drei Schritten:

\begin{itemize}
\item Ist EUID gleich dem Dateibesitzer? In diesem Fall wird die erste
  Rechtegruppe, die f"ur den User benutzt.
\item Ist der Benutzer in der besitzenden Gruppe? Dann wird die zweite
  Rechtegruppe f"ur Group benutzt. Die tats"achliche Pr"ufung
  passiert, indem die besitzende Gruppe in der Liste GID's gesucht
  wird, in der der Benutzer aufgenommen ist.
\item Ist beides nicht der Fall, so wird die dritte Rechtemaske f"ur
  Others benutzt.
\end{itemize}

Wenn entschieden wurde, welche Rechtemaske verwendet werden soll, wird
nicht mehr versucht, eine andere Rechtemaske zu verwenden. Wenn ein
Benutzer sich selbst das Leserecht auf einer Datei genommen hat, und
dem Rest der Welt "uber die Maske Others Leserecht gegeben hat, wird
er die Datei nicht lesen k"onnen.

\subsection{Eintr"age in einer ACL}

Da ACLs eine reine Erweiterung des Unix-Rechtemodells sind, gibt es
weiterhin einen Dateibesitzer und eine besitzende Gruppe f"ur jede
Datei. Eine Access Control List kennt eine Anzahl unterschiedlicher
Eintr"age:

\begin{description}
\item[ACL\_USER\_OBJ:] Dies ist die Rechtemaske f"ur den
  Dateibesitzer. Sie entspricht der ersten Rechtemaske f"ur den User
  im klassischen Rechtemodell.
\item[ACL\_GROUP\_OBJ:] Dies ist die Entsprechung der
  Group-Rechtemaske im klassischen Modell.
\item[ACL\_OTHER:] Die Rechtemaske f"ur den Rest der Welt unter Unix.
  Von diesen ersten drei Eintr"agen gibt es jeweils genau einen in
  jeder ACL.
\item[ACL\_USER:] Ein Eintrag f"ur einen benannten Benutzer.  Von
  diesem Eintrag kann es mehrere geben, mit denen f"ur
  unterschiedliche Benutzer unterschiedliche Rechte vergeben werden.
  Gibt es einen Benutzereintrag ohne jegliche Rechte, kann dieser auf
  die Datei nicht zugreifen.
\item[ACL\_GROUP:] Eintrag f"ur eine Gruppe. Auch von diesem Eintrag
  kann es mehrere geben.
\item[ACL\_MASK:] Die Maske f"ur die effektiven Rechte. Sobald f"ur
  eine Datei ACLs verwendet werden, wird \prog{ls -l} diese
  Rechtemaske als Gruppenrecht anzeigen. Sobald mit \prog{chmod} die
  Rechte f"ur die besitzende Gruppe ver"andert werden (etwa per
  \prog{chmod g-rx}), wird die ACL\_MASK ver"andert.
\end{description}

\subsection{Rechte mit ACLs}

Wenn ein Prozess auf eine Datei zugreifen will, wird mit dem folgenden
Algorithmus festgestellt, ob der Zugriff zugelassen oder verweigert
wird.

\begin{itemize}
\item Ist die EUID des Prozesses gleich dem Dateibesitzer, wird der
  Zugriff gew"ahrt, wenn der Eintrag f"ur ACL\_USER\_OBJ die
  ben"otigten Zugriffsrechte enth"alt.
\item Wenn es in der ACL einen ACL\_USER Eintrag gibt, der der EUID
  entspricht, wird dieser Eintrag verwendet. Ist dass gew"unschte
  Recht in diesem Eintrag vorhanden, wird der Zugriff gew"ahrt, sofern
  es \emph{auch} im Eintrag ACL\_MASK vorhanden ist. Ist das Recht
  entweder im ACL-Eintrag oder in ACL\_MASK \emph{nicht} vorhanden,
  wird das Recht verweigert.
\item Ist der Benutzer in der besitzenden Gruppe der Datei ist
  (Eintrag f"ur ACL\_GROUP\_OBJ), oder wenn der Benutzer in einer
  Gruppeneintr"age vom Typ ACL\_GROUP ist, wird folgendes getestet:
  Sind die gew"unschten Rechte in einem der Eintr"age vollst"andig
  vorhanden, so wird der Zugriff gew"ahrt, sofern das Recht ebenfalls
  im Eintrag ACL\_MASK vorhanden ist. Ansonsten wird der Zugriff
  verweigert.
\item Wenn kein Eintrag gefunden werden konnte, wird der Zugriff
  anhand des Eintrags ACL\_OTHER gew"ahrt.
\end{itemize}

Es ist hier wichtig festzustellen, da"s die Benutzereintr"age in einer
ACL immer \emph{vor} Gruppeneintr"agen durchsucht werden. Damit werden
die spezifischeren Eintr"age grunds"atzlich vorrangig vor den weniger
spezifischen Eintr"agen behandelt.

\subsection{ACL-Beispiel}

Linux unterst"utzt mit dem richtigen Kernelpatch die beschriebenen
ACLs auf dem Ext2-Dateisystem. Der Kernelpatch ist zu diesem Zeitpunkt
(Sommer 2001) notwendig, da Linus Torvalds ihn noch nicht in den
Standardkernel aufgenommen hat. Unter
\href{http://acl.bestbits.at/}{http://acl.bestbits.at} findet man den
entsprechenden Kernelpatch und die notwendigen Utilities. ACLs setzen
kann man mit \prog{setfacl}, mit \prog{getfacl} werden ACLs angezeigt.

Das oben beschriebene Beispiel eines Verzeichnisses f"ur die
Finanzbuchhaltung l"a"st sich folgenderma"sen erstellen:

\begin{verbatim}
root@delphin:~ > cd /
root@delphin:/ > mkdir fibu
root@delphin:/ > chmod o-rwx fibu
root@delphin:/ > setfacl -m group:fibu:rwx fibu
root@delphin:/ > setfacl -m group:controlling:rx fibu
root@delphin:/ > setfacl -m user:mueller:--- fibu
root@delphin:/ > getfacl fibu
# file: fibu
# owner: root
# group: root
user::rwx
user:mueller:---
group::r-x
group:fibu:rwx
group:controlling:r-x
mask:rwx
other:---
\end{verbatim}

Obwohl der Benutzer \username{mueller} Mitglied der Gruppe
\username{controlling} ist, hat er keinen Zugriff auf dieses
Verzeichnis, da der ACL-Eintrag f"ur ihn keinen Zugriff erlaubt, und
dieser vor seinem Gruppeneintrag gefunden wird.

Interessant an diesem Beispiel ist die Behandlung der ACL-mask. Sie
wird in der Anzeige von \prog{ls -l} als Gruppenberechtigung
angezeigt. 

\begin{verbatim}
root@delphin:/ > ls -ld fibu
drwxrwx---   2 root     root         4096 Aug 28 07:56 fibu
\end{verbatim}

An der Ausgabe von \prog{getfacl} ist zu sehen, da"s die besitzende
Gruppe \username{root} nur Lese- und Ausf"uhrungsrechte hat. Trotzdem
zeigt \prog{ls -l} f"ur die Gruppe ein \prog{rwx} an. Dies wird
gemacht, um Benutzer vor "Uberraschungen zu sch"utzen. "Uber ACLs sind
auf dem Verzeichnis \dateistyle{fibu} mehr Rechte vergeben, als aus
der Ausgabe von \prog{ls -l} ersichtlich ist. Will man die
Rechtevergabe durch ACLs ausschalten, gen"ugt es, mit \prog{chmod
  g-rwx fibu} die Rechte f"ur die besitzende Gruppe komplett
wegzunehmen.

\subsection{Default ACLs}

Das vorangegangene Beispiel ist noch nicht vollst"andig. F"ur das
Verzeichnis \dateistyle{fibu} sind die Rechte korrekt gesetzt. Wenn
jedoch Benutzer in diesem Verzeichnis Dateien anlegen, gelten wieder
nur die normalen Regeln von Unix. Erreichen m"ochte man jedoch in der
Regel, da"s f"ur neue Dateien unterhalb eines solchen Verzeichnisses
wieder die gleichen Regeln gelten wie f"ur das Verzeichnis selbst.

Wenn eine neue Datei oder ein Verzeichnis erstellt wird, mu"s "uber
die Zugriffsrechte entschieden werden, die darauf gesetzt werden. Im
traditionellen Unixmodell wird die Rechtemaske auf neuen Dateien und
Verzeichnissen durch die so genannte \emph{umask} eingeschr"ankt. Ein
Programm, das eine Datei erzeugt, kann einen Satz von Zugriffsrechten
bestimmen, mit dem die Datei erzeugt werden soll. Bevor die Datei
tats"achlich mit diesen Rechten erzeugt wird, wird dieser Satz von
Rechten um die Bits eingeschr"ankt, die in der \emph{umask} gesetzt
sind. Wenn ACLs verwendet werden, ist dieses einfache Modell nicht
mehr verwendbar. Stattdessen kann man f"ur jedes Verzeichnis eine
so genannte \emph{Default ACL} vergeben. Diese werden an Dateien und
Verzeichnisse weitergegeben.

Setzen kann man die Default ACL, indem man dem Befehl \prog{setfacl}
den Schalter \prog{-d} mitgibt:

\begin{verbatim}
root@delphin:/ > setfacl -d -m group:fibu:rwx fibu/
root@delphin:/ > setfacl -d -m group:controlling:r-x fibu
root@delphin:/ > setfacl -d -m user:mueller:--- fibu
root@delphin:/ > getfacl fibu
# file: fibu
# owner: root
# group: root
user::rwx
user:mueller:---
group::r-x
group:fibu:rwx
group:controlling:r-x
mask:rwx
other:---
default:user::rwx
default:user:mueller:---
default:group::r-x
default:group:fibu:rwx
default:group:controlling:r-x
default:mask:rwx
default:other:---
\end{verbatim}

Mit diesen Eintr"agen ist das Beispielverzeichnis vollst"andig. Die
Default-Eintr"age werden an neue Dateien und Verzeichnisse
weitergegeben. 

Zu beachten ist hier noch die umask des Benutzers. Sobald ACLs benutzt
werden, wirken die Gruppenrechte, die im \prog{ls} dargestellt und mit
\prog{chown} ge"andert werden, als \emph{mask} einschr"ankend auf die
ACLs. Wenn die umask eines Unix-Benutzers so gesetzt ist, da"s die
Gruppe eingeschr"ankt wird, so wirkt sich das beim Einsatz von ACLs so
aus, da"s bei neu angelegten Dateien und Verzeichnissen diese
Gruppeneinschr"ankungen als \emph{mask} wirken und somit die default
ACLs beschr"anken.

\subsection{ACLs aus Windows-Sicht}

Was hat das ganze mit Samba zu tun? Zun"achst einmal sind
Windows-Administratoren gewohnt, deutlich st"arker mit ACLs zu
arbeiten, als Unixbenutzer. Dies mag daran liegen, da"s Unix lange
Zeit keine ACLs unterst"utzt hat und man vieles auch mit den
traditionellen Zugriffsrechten erreichen kann. Bei der Planung eines
Sambaservers als Ersatz f"ur einen NT-Server stellt sich so
zwangsl"aufig die Frage nach der Unterst"utzung von ACLs.

Der Zusammenhang mit Samba ergibt sich nun daraus, da"s mit Samba 2.2
diese ACLs von Windows aus angeschaut und sogar gesetzt werden
k"onnen. Dazu mu"s bei der Kompilation von Samba die Option
\prog{-{}-with-acl-support} an das Skript \prog{configure} "ubergeben
worden sein, und beim Kompilieren mu"s die ACL-Unterst"utzung in den
Headerfiles des Kernels vorhanden sein. Ist beides der Fall, kann man
"uber die Sicherheitseigenschaften von Dateien und Verzeichnissen
deren ACLs editieren. Dabei ergibt sich bei der Umsetzung von den sehr
komplexen NT-ACLs zu den deutlich einfacheren Posix-ACLs h"aufig eine
gewisse Einschr"ankung der Funktionalit"at, aber dies ist leider nicht
zu vermeiden. Die Anforderungen, die im obigen Beispiel skizziert
wurden, werden jedoch korrekt umgesetzt. Wer sich f"ur die genaue
Umsetzung der ACLs zwischen der NT- und der Posix-Welt interessiert,
mag sich die Datei \dateistyle{samba-acls.ag.pdf} aus dem
Unterverzeichnis \prog{slides} eines Samba-FTP Servers ansehen. Dies
sind die Folien eines Vortrags von Jeremy Allison "uber jene
Umsetzung, den er bei der CIFS 2001 Konferenz in Bellevue gehalten
hat.

\section{oplocks}

Dateizugriffe "uber ein Netzwerk sind trotz leistungsf"ahiger
Netzwerkhardware meistens deutlich langsamer als auf einer lokalen
Festplatte. Der lokale Hauptspeicher, der heutzutage in den meisten
Workstations im "Uberflu"s vorhanden ist, ist nochmal um
Gr"o"senordnungen schneller. F"ur lokale Festplatten gibt es in allen
Systemen Caches im Hauptspeicher, und so w"are es Verschwendung,
Caching nicht auch auf Netzwerkdateien anzuwenden. Netzwerkzugriffe,
die gar nicht erst gemacht werden m"ussen, sind die schnellsten
Zugriffe. Im Gegensatz zu einem lokalen Festplattencache kann ein
Cache von Netzwerkdateien nicht davon ausgehen, die Datei alleine zu
benutzen\footnote{Geteilte Blockger"ate in einem Storage Area Network
  sei hier einmal au"sen vor gelassen.}. Zugriffe unterschiedlicher
Clients m"ussen koordiniert werden.

Opportunistic Locks (Oplocks) sind ein Mechanismus, mit dem Clients
erlaubt werden kann, Dateiinhalte zu cachen. Mit einem Oplock bekommt
der Client eine Datei solange exklusiv f"ur sich, bis der Server ihn
auffordert, die "Anderungen zur"uckzuschreiben und die Sperre
freizugeben.

Ein Client A m"ochte eine Datei "offnen und beantragt ein Oplock auf
die Datei. Wenn der Server dieses Oplock gew"ahrt, ist das die Zusage,
da"s niemand anders auf die Datei zugreift. Damit mu"s Client A
weder bei jedem Lesezugriff den Server befragen, noch mu"s er jeden
Schreibzugriff unverz"uglich an den Server liefern. Moderne
Windowsclient nutzen dieses Feature sehr ausgiebig und erreichen damit
in typischen Applikationen zwischen drei"sig und vierzig Prozent mehr
Geschwindigkeit.

Wenn ein zweiter Client, B, auf die Datei "offnen m"ochte, schickt der
Server dem Client A ein so genanntes Oplock Break. Dies ist die
Anweisung, s"amtliche lokalen "Anderungen zur"uckzuschreiben und den
Schreibcache auf dieser Datei in Zukunft auszuschalten. Erst nachdem
Client A alle "Anderungen zur"uckgeschrieben hat, wird Client B die
Datei "offnen k"onnen. Da keiner von beiden noch ein Oplock bekommt,
sehen beide s"amtliche "Anderungen sofort.

Dieses Schema funktioniert innerhalb von Samba hervorragend. Sobald
Unix-Prozesse ebenfalls auf Dateien zugreifen m"ussen, die von Samba
freigegeben sind, gibt es Probleme mit Oplocks. Beispielsweise wird es
nicht m"oglich sein, vern"unftig Datensicherung zu betreiben, da
Clients m"oglicherweise nicht alle Daten zum Server geschickt haben.

Es gibt mehrere M"oglichkeiten, dieses Problem in den Griff zu
bekommen:

\begin{description}
\item[Keine Oplocks:] Durch den Parameter \param{oplocks = no} k"onnen
  Oplocks f"ur eine Freigabe komplett abgeschaltet werden. Damit
  handelt man sich aber massive Performanceprobleme ein.
\item[Keine Oplocks f"ur einzelne Dateien:] Der Parameter \param{veto
    oplock files} verweigert Oplocks f"ur einzelne Dateien. Dieser
  Parameter verlangt eine Liste von Unix-Pfadnamen oder
  DOS-Wild\-cards. Die Syntax ist in der Beschreibung zum Parameter
  \param{veto files} zu finden.
\item[Kernel Oplocks:] Das Problem mit Oplocks liegt darin, da"s Samba
  vom Kernel nicht informiert werden kann, wenn ein Unixproze"s eine
  Datei "offnen will. Samba k"onnte f"ur diese Datei ein Oplock
  vergeben haben und m"u"ste es vom Client zur"uckfordern, bevor der
  Unixproze"s die Datei "offnen kann. IRIX und Linux 2.4 sind um ein
  API erweitert worden, das genau dies leistet. Um Kernel Oplocks zu
  nutzen, mu"s Samba entsprechend kompiliert werden. Liegen bei der
  Kompilation die Quellen des Kernel 2.4 vor, erkennt Samba diese
  automatisch. Sollten sich bei der Nutzung dieses Features Probleme
  herausstellen, kann es mit \param{kernel oplocks = no} abgeschaltet
  werden, obwohl dies nie notwendig sein sollte.
\end{description}

Bevor Samba Oplocks unterst"utzt hat, konnte man mit \param{fake
  oplocks = yes} f"ur read only Freigaben jegliche Oplocks vergeben,
ohne sie jemals zur"uckzufordern. Dies sollte man heutzutage
\emph{nicht} mehr einsetzen.

\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. Seit 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.

Klassische symmetrische Verschl"usselung funktioniert folgenderma"sen:
Jemand m"ochte einem Bekannten\footnote{In der Literatur hei"sen diese
  beiden Bekannten Alice und Bob. Es gibt ganze Abhandlungen dazu, was
  diesen beiden schon alles passiert ist$\ldots$} eine geheime
Nachricht zukommen lassen. Das hei"st, jemand, der die "Ubertragung
abh"ort, soll diese Nachricht nicht lesen k"onnen. Dazu kann man ein
symmetrisches Verfahren wie DES, IDEA oder AES einsetzen. Diese
Verfahren zerst"uckeln die Nachricht so, da"s sie niemand mehr lesen
kann, au"ser jemand wei"s, mit welchem Verfahren die Nachricht
verschl"usselt wurde. Zu jedem Verschl"usselungsverfahren gibt es
n"amlich ein Gegenst"uck, das aus der zerst"uckelten Nachricht das
Original wieder herstellt. Es gibt auch Verfahren, bei denen es keinen
R"uckweg gibt. Diese sind zwar f"ur die genannte Anwendung nicht
brauchbar, denn man kommt nicht mehr an die Nachricht, aber in anderen
Bereichen sind diese so genannten Hashverfahren sehr weit verbreitet.

Alle heute verwendeten symmetrischen Verschl"usselungsverfahren
verwenden zus"atzlich Schl"ussel. Erst mit einem Schl"ussel wird die
genaue Methode festgelegt, mit der die Nachricht verschl"usselt wird.
Jemand, der die verschl"usselte Nachricht liest, mu"s also nicht nur
das grunds"atzliche Verfahren kennen, sondern insbesondere mu"s er den
Schl"ussel herausbekommen, um die Nachricht lesen zu k"onnen. Das
Raten des Schl"ussels ist meistens der viel schwierigere Teil, da es
sehr viel mehr Schl"ussel gibt als Verschl"usselungsverfahren. An
dieser Stelle kommt die vielzitierte Schl"ussell"ange ins Spiel. Wenn
ein Schl"ussel wie bei DES 56 Bit lang ist, dann gibt es $2^56 =
72.057.594.037.927.936$ verschiedene Schl"ussel. Mit heutiger
Technologie k"onnen diese Schl"ussel alle in kurzer Zeit ausprobiert
werden, daher arbeiten moderne Verfahren mit mindestens 128 Bit langen
Schl"usseln. Man nimmt an, da"s $2^128$ Schl"ussel auch in der
absehbaren Zukunft nicht alle durchprobiert werden k"onnen. Abbildung
\ref{symmetrisch} verdeutlicht die symmetrische Verschl"usselung.

\begin{figure}\[
\setlength{\unitlength}{1cm}
\begin{picture}(11,3.5)

\put(0,0){\framebox(11,3.5){}}

\put(4,0){\line(0,1){3.5}}
\put(7,0){\line(0,1){3.5}}
\put(0,2.5){\line(1,0){11}}

\put(2,3){\makebox(0,0){Alice}}
\put(5.5,3){\makebox(0,0){Eve}}
\put(9,3){\makebox(0,0){Bob}}

\put(0.2,1.5){\framebox(1,0.5){Pssst!}}
\put(1.2,1.75){\vector(1,0){0.8}}
\put(2,1.5){\framebox(1,0.5){AES}}
\put(3,1.75){\vector(1,0){1.6}}
\put(1.6,0.3){\framebox(1.8,0.5){Schl"ussel}}
\put(2.5,0.8){\vector(0,1){0.7}}

\put(4.6,1.5){\framebox(1.8,0.5){@Yx!?a\{}}
\put(6.4,1.75){\vector(1,0){1.6}}

\put(8,1.5){\framebox(1,0.5){AES}}
\put(7.6,0.3){\framebox(1.8,0.5){Schl"ussel}}
\put(8.5,0.8){\vector(0,1){0.7}}
\put(9,1.75){\vector(1,0){0.8}}
\put(9.8,1.5){\framebox(1,0.5){Pssst!}}

\end{picture}\]
\caption{Symmetrische Verschl"usselung}
\label{symmetrisch}
\end{figure}

\subsection{Challenge-Response Verfahren}

Werden im SMB-Protokoll verschl"usselte Pa"sw"orter verwendet, so wird
die symmetrische Verschl"usselung trickreich eingesetzt. Der Client
m"ochte eine Verbindung zum Server aufbauen. Bevor dies geschieht,
mu"s der Benutzer seinen Namen und sein Pa"swort eingeben. Erst danach
baut der Client die Verbindung zum Server auf. In der Antwort auf die
erste Anfrage des Clients, der Negotiate Protocol Response, schickt
der Server dem Client eine Zufallszahl. Diese Zufallszahl wird
Herausforderung genannt.

Der Client verf"ugt nun "uber drei Werte: Den Benutzernamen, das
Pa"swort des Benutzers und die Herausforderung. Das Pa"swort soll nun
verschl"usselt "uber das Netz "ubertragen werden. Ein naiver Ansatz
w"are, die Herausforderung als Schl"ussel f"ur ein symmetrisches
Verschl"usselungsverfahren einzusetzen. Der Server kennt die
Herausforderung, da er sie selbst verschickt hat, kann also das
verschl"usselte Pa"swort wieder entschl"usseln. Das Problem liegt
darin, da"s jeder Zuh"orer ebenfalls den Schl"ussel kennt, also auch
das Pa"swort entschl"usseln kann. Daher wird anders vorgegangen: Das
Pa"swort wird als Schl"ussel benutzt, um die Herausforderung zu
verschl"usseln. Diese mit dem Pa"swort verschl"usselte Herausforderung
schickt der Client im Session Setup zusammen mit dem Benutzernamen an
den Server.

Wor"uber verf"ugt der Server, wenn er den Session Setup erhalten hat?
Er hat sich die Zufallszahl gemerkt, und der Client hat im den
Benutzernamen geschickt. Aus der Benutzerdatenbank kann er damit das
Pa"swort des Benutzers auslesen. Mit diesem ausgelesenen Pa"swort als
Schl"ussel entschl"usselt der Server die verschl"usselte
Herausforderung und pr"uft, ob wieder die versendete Zufallszahl
herauskommt. Ist dies der Fall, stimmen die beiden Schl"ussel
"uberein. Das hei"st, der Client hat die als Herausforderung gesendete
Zufallszahl mit dem gleichen Pa"swort verschl"usselt, das auch der
Server in seiner Benutzerdatenbank gespeichert hat. Stimmt der
entschl"usselte Wert nicht mit der gesendeten Zufallszahl "uberein,
wurde f"ur die Verschl"usselung ein anderer Schl"ussel, also ein
anderes Pa"swort, benutzt, als f"ur die Entschl"usselung. Das am
Client eingegebene Pa"swort stimmt also nicht mit dem "uberein, das
der Server in seiner Benutzerdatenbank gespeichert hat. Der Server
bekommt nicht heraus, welches Pa"swort der Client benutzt hat, aber
das mu"s er auch gar nicht. Das Pa"swort war in jedem Fall falsch.

Abbildung \ref{encrypt-challenge} verdeutlicht die verwendete
Verschl"usselung, Abbildung \ref{challenge-requests} den zeitlichen
Ablauf des Protokolls.

\begin{figure}\[
\setlength{\unitlength}{1cm}
\begin{picture}(11,3.5)

\put(0,0){\framebox(11,3.5){}}

\put(4,0){\line(0,1){3.5}}
\put(7,0){\line(0,1){3.5}}
\put(0,2.5){\line(1,0){11}}

\put(2,3){\makebox(0,0){Client}}
\put(5.5,3){\makebox(0,0){Zuh"orer}}
\put(9,3){\makebox(0,0){Server}}

\put(0.2,1.5){\framebox(1.2,0.5){Zufall}}
\put(1.4,1.75){\vector(1,0){0.6}}
\put(2,1.5){\framebox(1,0.5){DES}}
\put(3,1.75){\vector(1,0){1.6}}
\put(1.6,0.3){\framebox(1.8,0.5){Pa"swort}}
\put(2.5,0.8){\vector(0,1){0.7}}

\put(4.6,1.5){\framebox(1.8,0.5){@Yx!?a\{}}
\put(6.4,1.75){\vector(1,0){1.6}}

\put(8,1.5){\framebox(1,0.5){DES}}
\put(7.6,0.3){\framebox(1.8,0.5){Pa"swort}}
\put(8.5,0.8){\vector(0,1){0.7}}
\put(9,1.75){\vector(1,0){0.5}}
\put(9.5,1.5){\framebox(1.3,0.5){Zufall?}}

\end{picture}\]
\caption{Verschl"usselung der Herausforderung}
\label{encrypt-challenge}
\end{figure}

\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}
\label{challenge-requests}
\end{figure}

Warum ist das Verfahren sicher? Die mit dem Pa"swort verschl"usselte
Herausforderung hat den Server davon "uberzeugt, da"s der Benutzer
sein Pa"swort kennt. Man k"onnte vermuten, da"s man diese
verschl"usselte Herausforderung einfach nochmal schicken mu"s, um die
Rechte des Benutzers zu bekommen. Dieser so genannte Replay-Angriff
schl"agt jedoch fehl, da bei jeder neuen Anmeldung eine neue
Herausforderung verschl"usselt werden mu"s. Dies gilt nat"urlich nur,
wenn der Server sich jedes Mal eine neue Herausforderung
ausdenkt$\ldots$

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?

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"usselungsalgorithmus gew"ahlt werden, der
gegen einen solchen Angriff f"ur alle praktischen Belange immun ist.

\subsection{Vor- und Nachteile von verschl"usselten Pa"sw"ortern}

Das Challenge-Response 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. Die meisten
Linuxsysteme speichern diesen Wert in der Datei \dateistyle{/etc/shadow},
andere Unixe k"onnen die Pa"swortdatenbank in anderen Dateien abspeichern. Der
Wert, der dort gespeichert wird, ist f"ur die Authentifizierung benutzbar. Der
Server ist jedoch nicht in der Lage, daraus das Klartextpa"swort des Benutzers
zu berechnen.

Die Authentifizierung unter Unix benutzt eine Hashfunktion, die drei
Eigenschaften erf"ullt:

\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, bei denen es keinen R"uckweg gibt, der
irgendwie berechnet werden kann. Um f"ur einen Funktionswert den Ausgangswert
herauszubekommen, mu"s man alle m"oglichen Ausgangswerte durchprobieren oder
gleich eine Wertetabelle mit allen Ausgangswerten anlegen.\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 so genannte 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 \dateistyle{/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"swortdatenbankgepflegt
werden, die Datei \dateistyle{smbpasswd}.

Was bis jetzt beschrieben wurde, entspricht nur fast der Wahrheit. Oben wurde
beschrieben, da"s die Verschl"usselung der Herausforderung mit dem Pa"swort des
Benutzers geschieht. Dies ist so nicht ganz richtig. Die Verschl"usselung
geschieht mit einem Hashwert des Pa"swortes. Dieser Hashwert wird vom Client
direkt nach Eingabe des Pa"swortes gebildet und gespeichert. Das gesamte oben
beschriebene Verfahren wird dann mit diesem Hashwert durchgef"uhrt. Das hei"st,
da"s auch in der Datei \dateistyle{smbpasswd} keine echten Klartextpa"sw"orter
gespeichert werden m"ussen, sondern diese Hashwerte. Das hei"st, da"s man mit
den dort enthaltenen Werten so direkt nicht mehr anfangen kann als mit den
Werten aus der Datei \dateistyle{/etc/shadow} unter Unix. 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
\dateistyle{smbpasswd} ohne Einsatz von crack bei einem NT-Rechner
anzumelden. Damit sind die Werte aus der \dateistyle{smbpasswd} so gut wie
Klartextpa"sw"orter.

Alles nicht dramatisch, sagt Microsoft. Das "Aquivalent zur Datei
\dateistyle{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
\dateistyle{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. Windows 2000 mit dem dort eingesetzten
Kerberos-Verfahren ist in dieser Hinsicht "ubrigens nicht besser. Der
Dom"anencontroller kennt hier ebenfalls die Klartextpa"sw"orter der Benutzer.
Ihm wird also genau so vertraut wie einem NT4-Dom"anencontroller.

Sollte ein neugieriger Administrator einmal an den tats"achlichen
Klartextpa"sw"ortern seiner Benutzer interessiert sein, dann macht NT
es ihm deutlich einfacher als Unix dies tut. Unix verwendet so
genannte 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
\dateistyle{/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.

\subsection{NT4 Service Pack 3}

Um die Pa"swortverschl"usselung im Zusammenhang mit Windows NT 4
Service Pack 3 und Windows 95 in sp"ateren Versionen gibt es immer
noch weitverbreitete Mi"sverst"andnisse. Beispielsweise da"s alle
Systeme vorher nicht in der Lage waren, mit verschl"usselten
Pa"sw"ortern zu arbeiten. Richtig ist folgendes:

\begin{itemize}
\item \emph{Alle} Clients sind in der Lage, mit verschl"usselten
  Pa"sw"ortern umzugehen. Das gilt f"ur alle aktuellen Clients
  sowieso. Aber sogar der DOS-LanManager-Client, den man sich heute
  noch von Microsofts FTP-Server laden kann, kann Pa"sw"orter
  verschl"usseln.
\item Auch die neuen Clients k"onnen sowohl mit verschl"usselten
  Pa"sw"ortern, als auch mit Klartextpa"sw"ortern umgehen.
\item Windows NT4 Service Pack 3 ist das erste NT-System, das sich in
  der Default-Einstellung weigert, Klartextpa"sw"orter zu verschicken.
\end{itemize}

Ein Client wirkt an der Entscheidung "uber verschl"usselte Pa"sw"orter
zun"achst einmal "uberhaupt nicht mit. Der Server wird f"ur
verschl"usselte oder f"ur Klartextpa"sw"orter mit der Einstellung
\param{encrypt passwords} konfiguriert. In der Antwort zum Negotiate
Protocol teilt der Server dem Client seine Entscheidung mit. Der
Server verschickt im Falle der verschl"usselten Pa"sw"orter noch eine
Herausforderung mit. Der Server teilt dem Client m"oglicherweise mit,
da"s er ein Klartextpa"swort sehen will. Der Client kann nur noch die
Verbindung sofort abbrechen, sofern er keine Pa"sw"orter im Klartext
verschicken m"ochte. Windows NT tut dies ab Service Pack 3 mit der
Fehlermeldung, da"s man sich micht diesem Konto nicht an dem Server
anmelden kann. 

\begin{center}
\epsfig{file=konto.eps,width=6cm}
\end{center}

Windows 95 und folgende fragen immer wieder nach dem Kennwort f"ur die
Freigabe \texttt{IPC\$}. F"ur alle Clientbetriebssysteme liefert Samba
im Unterverzeichnis \dateistyle{docs/} Registrierungsdateien mit, mit
denen diese Verweigerung von Klartextpa"sw"ortern abgestellt werden
kann.

Mit Klartextpa"sw"ortern bekommt man den gro"sen Vorteil, da"s man
nicht zwei verschiedene Pa"swortdatenbanken pflegen mu"s. Einige
Nachteile handelt man sich jedoch ein:

\begin{itemize}
\item Man mu"s heutzutage jeden Client anfassen, um die Registrierung
  zu "andern.
\item Man versendet Pa"sw"orter im Klartext, man hat also ein
  m"oglicherweise erhebliches Sicherheitsproblem. Tools wie
  \prog{dsniff}\footnote{Suchen Sie einmal auf http://freshmeat.net
    nach dsniff und lesen Sie das README.} sammeln die Pa"sw"orter
  automatisch auf.
\item Man verliert jegliche Dom"anenfunktionalit"at, auf die weiter
  unten noch genauer eingegangen wird. Ein Dom"anencontroller kann nur
  mit verschl"usselten Pa"sw"ortern funktionieren.
\end{itemize}

Insgesamt kann man nur zu verschl"usselten Pa"sw"ortern raten, wenn
nicht wirklich wichtige Gr"unde f"ur Klartextpa"sw"orter sprechen.

\subsection{Migration zu verschl"usselten Pa"sw"ortern}

Sind momentan Klartextpa"sw"ortern auaf einem Server im Einsatz, und
ist die Migration zu verschl"usselten Pa"sw"ortern geplant, gibt es
einen sehr einfachen Weg, dies binnen einer Woche ohne gro"se Arbeit
zu erledigen. Direkt aus der \dateistyle{/etc/shadow} bekommt man die
die NT- und LanManager-Hashes leider nicht heraus, da man dazu die
Klartextpa"sw"orter ben"otigt. Nur aus diesen k"onnen die
Windows-Hashwerte berechnet werden. Die Clients liefern die
Pa"sw"orter jedoch bei jedem Anmelden im Klartext zum Server, und
daraus k"onnen dann die Hashwerte berechnet werden. Dazu mu"s man aus
der \dateistyle{/etc/passwd} mit dem Skript
\dateistyle{mksmbpasswd.sh} zun"achst eine Datei
\dateistyle{smbpasswd} machen, in der alle Benutzer mit leerem
Pa"swort angelegt sind. Dieses Skript findet sich in den Samba-Quellen
im Unterverzeichnis \dateistyle{source/script}. Die neu angelegte
\dateistyle{smbpasswd} mu"s dann mit den korrekten Zugriffsrechten
versehen werden:

\begin{verbatim}
sh mksmbpasswd.sh < /etc/passwd > /etc/smbpasswd
chown root.root /etc/smbpasswd
chmod 700 /etc/smbpasswd
\end{verbatim}

Die Migration leitet man mit den folgenden Einstellungen ein:

\begin{verbatim}
[global]
   encrypt passwords = no
   update encrypted = yes
\end{verbatim}

Jeder Benutzer, der sich anmeldet, liefert sein Pa"swort im Klartext
an den Server. Dieser berechnet daraus die beiden Windows-Hashwerte
und tr"agt sie in der \dateistyle{/etc/smpasswd} ein. Das hei"st, man
mu"s jetzt nur abwarten, bis sich alle Benutzer einmal angemeldet
haben, und kann dann verschl"usselte Pa"sw"orter aktivieren:

\begin{verbatim}
[global]
   encrypt passwords = yes
   update encrypted = no
\end{verbatim}

\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
\dateistyle{/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 so genannte 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 so genannten 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. Diese
Warteschlange mu"s das Format verstehen, das vom Windowsdruckertreiber
geliefert wird. Also sollte hier entweder Postscript angenommen
werden, oder die Daten sollten per so genannter 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{Windows NT Dom"anen}

Installiert man eine Arbeitsgruppe von Windows NT Rechnern, dann
bekommt man komplett getrennte Benutzerdatenbanken auf den einzelnen
Rechnern. Erstellt man auf einem Server eine Freigabe und m"ochte f"ur
diese Freigabe Rechte vergeben, so mu"s man zun"achst die
Benutzer\footnote{Windows NT benutzt grunds"atzlich \param{security =
    user}} einrichten, die Rechte auf dieser Freigabe bekommen sollen.
Greift ein Benutzer von einer anderen Workstation auf die Freigabe zu,
so probiert die Workstation das so genannte transparente Anmelden: Die
Workstation versucht es erst einmal mit dem lokal angemeldeten
Benutzer und seinem Pa"swort. Dadurch sieht es so aus, als ob man nur
ein Benutzerkonto verwenden w"urde.

Die Administration der Benutzerdatenbanken kann komplett von einem
zentralen Rechner aus erfolgen. Dazu ben"otigt man den Benutzermanager
f"ur Dom"anen\footnote{Benutzermanager f"ur Dom"anen}, der
normalerweise bei Windows NT Server mitgeliefert wird. Man kann sich
diesen aber auch kostenlos von Microsoft von der Webseite
\url{http://www.microsoft.com/} beziehen. Man mu"s zu dem Rechner, den
man administrieren m"ochte, eine Verbindung als Administrator
aufbauen. Dazu mu"s man auf der Workstation, von der aus man
administriert, auf der Kommandozeile mit 

\begin{verbatim}
net use \\remote\ipc$ /user:administrator
\end{verbatim}

eine Verbindung aufgebaut werden. Kommt dann die Fehlermeldung
\emph{Die Referenzen passen nicht zu einer bestehenden
  Referenzenmenge}, so besteht unter einer anderen Benutzerkennung
bereits eine Verbindung. In diesem Fall mu"s man sich ab- und neu
anmelden, und den Befehl als allererstes absetzen, bevor irgend eine
Verbindung zum entfernten Rechner \nbname{remote} aufgebaut werden
kann. Hat man eine solche Verbindung, kann man im Benutzermanager f"ur
Dom"anen im Men"upunkt \emph{Dom"ane ausw"ahlen} mit
\nbname{\textbackslash{}\textbackslash{}remote} die Benutzerdatenbank
von \nbname{remote} ausw"ahlen und voll administrieren.

Diese Art der Administration skaliert nicht besonders gut. Jeden
Benutzer mu"s es auf jedem Server geben, die lokalen Workstations
brauchen ebenfalls separat gepflegte Benutzer. Mit Windows NT wurde,
um dieses Problem zu l"osen, das Dom"anenkonzept eingef"uhrt. Mit
einer Windows NT Dom"ane bekommt jeder Benutzer ein zentrales Konto,
das auf allen Dom"anenmitgliedern g"ultig ist.

Realisiert ist die Dom"ane durch einen speziellen Rechner, den Primary
Domain Controller PDC, der seine Benutzerdatenbank f"ur andere im Netz
zur Verf"ugung stellt. Alle Dom"anenmitglieder importieren diese
Benutzerdatenbank. Somit sind auf den Dom"anenmitgliedern zwei
Benutzerdatenbanken g"ultig: Die lokale und die des PDC.

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 den 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. Das hei"st, es mu"s f"ur jedes Dom"anenmitglied ein
Benutzerkonto auf dem PDC geben, damit f"ur dieses Konto ein Pa"swort
vergeben werden kann. Dieses Benutzerkonto hei"st "ublicherweise
Computerkonto.

\section{Samba als Primary Domain Controller}

Um Samba als PDC zu konfigurieren, sind in der \dateistyle{smb.conf}
im Abschnitt \param{[global]} 2 Einstellungen notwendig:

\begin{verbatim}
domain logons = yes
domain master = yes
\end{verbatim}

Eine vollst"andige \dateistyle{smb.conf} f"ur einen PDC sieht damit
folgenderma"sen aus\label{pdc-smbconf}:

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

Da"s ein PDC auch gleichzeitig Domain Master Browser sein mu"s, ist
eine Einschr"ankung der Implementation der Microsoft-Clients.
Eigentlich hat die Funktion des Domain Master Browsers (siehe
Abschnitt \ref{browsing-im-wan}) nichts mit der Funktion als zentraler
Server f"ur die Benutzerdatenbank zu tun. Die Clientimplementation von
Microsoft setzt aber voraus, da"s beide Funktionen auf einer Maschine
vereinigt sind. Auch funktionieren die Dom"anenfunktionen
ausschlie"slich mit verschl"usselten Pa"sw"ortern. Ist man auf
Klartextpa"sw"orter angewiesen, kann man Samba nicht als PDC
einsetzen.

Befinden sich Windows 9x Clients im Netz, k"onnen diese den Samba-PDC
sofort ohne weitere Konfiguration als Anmeldeserver nutzen. Dazu
tr"agt man in den Eigenschaften des Clients f"ur Microsoft-Netzwerke
ein, da"s sich die Clients an der Samba-Dom"ane anmelden m"ussen. Ist
dies erfolgreich, so kann man "uber die Systemsteuerung des Clients
direkt sein SMB-Pa"swort auf dem Server "andern.

\subsection{Manuelles Erstellen der Computerkonten}

F"ur Dom"anenmitglieder unter Windows NT oder 2000 m"ussen noch die
Computerkonten erstellt werden. Jedes Maschinenkonto mu"s unter Unix
als normaler Benutzer existieren. Dieser Benutzer braucht weder ein
Unixpa"swort, noch eine Login-Shell oder ein Heimatverzeichnis.  Der
Name des Benutzers ist der Name der Workstation, erg"anzt um ein
\$-Zeichen. Erstellt wird ein solcher Benutzer f"ur die Workstation
\nbname{WKS} unter Linux beispielsweise mit

\begin{verbatim}
root@erde: useradd -d /dev/null -s /bin/false wks\$
root@erde: smbpasswd -a -m wks
\end{verbatim}

Der Befehl \prog{smbpasswd -a -m wks} f"ugt den Benutzer mit einem
Standardpa"swort in die Datei \dateistyle{smbpasswd} ein. Das
Standardpa"swort f"ur Computerkonten ist der Name der Workstation, in
diesem Fall also \nbname{wks}. 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.

Nachdem das Computerkonto auf dem PDC erstellt wurde, kann in den
Eigenschaften der Netzwerkumgebung in die Dom"ane gewechselt werden.
Dabei wird das Pa"swort des Computerkontos ge"andert. Sollte aus
irgendwelchen Gr"unden ein erneutes Betreten der Dom"ane notwendig
sein, dann mu"s der Befehl \prog{smbpasswd -a -m wks} erneut
ausgef"uhrt werden, um das Pa"swort des Computerkontos auf den
Anfangswert zur"uckzusetzen.

\subsection{Automatisches Erstellen der Computerkonten}

Windows NT 4 bietet in dem Dialog, in dem in die Dom"ane gewechselt
wird, die M"oglichkeit, das Computerkonto automatisch erstellen zu
lassen. Dies geschieht unter Angabe eines Benutzers und Kennwortes,
der auf dem PDC berechtigt ist, Computerkonten zu erstellen. Dies ist
unter Unix nur \emph{root}, da die \dateistyle{/etc/passwd} hierzu
ge"andert werden mu"s.

Um das Computerkonto automatisch erstellen zu lassen, m"ussen zwei
Dinge auf dem PDC konfiguriert sein:

\begin{itemize}
\item \emph{root} oder ein anderer Benutzer mit der UID 0 mu"s ein
  Pa"swort in der \dateistyle{smbpasswd} haben. Dieses Pa"swort mu"s
  nicht mit dem Systempa"swort von \emph{root} "ubereinstimmen. Wenn
  man nicht \emph{root}, sondern beispielsweise einen Benutzer
  \emph{admin} mit der UID 0 verwendet, braucht dieser Benutzer nicht
  einmal eine Login-Shell auf Unix. Er mu"s nur in die
  \dateistyle{/etc/passwd} schreiben d"urfen.
\item Der Parameter \param{add user script} mu"s korrekt konfiguriert
  werden. Mit \param{add user script} wird ein Unix-Script angegeben,
  mit dem das Computerkonto in der \dateistyle{/etc/passwd} angelegt
  wird. Beispielsweise kann man mit

\begin{verbatim}
add user script = useradd -d /dev/null -s /bin/false %u
\end{verbatim}

  die gleiche Wirkung erzielen wie mit der manuellen Konfiguration aus
  dem letzten Abschnitt.
\end{itemize}

\subsection{BDCs mit Samba}

In einer echten NT Dom"ane gibt es zwei Arten von Dom"anencontrollern:
Prim"are Dom"anencontroller (PDCs) und Backup Dom"anencontroller
(BDCs). Der PDC besitzt die Hauptkopie der Benutzerdatenbank
SAM\todo{uebersetzung}, die BDCs halten read-only Kopien der SAM vor,
um Authentifizierungsanfragen von Workstations und Mitgliedsservern
beantworten zu k"onnen. Alle "Anderungen an der Benutzerdatenbank,
beispielsweise Pa"swort"anderungen, m"ussen auf dem PDC durchgef"uhrt
werden. Der PDC "ubertr"agt diese "Anderungen dann an die BDCs, damit
diese wieder "uber den aktuellen Stand der Datenbank verf"ugen.

Samba 2.2.2 ist noch kein voller Ersatz f"ur einen Backup Domain
Controller in einer echten NT-Dom"ane. Auch kann Samba als PDC keinen
echten NT-BDC mit Dom"anendaten versorgen. Die Protokolle zur
Replikation der Benutzerdatenbank sind noch nicht vollst"andig
implementiert. Das Samba Team, insbesondere Tim Potter, arbeitet
jedoch daran, die Protokolle zu verstehen und in Samba zu integrieren.
Vermutlich ist mit Erscheinen dieses Buches die echte
BDC-Funktionalit"at bereits in Samba integriert.

Wird Samba als PDC eingesetzt, k"onnen weitere Sambaserver jedoch als
Backup Domain Controller eingesetzt werden. Die Replikation der
Benutzerdatenbank zwischen den Servern kann mit Unix-Bordmitteln
vorgenommen werden. Die wesentliche Idee beim Einsatz eines BDC ist
seine \dateistyle{smb.conf}:

\begin{verbatim}
workgroup = samba
encrypt passwords = yes
domain master = no
domain logons = yes
\end{verbatim}

Der Unterschied zum PDC ist die Zeile \param{domain master = no} im
Gegensatz zu \param{domain master = yes}. Mit dieser
\dateistyle{smb.conf} sehen die Workstations den BDC als
Dom"anencontroller f"ur die Dom"ane \nbname{SAMBA} an.

Wenn eine Workstation einen Benutzer authentifizieren mu"s, tut sie
dies nicht selbst, sondern sucht ihren Dom"anencontroller f"ur die
Best"atigung der Identit"at des Benutzers. Dies tut sie, indem sie
eine NetBIOS-Namensanfrage nach dem Namen \nbname{SAMBA<1c>} absetzt.
\nbname{SAMBA<1c>} ist ein NetBIOS-Gruppenname, den jeder
Dom"anencontroller per Broadcast oder beim WINS-Server reserviert.
Diese Reservierung wird bei Samba durch den Parameter \nbname{domain
  logons = yes} angesto"sen. Im n"achsten Schritt authentifizieren
sich die Workstation und der Dom"anencontroller gegenseitig anhand des
Workstationkontos. Dieses Workstationkonto mu"s somit sowohl auf dem
PDC, als auch auf den BDCs vorhanden sein, damit die Workstation auch
die BDCs als Dom"anencontroller akzeptiert. Auch die gesamte restliche
Benutzerdatenbank mu"s vom PDC auf die BDCs "ubertragen werden.

\subsection{Hintergrund: Benutzerdatenbanken und SIDs}

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 \dateistyle{/etc/passwd}
nach.  Mit der Datei \dateistyle{/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. Die
Benutzerdatenbank wird im Netz kopiert, gilt aber
auf jedem Rechner rein lokal.

Unter NT ist das zun"achst genau so. Es gibt eine numerische Userid,
der Name des Benutzers ist nur w"ahrend der Anmeldung f"ur das System
interessant. Nach der Anmeldung ist nur noch die numerische Userid
relevant. Windows NT Benutzer sind jedoch im Gegensatz zu Unix
Benutzern "uber Rechnergrenzen hin g"ultig. Um dies zu erreichen, wird
der Benutzer nicht durch eine kleine Zahl beschrieben, sondern durch
einen so genannten Security Identifier SID. Dieser SID besteht aus zwei
wesentlichen Teilen. Der erste Teil besteht aus einer 96 Bit langen
Zahl, die die Benutzerdatenbank des SID eindeutig identifiziert. Der
zweite Teil ist der so genannte Relative Identifier RID. Der RID ist
mit der numerischen Userid unter Unix vergleichbar. Da eine Userid
unter NT jedoch \emph{nur} zusammen mit den 96 Bit der
Benutzerdatenbank verwendet werden, sind Benutzer unterschiedlicher
Maschinen oder Dom"anen unterscheidbar.

Mit dieser eindeutigen Zuordnung von Benutzern zu ihren jeweiligen
Benutzerdatenbanken wird es m"oglich, da"s eine Workstation
gleichnamige Benutzer aus mehreren Benutzerdatenbanken lokal v"ollig
gleichwertig verwenden kann. Je nachdem, ob sich ein Dom"anenbenutzer
oder ein lokaler Benutzer an der Workstation anmelden m"ochte, wird
die lokale Benutzerdatenbank oder die des PDC um Best"atigung des
Kennwortes gebeten. Ist dies erfolgt, ist der Benutzer dem System nur
noch unter dem numerischen SID bekannt. Dabei ist es v"ollig
gleichg"ultig, ob es sich bei diesem SID um einen lokalen, oder einen
Dom"anen-SID handelt.

Jeder Sambaserver generiert beim ersten Start seine eigene
Maschinenkennung und speichert sie in der Datei
\dateistyle{MACHINE.SID} ab. Die Maschinenkennung wird sp"atestens
dann ben"otigt, wenn der Sambaserver als Dom"anencontroller
konfiguriert wird. Die Benutzer, die sich an den Workstations
anmelden, m"ussen eine eindeutige Dom"anenkennung als Teil ihres SID
bekommen. Selbst wenn der Sambaserver nicht als Dom"anencontroller
fungiert, wird die Maschinenkennung verwendet. Beispielsweise bei der
Anzeige der ACLs in den Sicherheitseigenschaften von Dateien und
Verzeichnissen wird die Liste der Benutzer in Form eine SID-Liste
"ubergeben. Diese SIDs m"ussen eindeutig sein und mit separaten
Aufrufen in Benutzernamen "ubersetzt werden k"onnen.

\section{Profile, Logon Scripts und Policies}

Unter Unix gibt es f"ur jeden Benutzer ein Heimatverzeichnis als
einzigen Bereich im System, in dem der Benutzer schreiben kann. So
etwas kennt Windows in dieser restriktiven Form nicht, da viele
Anwendungen voraussetzen, "uberall im System schreiben zu k"onnen. Aus
Kompatibilit"atsgr"unden mu"s Windows also relativ offen sein. Dem
Heimatverzeichnis am n"achsten kommt unter NT das Profil des
Benutzers, ein ihm zugeordneter Bereich unter
\verb|c:\winnt\profiles\<benutzername>|. Dort ist der Desktop, der
benutzereigene Teil des Startmen"us, der Zweig HKEY\_CURRENT\_USER der
Registry und vieles andere abgelegt. Also alles, was zur
Arbeitsumgebung des Benutzers geh"ort.

Meldet sich ein Benutzer bei NT das erste Mal an, wird aus
\verb|c:\winnt\profiles\default user| eine Kopie in das benutzereigene
Profil gelegt. Beim Anmelden an der n"achsten Workstation wird der
gleiche Vorgang wiederholt. Das hei"st, jeder Benutzer hat an jeder
Workstation ein anderes Profil. In einer Dom"anenumgebung m"ochte man
nat"urlich erreichen, da"s ein Benutzer sein Profil mitnehmen kann,
da"s er also an jedem Arbeitsplatz seine eigene Umgebung vorfindet.
Windows l"ost dies mit den serverbasierten Profilen.

F"ur jeden Benutzer kann ein Pfad angegeben werden, in dem sein Profil
abgelegt wird. Viele Anwendungen setzen aber voraus, da"s das Profil auf
einer lokalen Platte abgelegt wird. Folglich kopiert Windows beim Anmelden
des Benutzers das Profil von seinem Serverpfad nach \verb|c:\winnt\profiles|
und bei jedem abmelden wieder zur"uck auf den Serverpfad.

Der Pfad f"ur das serverbasierte Profil wird bei Samba mit dem
Parameter \param{logon path} festgelegt. Der Standardpfad steht auf
\param{logon path =
\textbackslash{}\textbackslash{}\%N\textbackslash{}\%U\textbackslash{}profile}
.
Damit wird im Heimatverzeichnis des Benutzers auf dem PDC ein
Verzeichnis namens \dateistyle{profile} angelegt und das Profil dort
gespeichert.  Leider kann man mit Samba nicht sauber f"ur einzelne
Benutzer festlegen, da"s sie ihre Profile auf einem Server ablegen,
andere Benutzer ihre Profile aber lokal auf den Workstations belassen.

\todo{logon home f"ur win95}

\subsection{Anmeldeskripte}

Meldet sich ein Benutzer an einer Dom"ane an, kann der Primary Domain
Controller der Workstation mitteilen, da"s unter den Rechten des Benutzers
eine Batchdatei automatisch ausgef"uhrt werden soll, das so genannte
\emph{Logon Script}. Samba kennt den Parameter \param{logon
  script}, mit dem der Name des Logon Schriptes festgelegt wird.
Standarm"a"sig gibt es kein Logon Script. Wird eines festgelegt,
bezieht es sich immer auf eine \dateistyle{.bat}-Datei in der
festgelegten Freigabe \param{[netlogon]}. Eine vollst"andige
\dateistyle{smb.conf} f"ur einen PDC s"ahe so aus:

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

logon script = logon.bat

[homes]
writeable = yes
valid users = %S

 [netlogon]
path = /data/netlogon
\end{verbatim}

Ein einfaches Logon Script in \dateistyle{/data/netlogon/logon.bat}
kann so aussehen:

\begin{verbatim}
@echo off^M
net use h: \\pdc\homes^M
\end{verbatim}

Die \verb|^M|-Zeichen am Zeilenende bezeichnen die
DOS-Zeilenendekonvention, bei der an jedem Zeilenende zuerst ein
Carriage Return und dann ein Linefeed kommt. Unix kennt nur den
Linefeed als Zeilenende. Der Carriage Return ist hier entscheidend, da
ansonsten Windows diese Batchdatei nicht ausf"uhren wird. Wenn ein
Logon Script unter Unix editiert wird, bekommt man den Carriage Return
im Editor normalerweise durch die Kombination Control-V Control-M.
Moderne Editoren wie der vim oder der Emacs erkennen eine existierende
Datei mit DOS-Zeilenendekonvention automatisch und speichern sie auch
entsprechend wieder ab.

\section{Samba als Dom"anenmitglied}
\label{domain-member}
Wenn man mehr als einen Sambaserver betreibt oder einen echten Windows-Server
betreibt, ben"otigt man genau so wie mit einer echten Windows-Dom"ane eine
zentrale Benutzerverwaltung.

Die zentrale Verwaltung der Pa"sw"orter ist ein erster Schritt. Um dies zu
erreichen, mu"s man mit Samba eine Windows NT-Dom"ane betreten.  Dazu setzt
man in der \dateistyle{smb.conf} folgende Parameter:

\begin{verbatim}
[global]
  workgroup = windows
  security = domain
  password server = *
  encrypt passwords = yes
  name resolve order = wins bcast
\end{verbatim}

Im Kapitel \ref{smb-sitzungen} wurde beschrieben, wie eine SMB-Sitzung
aufgebaut wird. Dort wurde auf den Unterschied zwischen \param{security
= share} und \param{security = user} eingegangen. \param{security = domain}
verh"alt sich aus der Sicht eines Clients genau wie \param{security = user},
es wird vom Benutzer im Session
Setup ein Benutzername, eine Dom"ane und ein Kennwort verlangt. Ist das
Kennwort nicht korrekt, so wird der Benutzer zur"uckgewiesen.  Der Parameter
\param{security = domain} bewirkt nun, da"s das Pa"swort nicht wie bei
\param{security = user} in der lokalen \dateistyle{smbpasswd} nachgesehen
wird, sondern an einen PDC weitergeleitet wird. Dieser entscheidet dann, ob
das Pa"swort korrekt ist oder nicht. Best"atigt der PDC das Pa"swort,
akzeptiert Samba den Benutzer. Kann der PDC die Benutzeridentit"at nicht
best"atigen, macht Samba einen zweiten Versuch anhand der lokalen
\dateistyle{smbpasswd}. Damit kann man es erreichen, da"s f"ur Administratoren
der Zugriff auf den Sambaserver noch m"oglich ist, falls einmal kein
Dom"anencontroller verf"ugbar sein sollte.

Zus"atzlich zu \param{security = domain} gibt es noch
\param{security = server}. Diese Einstellung ist jedoch nicht mehr zu
empfehlen, dazu mehr am Ende des Kapitels.

F"ur den Parameter \param{password server} gibt es zwei
M"oglichkeiten.  Entweder man setzt ihn auf * wie im Beispiel
geschehen. Dann sucht sich Samba mit NT-konformen Mitteln selbst den
PDC oder einen BDC, um Benutzer zu authentifizieren. Man kann aber
auch eine Liste von NetBIOS-Namen angeben, mit denen Samba arbeiten
soll. In beiden F"allen ist es wichtig, da"s die Namensaufl"osung
einwandfrei funktioniert. Samba mu"s in der Lage sein, einen
Dom"anencontroller f"ur die Authentifizierung zu finden. Dies ist eine
der wenigen Stellen, bei denen Samba als NetBIOS-Client arbeitet.
Daher ist es hier m"oglicherweise n"otig, die \param{name resolve
  order} korrekt zu setzen. Insbesondere ist dies wichtig, wenn die
Namen der PDCs im DNS bereits vergeben sind und vielleicht auf andere
Maschinen zeigen als die entsprechenden NetBIOS-Namen.

Um f"ur bestimmte Benutzer nicht auf den PDC angewiesen zu sein,
versucht Samba bei einem erfolglosen Versuch der Dom"anenanmeldung
zus"atzlich, den Benutzer in der \dateistyle{smbpasswd} zu finden.
Damit kann der Server mit m"oglicherweise nicht aktuellen Pa"sw"ortern
funktionsf"ahig gehalten werden, auch wenn der PDC einmal ausfallen
sollte.

Samba mu"s, um Pa"sw"orter an den PDC weiterzuleiten, genau wie eine
NT-Workstation ein Computerkonto auf dem PDC besitzen und die Dom"ane
betreten. Das Computerkonto kann auf dem PDC mit dem Servermanager
oder mit dem Kommando

\begin{verbatim}
net computer <name> /add
\end{verbatim}

auf der Kommandozeile erledigt werden. Danach kann Samba mit dem
Aufruf

\begin{verbatim}
smbclient -j DOMAIN -r PDCNAME
\end{verbatim}

die Dom"ane betreten. Seit Samba 2.2.2 ist es zus"atzlich m"oglich,
das Computerkonto wie von einer NT Workstation aus beim Betreten der
Dom"ane automatisch erstellen zu lassen. Dies geschieht, indem man dem
Aufruf von \prog{smbpasswd -j} noch einen berechtigten Benutzer
mitgibt:

\begin{verbatim}
smbclient -j DOMAIN -r PDCNAME -U Administrator
\end{verbatim}

\prog{smbclient} erfragt das Pa"swort des Dom"anenadministrators. Nach
Eingabe des Pa"swortes wird das Computerkonto auf dem PDC erstellt und
das entsprechende Pa"swort korrekt gesetzt.

Ist Samba Dom"anenclient, so wird das Pa"swort zum Computerkonto in
der Datei \dateistyle{secrets.tdb} abgespeichert. Diese
"ubernimmt damit die Aufgabe der Datei
\dateistyle{DOMAIN.MACHINE.mac}, die es bis Samba 2.0 gab. Geht diese
Datei verloren, mu"s die Dom"ane neu betreten werden. Dies kann durch
Entfernen und wieder Hinzuf"ugen zur Dom"ane mit dem Servermanager und
nachfolgendes \prog{smbpasswd -j} oder durch ein automatisches
Erstellen des Computerkontos geschehen.

\todo{allow trusted domains}

Mit der Dom"anenmitgliedschaft wird der Sambaserver nur von der
Pa"swortverwaltung befreit. Um die Benutzer und Gruppen mu"s er sich
weiterhin selbst k"ummern. Eine gewisse Erleichterung kann dabei das
\param{add user script} bringen, das bei Samba als PDC daf"ur gesorgt
hat, die Computerkonten in der \param{/etc/passwd} automatisch zu
erstellen.  Ist Samba Dom"anenmitglied, so wird bei einer
Benutzeranfrage auf den Server zun"achst der PDC nach der Richtigkeit
des Pa"swortes befragt.  Best"atigt dieser das Pa"swort und will der
Benutzer dann auf das Dateisystem des Sambaservers zugreifen, so wird
eine Unix UID ben"otigt, Samba schaut in die \dateistyle{/etc/passwd}.
Findet Samba dort trotz erfolgreicher Anmeldung am PDC keinen
Benutzer, so wird das \param{add user script} mit entsprechenden
Argumenten aufgerufen, um den Benutzer zu erstellen.

Damit mu"s man sich teilweise nicht mehr um die Verwaltung der
Benutzer auf dem Sambaserver k"ummern. Teilweise deswegen, da von dem
neu anzulegenden Benutzer ausschlie"slich der Name bekannt ist. Es
fehlt jegliche Information dar"uber, in welchen Gruppen sich der
Benutzer in der Dom"ane befindet. Diese Einschr"ankung macht eine
Rechteverwaltung auf dem Sambaserver sehr schwierig bis unm"oglich.

Unter Unix gibt es mehrere M"oglichkeiten, "uber Rechnergrenzen hinweg die
Benutzerdatenbanken zu synchronisieren. Das reicht vom unsicheren NIS bis hin
zur skriptgesteuerten Verteilung der Dateien \dateistyle{/etc/passwd} und
\dateistyle{/etc/group} "uber rsync und ssh. Setzt man f"ur die Datei- und
Druckdienste komplett auf Unix mit Samba, kann man so eine zentrale
Verwaltung der Server erreichen. Die \dateistyle{smbpasswd} mu"s dabei in die
Verteilung der Benutzerdatenbanken nicht mit einbezogen werden, da hierf"ur
eine Dom"ane aufgebaut werden kann. Einer der Server wird zum
Dom"anencontroller erkl"art, die anderen Server sind ganz normale
Mitgliedsserver, die die Pa"sw"orter vom Dom"anencontroller "uberpr"ufen lassen.

\subsection{Hintergrund: \param{security = server}}

Vor Samba 2.0 gab es f"ur die zentrale Verwaltung von Pa"sw"ortern nur
die M"oglichkeit, \param{security = server} zu setzen. Damit konnte
ein Sambaserver sehr einfach die Anmeldung von einem weiteren Server
oder einer NT Workstation beziehen. Samba 2.0 und 2.2 beherrschen
diese M"oglichkeit immer noch, man sollte jedoch strikt von ihrer
Nutzung abraten, da sie erhebliche Probleme mit sich bringt.
\param{security = server} nutzt nicht das Dom"anencontrollerprotokoll,
sondern leitet den Benutzernamen und das Pa"swort an einen Server
weiter. Dies ist im Prinzip nicht schlecht, birgt aber ein subtiles
Problem. Setzt man keine verschl"usselten Pa"sw"orter ein, verschicken
viele Clients die Pa"sw"orter in Gro"sbuchstaben. Verlangt der
Pa"swortserver nun verschl"usselte Pa"sw"orter, mu"s Samba raten. Dies
kostet Last und Zeit. Setzt man auf dem Sambaserver verschl"usselte
Pa"sw"orter ein, handelt man sich ein noch subtileres Problem ein. Um
das zu verstehen, sollte man sich das Kapitel \ref{passwoerter} auf
jeden Fall genau angesehen haben.

In der Antwort zur Anfrage Negotiate Protocol liefert der Server dem
Client eine Herausforderung. Im Session Setup mu"s der Client die mit
dem Pa"swort verschl"usselte Herausforderung liefern. Will Samba dies
nun gegen"uber einem Pa"swortserver machen, so mu"s er zun"achst einen
Negotiate Protocol absetzen, um vom Pa"swortserver eine
Herausforderung zu erhalten. Diese Herausforderung liefert er seinem
Client direkt weiter, damit dieser sie dann mit dem Pa"swort
verschl"usseln kann. Da es pro Verbindung vom Client zum Server nur
einen Negotiate Protocol Request gibt, gilt die Herausforderung f"ur
die gesamte Verbindung.  Viele Clients setzen aber mehrere Session
Setups "uber die gleiche Verbindung ab. Damit der Sambaserver zwischen
Client und Pa"swortserver immer mit der gleichen Herausforderung
arbeiten kann (der Client sieht nur diese eine Herausforderung), mu"s
er zum Pa"swortserver st"andig eine Verbindung offen halten. Br"ache
diese Verbindung ab, bek"ame der Sambaserver vom Pa"swortserver eine
neue Herausforderung mitgeteilt. Der Sambaserver hat leider keine
M"oglichkeit, den Client dazu zu zwingen, eine neue Herausforderung zu
verlangen. Die einzige M"oglichkeit ist, die Verbindung zum Client
abzubrechen, um einen neuen Negotiate Protocol zu verlangen. Damit
gibt es zwei Probleme:

\begin{itemize}
\item Pro Clientsystem mu"s der Sambaserver st"andig eine Verbindung
zum Pa"swortserver offenhalten. Damit werden auf dem Pa"swortserver
erhebliche Resourcen gebunden.
\item Das Netz wird au"serordentlich instabil, sollte sich der
Pa"swortserver entscheiden, diese vielen nicht besonders aktiven
Verbindungen abzubrechen. Clients werden sich am Sambaserver
erneut anmelden m"ussen.
\end{itemize}

Das Dom"anencontrollerprotokoll l"ost diese beiden Probleme, indem es
dem Sambaserver erlaubt, sich eine eigene Herausforderung pro Client
auszudenken und diese bei der Netzwerkanmeldung beim PDC
mitzuschicken.  Um kein Sicherheitsproblem aufkommen zu lassen, mu"s
diese Netzwerkanmeldung vom Sambserver zum PDC verschl"usselt sein,
daher das Computerkonto, dessen Pa"swort als Schl"ussel f"ur die
symmetrische Verschl"usselung zwischen Sambaserver und PDC verwendet
wird.

\section{winbind}

Wenn man Samba als Dom"anenmitglied betreibt, hat man die gr"o"ste
H"urde zu einer problemlosen Integration bereits genommen: Die
Pa"swortverwaltung. Jeder Benutzer kann sein Pa"swort in der Dom"ane
"andern, und die "Anderung wird sofort auf allen Dom"anenmitgliedern
sichtbar. Ein Problem bleibt jedoch bestehen. Man mu"s auf den
Sambaservern, die Dom"anenmiglieder sind, die Benutzer
nachpflegen. Wird ein neuer Benutzer in der Dom"ane angelegt, oder
werden Gruppenmitgliedschaften ge"andert, mu"s dies manuell auf den
Sambaservern eingetragen werden. Ist auch der Primary Domain Cotroller
ein Sambaserver, kann man sich mit dem Network Information System NIS
behelfen, aber wenn die Benutzerdatenbank auf einem echten NT-Server
liegt, ist dieser Weg verschlossen.

Eine wirklich zwischen Windows NT und Unix vereinheitlichte
Benutzerdatenbank bietet seit Samba 2.2.2 der D"amon
\defin{winbind}. Er erm"oglicht die volle Einbindung eines Unixsystems
in eine NT-Dom"ane. Voraussetzung daf"ur ist die Unterst"utzung der
\prog{nsswitch}-Module. Momentan bieten dies Linux und Solaris. Die
anderen von Samba unterst"utzten Unixsysteme bleiben au"sen vor.

\subsection{nsswitch-Module}

Viele Programme unter Unix m"ussen auf Datenbanken im Verzeichnis
\dateistyle{/etc} zugreifen. Beispielsweise mu"s \prog{ls -l} den
Dateibesitzer, der in der Datei nur in numerischer Form vorliegt, in
einen Benutzernamen "ubersetzen. Dazu mu"s die numerische User-ID in
der Datei \dateistyle{/etc/passwd} gesucht werden. Da"s diese
"Ubersetzung tats"achlich stattfindet, kann man leicht folgenderma"sen
"uberpr"ufen. Man mu"s nur testweise die Leserechte f"ur
\username{others} von der Datei \dateistyle{/etc/passwd} mit
\prog{chmod o-r /etc/paswd} wegnehmen und \prog{ls -l} aufrufen. Die
Dateibesitzer werden nur noch numerisch angezeigt\footnote{Sollte dies
nicht spontan funktionieren, kann der \prog{nscd} schuld sein. Siehe
hierzu Seite \pageref{nscd}.}

Sauber geschriebene Programme greifen nicht direkt auf die Dateien in
\dateistyle{/etc} zu, sondern durch Bibliotheksaufrufe wie beispielsweise
\prog{getpwuid(2)}. Seit der glibc-Version 2 werden diese Bibliotheksaufrufe
in dynamisch geladenen Modulen implementiert. Gesteuert werden diese Module
"uber die Datei \dateistyle{/etc/nsswitch.conf}. F"ur jede der Dateien in
\dateistyle{/etc}, die von allgemeinem Interesse ist, gibt es eine
Zeile in der \dateistyle{/etc/nsswitch.conf}. Beispielsweise wird der
Zugriff auf die Datei \dateistyle{/etc/passwd} "uber die Zeile

\begin{verbatim}
passwd: compat
\end{verbatim}

\noindent oder

\begin{verbatim}
passwd: files nis
\end{verbatim}

\noindent gesteuert. Durch die erste Version wird ein
Kompatibilit"atsmodul zum Zugriff herangezogen, die zweite Variante
legt explizit fest, da"s zuerst in der lokalen Datei
\prog{/etc/passwd} nach Benutzern gesucht werden soll. Schl"agt dies
fehl, wird das NIS befragt.

Wie funktioniert diese Steuerung? Die Option \param{compat} bewirkt,
da"s zur Laufzeit eines Programms die dynamische Bibliothek
\dateistyle{/lib/libnss\_{\bfseries compat}.so.2} geladen wird und die
Anfrage beantworten mu"s. \param{files} und \param{nis} beziehen sich
entsprechend auf die Dateien \dateistyle{/lib/libnss\_{\bfseries
    files}.so.2} und \dateistyle{/lib/libnss\_{\bfseries nis}.so.2}.

\prog{winbind} besteht aus zwei Teilen: Einer Datei
\dateistyle{libnss\_winbind.so} und einem D"amon \prog{winbind}. In
den Samba-Quellen findet sich der winbind unter
\dateistyle{source/nsswitch}. Dort wird auch die Datei
\dateistyle{libnss\_winbind.so} abgelegt. Zur Installation mu"s sie
manuell nach \dateistyle{/lib} kopiert werden:

\begin{verbatim}
cp source/nsswitch/libnss_winbind.so /lib/libnss_winbind.so.2
\end{verbatim}

Der \prog{winbindd} selbst wird automatisch mit im
\dateistyle{sbin}-Unterverzeichnis von Samba installiert.

\subsection{Konfiguration von Winbind}

Um Winbind zu aktivieren, m"ussen in der Datei
\dateistyle{/etc/nsswitch.conf} die beiden Zeilen f"ur \param{passwd}
und \param{group} durch die Angabe \param{winbind} erg"anzt werden,
etwa so:

\begin{verbatim}
# /etc/nsswitch.conf
passwd: files winbind
group: files winbind
\end{verbatim}

Damit werden Benutzer und Gruppen zuerst in den lokalen Dateien
gesucht. Danach wird der \prog{winbindd} befragt, der im Hintergrund
laufen mu"s.

F"ur die Konfiguration des \prog{winbindd} mu"s Samba ein normales
Dom"anenmitglied sein. Siehe hierzu Kapitel \ref{domain-member}. Der
\prog{winbindd} ben"otigt in der \dateistyle{/etc/smb.conf} einige
zus"atzliche Parameter. Eine vollst"andige Beispielkonfiguration ist
die folgende:

\begin{verbatim}
; Samba als Domaenenmitglied
workgroup = windows
security = domain
password server = *
encrypt passwords = yes

; Winbind-Konfiguration
winbind separator = +
winbind uid = 10000-20000
winbind gid = 10000-20000
template shell = /bin/bash
template homedir = /home/%D/%u
\end{verbatim}

Die Parameter bedeuten im einzelnen:

\begin{description} 
  
\item[winbind separator:] Unter Windows wird ein vollst"andiger
  Benutzername mit Dom"ane in der Form
  \username{DOMAENE\textbackslash{}benutzername} angegeben. Unter Unix
  hat dies Nachteile, da der Backslash \textbackslash{} f"ur die Shell
  eine Sonderbedeutung hat. Daher kann man den Trenner zwischen
  Dom"ane und Benutzername separat konfigurieren. Als unkritisch
  erweist sich das +-Zeichen. Ein Benutzer wird somit als
  \username{DOMAENE+benutzername} angegeben.
  
\item[winbind uid:] Der \prog{winbindd} mu"s dynamisch f"ur
  Dom"anenbenutzer numerische User-IDs vergeben. Um dies tun zu
  k"onnen, wird ihm mit dem Parameter \param{winbind uid} eine Menge
  von User-IDs "ubergeben, die nicht in der \dateistyle{/etc/passwd}
  oder im NIS verwendet werden. Wird auf einen Benutzernamen das erste
  Mal zugegriffen, w"ahlt der \prog{winbindd} f"ur diesen Benutzer aus
  seinem Pool die n"achste freie User-ID aus und speichert diese
  Zuordnung fest in der Datei \dateistyle{winbindd\_idmap.tdb}.
  
\item[winbind gid:] F"ur Group-IDs gilt das gleiche wie f"ur User-IDs.
  
\item[template shell:] Der Primary Domain Controller kennt das Konzept
  der Login-Shell nicht. Diese mu"s zentral f"ur alle Winbind-Benutzer
  in der \dateistyle{smb.conf} vergeben werden.
  
\item[template homedir:] Auch ein Heimatverzeichnis wird in der SAM
  von Windows nicht abgespeichert und mu"s in der
  \dateistyle{smb.conf} vorgegeben werden. Hierbei sollte man auf
  jeden Fall die Dom"ane des Benutzers in den Pfad mit aufnehmen, um
  Namenskollisionen bei Vertrauensstellungen zu behandeln. Der
  Benutzer \username{schmidt} in der Dom"ane \username{GOE} sollte ein
  anderes Heimatverzeichnis bekommen als der Benutzer
  \username{schmidt} in der Dom"ane \username{HD}. Die
  Heimatverzeichnisse werden selbstverst"andlich nicht automatisch
  erzeugt, sondern m"ussen manuell angelegt und den Benutzern
  "ubergeben werden. Auf einem reinen Fileserver mit gemeinsamen
  Dateien ist es jedoch m"oglicherweise nicht notwendig, f"ur jeden
  Benutzer eigene Heimatverzeichnisse anzulegen.
\end{description}

Mit diesen Einstellungen kann man den \prog{winbindd} zus"atzlich zu
\prog{smbd} und \prog{nmbd} starten, die ebenfalls laufen m"ussen.

\subsection{Winbindd abfragen: wbinfo}

Laufen \prog{winbindd}, \prog{smbd} und \prog{nmbd} in der Dom"ane,
kann man das ganze testen. Das Utility zum Testen hei"st
\prog{wbinfo}. Der wichtigste Test ist der Aufruf \prog{wbinfo -t}.
Damit wird die Verbindung zum Dom"anencontroller gepr"uft,
\prog{winbindd} sucht den PDC und meldet sich mit dem Workstationkonto
an. Das Programm \prog{wbinfo} mu"s die Ausgabe \texttt{Secret is
  good} geben. Gibt \prog{wbinfo} diese Ausgabe, so ist der
\prog{winbindd} g"ultiges Dom"anenmitglied und kann Informationen vom
PDC abrufen.

\prog{wbinfo} kennt noch eine Reihe weiterer Parameter, mit denen die
Benutzerdatenbank der Dom"ane abgefragt werden kann. Die Ausgabe des
Aufrufts \prog{wbinfo} ohne Parameter gibt einen Hilfetext mit den
verf"ugbaren Optionen aus.

Schl"agt \prog{wbinfo -t} fehl, so mu"s die Dom"anenmitgliedschaft
"uberpr"uft werden. Hierzu siehe Kapitel \ref{domain-member}.

Verl"auft der Test mit \prog{wbinfo -t} erfolgreich, so kann man sich
s"amtliche verf"ugbaren Benutzer mit \prog{getent passwd} und die
Gruppen mit \prog{getent group} auflisten lassen.

\todo{valid users = @DOMAIN+group}

\todo{pam\_winbind}

\subsection{nscd}
\label{nscd}

Unter Linux ist der Name Service Caching Daemon \prog{nscd} ist ein
Programm, mit dem s"amtliche Abfragen durch den nsswitch-Mechanismus
gecached werden k"onnen. Der \prog{nscd} macht Sinn, wenn diese
Anfragen sehr lange dauern. Dies kann der Fall sein, wenn die Dateien
sehr gro"s sind, etwa wenn hunderte von Usern im System angelegt sind.
Ein anderer Verz"ogerungsgrund ist die Abfrage von Benutzerdaten "uber
ein Netzwerk beim Einsatz von NIS.

Ein Nachteil des \prog{nscd} kann sein, da"s er "Anderungen in der
Benutzerdatenbank nicht schnell genug mitbekommt. Insbesondere beim
Testen des \prog{winbind} kann dies sehr hinderlich sein. Wer
beispielsweise folgendes schon einmal erlebt hat, hat ein Problem mit
dem \prog{nscd}:

\begin{verbatim}
delphin:~ # useradd -m vl
delphin:~ # passwd vl
passwd: Unknown user vl
delphin:~ #
\end{verbatim}

In diesem Falle sollte man den \prog{nscd} schleunigst killen und
daf"ur sorgen, da"s er beim n"achsten booten nicht wiederkommt.


\section{smbcontrol}

Bis zur Version 2.0 hatte man relativ wenig M"oglichkeiten, in das
laufende Samba einzugreifen. Man konnte mit dem Signal \texttt{USR1}
den Debuglevel um einen Punkt erh"ohen und mit \texttt{USR2} um einen
Punkt erniedrigen. Dar"uber hinaus blieb h"aufig nur die M"oglichkeit,
einzelne Sambaprozesse oder sogar das ganze Samba herunterzufahren,
wenn man Konfigurations"anderungen vorgenommen hatte. Mit Samba 2.2
gibt es f"ur diese Anwendungen ein neues Werkzeug: \prog{smbcontrol}.
\prog{smbcontrol} bietet die M"oglichkeit, einzelne Dinge anzusto"sen.
\prog{smbcontrol} verschickt hierzu Nachrichten an einzelne
Sambaprozesse, oder an alle \prog{smbd}s.

Man kann jetzt im Gegensatz zu Samba 2.0 den Debuglevel einzelner
Prozesse direkt setzen. Dies geschieht wie in folgendem Beispiel:

\begin{verbatim}
root@server:~ > smbcontrol smbd debuglevel
Current debug level of PID 4423 is 0 
Current debug level of PID 17392 is 0 
Current debug level of PID 22272 is 0 
root@server:~ > smbcontrol 17392 debug 1  
root@server:~ > smbcontrol smbd debuglevel
Current debug level of PID 4423 is 0 
Current debug level of PID 17392 is 1 
Current debug level of PID 22272 is 0 
\end{verbatim}

An diesem Beispiel ist deutlich, wie \prog{smbcontrol} zu benutzen
ist. Als ersten Parameter verlangt \prog{smbcontrol} das Ziel der
Nachricht, die es verschicken soll. Zweiter Parameter ist die
Nachricht, die verschickt werden soll. Daran schlie"sen sich dann
weitere Parameter an, die m"oglicherweise zu der Nachricht geh"oren.

Die Nachrichten im Einzelnen:

\begin{description}
\item[debug:] Mit dieser Nachricht wird der Debuglevel anhand des
  weiteren Parameters gesetzt.
\item[debuglevel:] \prog{smbcontrol} liest hiermit den aktuellen
  Debuglevel von Prozessen aus.
\item[force-election:] Mit dieser Nachricht wird eine Wahl zum Local
  Master Browser erzwungen. Diese Nachricht kann nur an den
  \prog{nmbd} geschickt werden. Der \prog{smbd} hat mit der Wahl
  nichts zu tun.
\item[ping:] Mit dieser Nachricht k"onnen Prozesse einfach zum
  Antworten bewegt werden. {\bfseries ping} erwartet einen Parameter,
  der die Anzahl der Pings zum Ziel festlegt.
\item[profile:] Diese Nachricht ist f"ur Entwickler gedacht. Um das
  Profiling zu nutzen, mu"s Samba mit der \prog{configure}-Option
  \texttt{-{}-with-profiling-data} compiliert werden. Dann kann mit
  dieser Nachricht der interne Profiling-Code gesteuert werden.  Damit
  k"onnen Entwickler die Teile des Codes bestimmen, in denen am
  meisten Zeit verbraucht wird.
\item[profilelevel:] Diese Nachricht ist ebenfalls f"ur Entwickler
  gedacht.
\item[close-share:] Der \prog{smbd} kann mit dieser Nachricht dazu
  bewegt werden, alle Verbindungen zu einer bestimmten Freigabe zu
  beenden, ohne die restlichen Verbindungen zu st"oren. Dies kann
  insbesondere dann sinnvoll sein, wenn "Anderungen an den
  Zugriffsrechten einer Freigabe vorgenommen wurden.
\item[printer-notify:] Wenn Sie von Windows NT Clients aus mit
  Druckern verbunden sind, nutzen Sie m"oglicherweise das neue
  Drucksystem von Samba. In diesem Fall sind Druckereinstellungen auf
  dem Server gespeichert. "Andern sich diese Einstellungen, k"onnen
  Sie mit dieser Nachricht die momentan verbundenen Clients "uber
  diese "Anderungen informieren.
\end{description}

\end{document}