File: sudoers.5

package info (click to toggle)
manpages-ja 0.5.0.0.20180315%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 28,516 kB
  • sloc: perl: 161; makefile: 101
file content (3114 lines) | stat: -rw-r--r-- 172,534 bytes parent folder | download | duplicates (2)
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
.\" DO NOT EDIT THIS FILE, IT IS NOT THE MASTER!
.\" IT IS GENERATED AUTOMATICALLY FROM sudoers.mdoc.in
.\"
.\" Copyright (c) 1994-1996, 1998-2005, 2007-2016
.\"	Todd C. Miller <Todd.Miller@courtesan.com>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above
.\" copyright notice and this permission notice appear in all copies.
.\"
.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" Sponsored in part by the Defense Advanced Research Projects
.\" Agency (DARPA) and Air Force Research Laboratory, Air Force
.\" Materiel Command, USAF, under agreement number F39502-99-1-0512.
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.\" 
.\" Japanese Version Copyright (c) 2000-2002 Yuichi SATO
.\"   and 2009 Yoichi Chonan
.\"         all rights reserved.
.\" Translated Sat Oct  7 14:39:18 JST 2000
.\"         by Yuichi SATO <ysato444@yahoo.co.jp>
.\" Updated & Modified Fri Dec  6 04:40:44 JST 2002
.\"         by Yuichi SATO
.\" New Translation (sudo-1.6.9p17) Fri Jan 23 10:31:17 JST 2009
.\"         by Yoichi Chonan <cyoichi@maple.ocn.ne.jp>
.\" Updated & Modified (sudo-1.7.2p1) Sat Nov 14 21:15:16 JST 2009
.\"         by Yoichi Chonan
.\" Modified Tue Nov 24 20:00:00 JST 2009 by Yoichi Chonan
.\" Updated & Modified (sudo-1.8.4p4) Wed May  9 12:26:33 JST 2012
.\"         by Yoichi Chonan
.\" Updated & Modified (sudo-1.8.17) Sat Sep 10 10:39:07 JST 2016
.\"         By Yoichi Chonan
.\"
.TH SUDOERS 5 "January 20, 2016" "Sudo 1.8.17" "File Formats Manual"
.nh
.if  n .ad l
.SH 名前
\fBsudoers\fP \- sudo のデフォルトのセキュリティポリシー・プラグイン
.SH 説明
\fBsudoers\fP ポリシー・プラグインは、ユーザにどんな \fBsudo\fP 権限があるかを決定する。
このプラグインが \fBsudo\fP のデフォルトのポリシー・プラグインである。
ポリシーの運用は \fI/etc/sudoers\fP ファイルによって行われるが、
LDAP を使用することも可能である。ポリシーを設定するときの書式は、
「SUDOERS ファイルの書式」セクションで詳しく説明している。
\fBsudoers\fP ポリシーの情報を LDAP に格納することについては、
sudoers.ldap(5) をご覧いただきたい。
.SS "sudoers ポリシー・プラグインを使うための sudo.conf の設定"
\fBsudo\fP は sudo.conf(5) ファイルを参照して、
どのポリシー・プラグインと入出力ロギング・プラグインをロードするかを決める。
sudo.conf(5) ファイルが存在しない場合や、存在しても Plugin 行を含まない場合は、
\fBsudoers\fP プラグインがポリシーの決定や 入出力ロギングに使用されることになる。
\fBsudoers\fP プラグインを使用するように明示的に設定するには、
sudo.conf(5) に次のよう書き込めばよい。
.nf
.sp
.RS 6n
Plugin sudoers_policy sudoers.so
Plugin sudoers_io sudoers.so
.RE
.fi
.PP
\fBsudo\fP 1.8.5 以来、\fBsudoers\fP プラグインに対する任意の引き数を
sudo.conf(5) で指定することが可能になっている。
そうした引き数が存在する場合は、プラグインのパスの後ろに続けることになる
(すなわち、\fIsudoers.so\fP の後ろだ)。
引き数がいくつもあるときは、ホワイトスペースで区切って指定すればよい。
一例を挙げる。
.nf
.sp
.RS 6n
Plugin sudoers_policy sudoers.so sudoers_mode=0400
.RE
.fi
.PP
以下のプラグインに対する引き数が使用できる。
.TP  10n
ldap_conf=pathname
\fIldap_conf\fP 引き数を使用すると、
\fIldap_conf\fP ファイルのパスをデフォルトのものから変更することができる。
.TP  10n
ldap_secret=pathname
\fIldap_secret\fP 引き数を使用すると、
\fIldap_secret\fP ファイルのパスをデフォルトのものから変更することができる。
.TP  10n
sudoers_file=pathname
\fIsudoers_file\fP 引き数を使用すると、
\fIsudoers\fP ファイルのパスをデフォルトのものから変更することができる。
.TP  10n
sudoers_uid=uid
\fIsudoers_uid\fP 引き数を使用すると、
sudoers ファイルの所有者をデフォルトのものから変更することができる。
指定には、ユーザ ID 番号を使うべきである。
.TP  10n
sudoers_gid=gid
\fIsudoers_gid\fP 引き数を使用すると、
sudoers ファイルのグループをデフォルトのものから変更することができる。
指定には、グループ ID 番号を使用しなければならない (グループ名ではない)。
.TP  10n
sudoers_mode=mode
\fIsudoers_mode\fP 引き数を使用すると、
sudoers ファイルのファイル・モードをデフォルトのものから変更することができる。
指定には、8 進数の値を使うべきである。
.PP
sudo.conf(5) の設定についてさらに詳しいことをお知りになりたかったら、
sudo.conf(5) のマニュアルをご覧になっていただきたい。
.SS ユーザの認証
\fBsudoers\fP セキュリティポリシーでは、ユーザはたいていの場合、
本人であることを証明してからでなければ。\fBsudo\fP を使用できない。ただし、
\fBsudo\fP の実行者が root だったり、変身対象ユーザが \fBsudo\fP の実行者と同一であったり、
ポリシーがその実行者やコマンドに対して認証を免除している場合は、パスワードが要求されることはない。
su(1) とは違って、\fBsudoers\fP ポリシーが認証に当たってチェックするのは、
\fBsudo\fP を実行するユーザの認証情報 (訳注: 通常はパスワード) であって、
変身対象ユーザの (あるいは、root の) 認証情報ではない。この動作は、後述する
\fIrootpw\fP, \fItargetpw\fP, \fIrunaspw\fP フラグによって変更することができる。
.PP
ポリシーに登録されていないユーザが \fBsudo\fP を使って、コマンドを実行しようとすると、
しかるべき権威者にメールが送付される。そうしたメールの宛先は、
後述する「デフォルト設定」の \fImailto\fP 行によって設定できるが、
デフォルトでは root になっている。
.PP
\fBsudo\fP を使用する権限のないユーザが、\fB\-l\fP や \fB\-v\fP オプションを付けて
\fBsudo\fP の実行を試みても、認証に失敗し、しかも \fImail_always\fP または
\fImail_badpass\fP フラグが有効になっている場合を除いて、
メールは送付されないことに注意していただきたい。
そうした動作になっていることで、ユーザとしては、
自分が \fBsudo\fP を使用できるかどうか、自分で判断できるわけである。
\fBsudo\fP 実行の試みは (成功、失敗にかかわらず)、すべてログに記録される。
メールが送られるかどうかには関係がない。
.PP
\fBsudo\fP が root によって実行されたとき、環境変数 SUDO_USER が設定されていると、
\fBsudoers\fP ポリシーは、実際のユーザが誰かを判断するのに、その値を使用することになる。
ユーザとしては、この動作を利用することで、すでにルートシェルを起動している場合でも、
自分が \fBsudo\fP を介して実行したコマンドのログを取ることができる。
また、この動作のおかげで、\fBsudo\fP で実行するスクリプトやプログラムから呼び出される場合でさえ、
\fB\-e\fP オプションが役に立つものになっている。ただし、そうした場合でも、
\fIsudoers\fP ファイルの参照はやはり root に対してなされるのであって、
SUDO_USER が指定しているユーザに対してではないことに注意していただきたい。
.PP
\fBsudoers\fP は、認証情報の一時保存 (credential caching) にユーザごとのタイムスタンプ・ファイルを使用する。
ユーザの認証が済むと、記録が書き込まれるが、それには、認証に使用された uid、
端末セッション ID、タイムスタンプ (利用できるならば、単調増加時計 (monotonic clock)
を使用する) が含まれている。ユーザは、その後しばらくの間 (\fItimestamp_timeout\fP
オプションによって変更されていなければ、5 分間)、パスワードなしで \fBsudo\fP を使うことができる。
\fBsudoers\fP はデフォルトでは、各 tty ごとに別の記録を使用する。
そこで、認証は、ユーザのログイン・セッションごとに独立して行われることになる。
\fItty_tickets\fP オプションを無効にすれば、あるユーザのすべてのセッションに対して、
単一のタイムスタンプの使用を強制することができる。
.SS ロギング
\fBsudoers\fP は \fBsudo\fP の実行が成功したときも失敗したときも、
その旨を (エラーの内容とともに) syslog(3) や独自のファイル、
あるいはその両方に記録することができる。\fBsudoers\fP はデフォルトでは、
syslog(3) 経由でログを記録することになっているが、この動作はデフォルト設定の
\fIsyslog\fP と \fIlogfile\fP を使って変更することができる。
ログファイルの書式については、「ログの書式」セクションの説明をご覧いただきたい。
.PP
また \fBsudoers\fP は、擬似 tty でコマンドを実行して、
すべての入力や出力をログに記録することもできる。
標準入力、標準出力、標準エラーが端末と結びついていない場合でさえ、
それをログに記録することができるのだ。入出力ロギングは、デフォルトでは ON になっていないが、
\fIlog_input\fP や \fIlog_output\fP オプションを使って有効にすることができる。
コマンド・タグの LOG_INPUT や LOG_OUTPUT を使用して有効にすることも可能だ。
入出力ログファイルがどんなふうに格納されるかについては、
「入出力ログファイル」セクションに詳細な説明がある。
.SS コマンド環境
環境変数はプログラムの動作に影響を与えることがあるので、\fBsudoers\fP は、
実行されるコマンドがユーザの環境からどんな変数を引き継ぐかについて、
制御する手段を用意している。すなわち、\fBsudoers\fP は二つの異なった方法で、
環境変数を処理することができる。
.PP
デフォルトでは \fIenv_reset\fP オプションが有効になっている。
この場合、コマンドは新しい、最小の環境で実行されることになる。
ATX (及び PAM を使用していない Linux システム) では、\fI/etc/environment\fP
ファイルの内容で環境が初期化される。新しい環境には、TERM, PATH,
HOME, MAIL, SHELL, LOGNAME, USER, USERNAME, 及び SUDO_* という変数、
それに、呼び出し側のプロセスから来た変数で、\fIenv_check\fP や \fIenv_keep\fP
オプションによって許可されたものが含まれている。これは、言わば、
環境変数のホワイトリストである。値が () で始まる環境変数は、
変数名と値の両方が \fIenv_keep\fP や \fIenv_check\fP の指定にマッチしないかぎり、
除去されるが、それは、\fBbash\fP シェルの古いバージョンでは関数と解釈されることになるからである。
1.8.11 より前のバージョンでは、そうした変数は無条件で除去されていた。
.PP
これに対して、\fIenv_reset\fP オプションが無効になっている場合は、
\fIenv_check\fP や \fIenv_delete\fP オプションによって明示的に拒否されていないかぎり、
いかなる環境変数も呼び出し側のプロセスから継承される。
この場合、\fIenv_check\fP や \fIenv_delete\fP は、ブラックリストのように振る舞うわけだ。
値が () で始まる環境変数は、ブラックリストの一つにマッチしない場合でも、
必ず除去される。危険性のある環境変数のすべてをブラックリストに載せることは不可能なので、
\fIenv_reset\fP を有効にしておくデフォルトの動作を採用することをお勧めする。
.PP
デフォルトでは、環境変数のマッチは変数名によって行われる。
しかしながら、マッチに使われるパターンに等号 ('=') が含まれる場合は、
変数名と値の両方がマッチしなければならない。たとえば、旧式の
(shellshock 問題以前の export 方法による)
\fBbash\fP のシェル関数にマッチさせるならば、次のように指定すればよいだろう。
.nf
.sp
.RS 4n
env_keep += "my_func=()*"
.RE
.fi
.PP
旧式の \fBbash\fP のシェル関数は、デフォルトでは保存されないので、
"=()*" という後続部分がなかったら、こうした環境変数はマッチしないことになる。
.IP "[\fB訳注\fP]:" 8
shellshock 以前の bash では、たとえば "my_func='() { ls \-F; }'"
といったシェル変数を export することで、
my_func という関数をサブシェルに渡すことができた。
shellshock 以後の bash では、この方法による関数の継承はできなくなり、
値が "() { ls \-F; }" である my_func という変数が、
渡されるだけになっている。だから、
sudoers ファイルの Defaults 行に上のように書いても、
shellshock 以後の bash を使っているかぎり、
my_func という環境変数が保存されるだけで、関数が渡されるわけではない。
.PP
\fBsudo\fP が許可、または拒否する環境変数すべてのリストは、"sudo \-V" を
root の資格で実行したときの出力中に含まれている。このリストは、
\fBsudo\fP が実行されるオペレーティングシステムによって異なることに気をつけていただきたい。
.PP
PAM をサポートしているシステムで、\fBpam_env\fP モジュールが
\fBsudo\fP に対して有効になっていると、
PAM の管理する環境にある変数が、環境にマージされることになるだろう。
ただし、PAM 環境にある変数がユーザの環境にすでに存在している場合に、
その値が上書きされることになるのは、
その変数が \fBsudoers\fP によって保存されていないときだけである。
すなわち、\fIenv_reset\fP が有効になっているときは、
\fIenv_keep\fP のリストによって \fBsudo\fP を実行するユーザの環境から保存された変数が、
PAM 環境にある変数より優先される。また、
\fIenv_reset\fP が無効になっているときは、
\fBsudo\fP を実行するユーザの環境にある変数が、
\fIenv_delete\fP のリストのパターンにマッチしていないかぎり、
PAM 環境にある変数よりも優先されるのである。
.PP
たいていのオペレーティングシステムのダイナミック・リンカは、
ダイナミック・リンキングを制御する働きがある環境変数を、
\fBsudo\fP もその一つである setuid 実行ファイルの環境から除去するようになっていることに注意していただきたい。
オペレーティングシステムによって名前は様々だが、_RLD*, DYLD_*, LD_*,
LDR_*, LIBPATH, SHLIB_PATH などが、この範疇に含まれるだろう。
そうした変数は、\fBsudo\fP の実行が始まるよりも前に、環境から除去されるので、
\fBsudo\fP がそうした変数を保存することは不可能である。
.PP
特例として、\fBsudo\fP に \fB\-i\fP (initial login) オプションが指定されている場合は、
\fBsudoers\fP は \fIenv_reset\fP の有効・無効にかかわらず、環境を初期化する。
環境変数 DISPLAY, PATH, TERM は変更されないが、HOME, MAIL, SHELL, USER, LOGNAME
は、変身対象ユーザのそれにセットされる。ATX (及び PAM を使用していない
Linux システム) では、\fI/etc/environment\fP の内容も取り込まれる。
それ以外の環境変数はすべて捨てられる。
.PP
最後に、\fIenv_file\fP オプションが設定されている場合は、
そのファイルに記載されたいかなる変数も、
すでに存在している環境変数と衝突しないかぎり、
そこで指定されている値にセットされることになる。
.SH "SUDOERS ファイルの書式"
\fIsudoers\fP ファイルは二種類のエントリから構成されている。
(要するに変数である) エイリアスと (誰が何を実行できるかを指定している) ユーザ設定だ。
(訳注: 訳者としては、「エイリアス、デフォルト設定、ユーザ設定の三種類のエントリから構成されている」と言った方が、
現在の実態に合っているのではないかと思う。)
.PP
一人のユーザに複数のエントリがマッチするときは、順番に適用される。
複数の指定がマッチしている箇所については、最後にマッチしたものが使用される
(それが一番明示的なマッチだとはかぎらないが)。
.PP
以下では \fIsudoers\fP ファイルの文法を拡張 Backus\-Naur 記法 (EBNF) を用いて記述する。
EBNF を御存じないからといって、あきらめないでいただきたい。
わりと簡単なものだし、以下に出てくる定義には詳しい説明をつけておきますから。
.SS "EBNF の基礎の基礎"
EBNF は言語の文法を記述する簡潔で厳密な方法である。
EBNF の個々の定義は生成規則からできている。たとえば、
.PP
シンボル ::= 定義 | 別の定義 1 | 別の定義 2 ...
.PP
個々の生成規則は、ほかの生成規則を参照し、そのようにして言語の文法を作り上げている。
また EBNF には以下の演算子が含まれるが、正規表現で御存じの読者も多いだろう。
だが、いわゆる「ワイルドカード」文字と混同しないでいただきたい。
あれは別の意味を持っている。
.TP  6n
\&?
直前のシンボル (または、シンボルのグループ) が、あってもなくてもよいことを意味する。
すなわちそのシンボルは、1 回現れてもよいし、1 回も現れないでもよい。
.TP  6n
*
直前のシンボル (または、シンボルのグループ) が 0 回以上現れる。
.TP  6n
+
直前のシンボル (または、シンボルのグループ) が 1 回以上現れる。
.PP
丸カッコを使うと、複数のシンボルをグループにまとめることができる。
なお、混乱を避けるため、以下の定義では、それが (シンボル名ではなく)
文字どおりの文字列や記号であることを示す場合には、シングルクォート
(' ') で囲むことにする。
.SS エイリアス
エイリアスには四種類ある。User_Alias, Runas_Alias, Host_Alias,
Cmnd_Alias である。
.nf
.sp
.RS 0n
Alias ::= 'User_Alias'  User_Alias (':' User_Alias)* |
          'Runas_Alias' Runas_Alias (':' Runas_Alias)* |
          'Host_Alias'  Host_Alias (':' Host_Alias)* |
          'Cmnd_Alias'  Cmnd_Alias (':' Cmnd_Alias)*

User_Alias ::= NAME '=' User_List

Runas_Alias ::= NAME '=' Runas_List

Host_Alias ::= NAME '=' Host_List

Cmnd_Alias ::= NAME '=' Cmnd_List

NAME ::= [A\-Z]([A\-Z][0\-9]_)*
.RE
.fi
.PP
個々のエイリアスの定義は、次の形をとる。
.nf
.sp
.RS 0n
Alias_Type NAME = item1, item2, ...
.RE
.fi
.PP
上記において \fIAlias_Type\fP は、User_Alias, Runas_Alias, Host_Alias,
Cmnd_Alias のうちの一つである。NAME は、アルファベットの大文字、数字、
アンダースコア ('_') からなる文字列であるが、
先頭の文字はアルファベットの大文字でなければならない。
同じタイプのエイリアス定義を、コロンで (':') つないで、一行に複数書くこともできる。
たとえば、
.nf
.sp
.RS 0n
Alias_Type NAME = item1, item2, item3 : NAME = item4, item5
.RE
.fi
.PP
既存のエイリアスを再定義するのは、文法エラーである。
異なるタイプのエイリアスに対して同じ名前を使用することはできるが、
お薦めできることではない。
.PP
エイリアスの有効な要素となるものの定義は、以下のようになる。
.nf
.sp
.RS 0n
User_List ::= User |
              User ',' User_List

User ::= '!'* user name |
         '!'* #uid |
         '!'* %group |
         '!'* %#gid |
         '!'* +netgroup |
         '!'* %:nonunix_group |
         '!'* %:#nonunix_gid |
         '!'* User_Alias
.RE
.fi
.PP
User_List を構成するのは、一個以上の次のものである。
ユーザ名、ユーザID (接頭辞 '#' が付く)、
システムグループ名やその ID (それぞれ、接頭辞 '%' と '%#' が付く)、
ネットグループ名 (接頭辞 '+' が付く)、
non\-Unix グループ名やその ID (それぞれ、接頭辞 '%:' と '%:#' が付く)、
それに User_Alias。
リストの各項目の前には一個以上の '!' 演算子を付けてもよい。
奇数個の '!' はその項目の値を否定する。偶数個の場合は互い相殺されるだけだ。
なお、ユーザのネットグループについては、
ネットグループの成員中のユーザとドメインの要素のみを使って、マッチングが行われる。
ホストの要素はマッチングに使用されない。
.PP
ユーザ名、uid、グループ名、gid、ネットグループ名、non\-Unix グループ名、
non\-Unix グループ の gid は、ダブルクォートで囲めば、特殊文字をエスープしないですむ。
ダブルクォートで囲まずに特殊文字を使いたいなら、エスケープした 16 進数を指定してやればよい。
たとえば、スペースなら \ex20 という具合だ。
ダブルクォートを使用する場合は、接頭辞があれば、それをダブルクォートの内側に入れなければならない。
.PP
non\-Unix グループやその gid を指定するときのの書式が、
実際にどんなものになるかは、
利用するグループ・プロバイダー・プラグイン (group provider plugin) 次第である。
たとえば、QAS (Quest Authentication Services) の AD プラグインは、
以下の書式をサポートしている。
.TP  6n
\fB\(bu\fP
同じドメインのグループ: "%:Group Name"
.TP  6n
\fB\(bu\fP
任意のドメインのグループ: "%:Group Name@FULLY.QUALIFIED.DOMAIN"
.TP  6n
\fB\(bu\fP
グループ SID: "%:S\-1\-2\-34\-5678901234\-5678901234\-5678901234\-567"
.PP
詳細については、
「グループ・プロバイダー・プラグイン」セクションをご覧いただきたい。
.PP
グループ名を囲む引用符は任意であることに注意していただきたい。
文字列を引用符で囲まない場合は、バックスラッシュ ('\e') を使って、
スペースや特殊文字をエスケープしなければならない。
エスケープする必要がある文字のリストについては、
「ほかの特殊文字と予約語」のセクションを参照していただきたい。
.nf
.sp
.RS 0n
Runas_List ::= Runas_Member |
               Runas_Member ',' Runas_List

Runas_Member ::= '!'* user name |
                 '!'* #uid |
                 '!'* %group |
                 '!'* %#gid |
                 '!'* %:nonunix_group |
                 '!'* %:#nonunix_gid |
                 '!'* +netgroup |
                 '!'* Runas_Alias
.RE
.fi
.PP
Runas_List は User_List に似ている。違うのは、User_Alias ではなく、
Runas_Alias が使えることだ。ユーザ名やグループ名のマッチは、
文字列として行われることに気を付けていただきたい。
言い換えると、二つのユーザ名 (あるいは、グループ名) は、
仮に同じ uid (gid) を持っていても、別個のものと見なされるのである。
だから、もし同じ uid を持ったすべてのユーザ名にマッチさせたかったら
(たとえば、root と toor がそうだとしよう)、ユーザ名の代わりに uid を使えばよい
(この例なら、#0 である)。
.nf
.sp
.RS 0n
Host_List ::= Host |
              Host ',' Host_List

Host ::= '!'* host name |
         '!'* ip_addr |
         '!'* network(/netmask)? |
         '!'* +netgroup |
         '!'* Host_Alias
.RE
.fi
.PP
Host_List を構成するのは、一個以上の次のものである。
ホスト名、IP アドレス、ネットワークアドレス、
ネットグループ名 (接頭辞 '+' が付く)、および他のエイリアス。
ここでもまた、項目の値は、'!' 演算子によって否定することができる。なお、
ホストのネットグループについては、ネットグループの成員中のホスト
(完全修飾名とそうでないもののどちらでも) とドメインの要素のみを使って、
マッチングが行われる。ユーザの要素はマッチングに使用されない。
ネットワークアドレスをネットマスクなしで指定した場合は、
\fBsudo\fP はローカルホストのネットワークインターフェースを一つ一つ参照し、
指定されたネットワークアドレスと同じアドレスを持つインターフェースがあれば、
そのネットマスクを使用することになる。ネットマスクの指定は、
標準の IP アドレス表記 (たとえば 255.255.255.0 や ffff:ffff:ffff:ffff::) でもよく、
CIDR 表記 (ビット数、たとえば 24 や 64) でもよい。
ホスト名の一部にシェル風のワイルドカードを使用することができるが
(下記の「ワイルドカード」セクションを参照)、
ご使用のマシンの hostname コマンドが完全修飾ドメイン名 (FQDN) を返さない場合、
ワイルドカードを利用するには \fIfqdn\fP オプションを使う必要がある。
なお、\fBsudo\fP がチェックするのは、
実在のネットワークインターフェースだけだということに留意してほしい。
すなわち、IP アドレス 127.0.0.1 (localhost) がマッチすることは、絶対にないのである。
また、"localhost" というホスト名がマッチするのは、
それが実際のホスト名であるときだけであり、
それは通常、ネットワークにつながっていないシステムの場合にしか当てはまらない。
.nf
.sp
.RS 0n
digest ::= [A\-Fa\-f0\-9]+ |
	   [[A\-Za\-z0\-9\+/=]+

Digest_Spec ::= "sha224" ':' digest |
		"sha256" ':' digest |
		"sha384" ':' digest |
		"sha512" ':' digest

Cmnd_List ::= Cmnd |
              Cmnd ',' Cmnd_List

command name ::= file name |
                 file name args |
                 file name '""'

Cmnd ::= Digest_Spec? '!'* command name |
         '!'* directory |
         '!'* "sudoedit" |
         '!'* Cmnd_Alias
.RE
.fi
.PP
Cmnd_List は一個以上の、コマンド名、ディレクトリ、
他のエイリアスからなるリストである。コマンド名は絶対パスのファイル名であり、
シェル風のワイルドカードを含んでいても構わない(下記の「ワイルドカード」セクションを参照)。
単にファイル名だけ指定した場合、
ユーザはお望みのどんな引き数でも付けてそのコマンドを実行することができる。
とは言え、コマンドライン引き数を (ワイルドカードを含めて)
指定しても構わないし、また、引き数に "\&" を指定して、そのコマンドは、
コマンドライン引き数を付けずに実行することしかできないと指示することもできる。
ディレクトリは '/' で終わる絶対パス名である。
Cmnd_List にディレクトリを指定すると、
ユーザーはそのディレクトリ内の任意のファイルを実行できるようになる
(だが、そのサブディレクトリにあるファイルは実行できない)。
.PP
Cmnd がコマンドライン引き数を伴っている場合は、 Cmnd 中の引き数は、
ユーザがコマンドラインで打ち込む引き数と正確に一致しなければならない
(Cmnd 中の引き数にワイルドカードがあるならば、
それがコマンドラインの引き数とマッチしなければならない)。
以下に挙げる文字をコマンド引き数の中で用いるときは、
\&'\e' によってエスケープしなければならないことに注意していただきたい。
\&',\&', ':\&', '=\&', '\e' がそれである。
Cmnd に "sudoedit" という \fBsudo\fP の組み込みコマンドを指定すると、
ユーザに \fBsudo\fP を \fB\-e\fP オプション付きで
(あるいは、\fBsudoedit\fP というコマンド名で) 実行することを許可することになる。
この場合、コマンドライン引き数も指定することができるのは、
普通のコマンドとまったく同様だ。
"sudoedit" は、\fBsudo\fP そのものに組み込まれたコマンドなので、\fIsudoers\fP
ファイルではパスを前に付けずに指定しなければならないことに注意していただきたい。
.PP
コマンド名の前に Digest_Spec が付いている場合、コマンドのマッチに成功するのは、
指定された SHA\-2 ダイジェストを使って照合できたときだけである。
ダイジェストのフォーマットとしては、
sha224, sha256, sha384, sha512 をサポートしている。
文字列は、16 進数形式でも base64 形式でも指定できる (base64 の方が短くて済む)。
SHA\-2 ダイジェストを 16 進数形式で生成できるユーティリティはいくつかある。
openssl, shasum, sha224sum, sha256sum, sha384sum, sha512sum
といったものがそうだ。
.PP
たとえば、openssl を使うなら、
.nf
.sp
.RS 0n
$ openssl dgst \-sha224 /bin/ls
SHA224(/bin/ls)= 118187da8364d490b4a7debbf483004e8f3e053ec954309de2c41a25
.RE
.fi
.PP
openssl を使って、base64 の出力を生成することもできる。
.nf
.sp
.RS 0n
$ openssl dgst \-binary \-sha224 /bin/ls | openssl base64
EYGH2oNk1JC0p9679IMATo8+BT7JVDCd4sQaJQ==
.RE
.fi
.PP
注意: もしユーザがコマンドそのものに対して (直接であれ、\fBsudo\fP コマンドを通してであれ)
書き込み権限を持っているならば、そのユーザは、ダイジェストチェックが済み、
コマンドが実行されるまでの間に、コマンドを別のものに置き換えることができるかもしれない。
同様の競合状態が、fexecve(2) システムコールを持っていないシステムでは、
コマンドが存在するディレクトリがユーザによって書き込み可能であるときに起こりえる。
.PP
コマンド・ダイジェストをサポートしているのは、バージョン 1.8.7 以上だけである。
.SS "デフォルト設定 (Defaults)"
かなりの設定オプションが、
一行以上の Default_Entry 行を指定することで実行時にデフォルトの値から変更可能だ。
その効果の及ぶ範囲は、あらゆるホストのすべてのユーザにすることもできるし、
ある特定のホストのすべてのユーザ、ある特定のユーザ、ある特定のコマンド、
ある特定のユーザとして実行するコマンドなどに限定することもできる。
気を付けてほしいのは、コマンドに限定した Defaults 行にコマンドライン引き数まで書くことができないことだ。
引き数を指定する必要がある場合は、Cmnd_Alias を定義して、代わりにそれを参照すればよい。
.nf
.sp
.RS 0n
Default_Type ::= 'Defaults' |
                 'Defaults' '@' Host_List |
                 'Defaults' ':' User_List |
                 'Defaults' '!' Cmnd_List |
                 'Defaults' '>' Runas_List

Default_Entry ::= Default_Type Parameter_List

Parameter_List ::= Parameter |
                   Parameter ',' Parameter_List

Parameter ::= Parameter '=' Value |
              Parameter '+=' Value |
              Parameter '\-=' Value |
              '!'* Parameter
.RE
.fi
.PP
パラメータは\fBフラグ\fP、\fB整数値\fP、\fB文字列\fP、\fBリスト\fPのどれであってもよい。
フラグは要するにブーリアン (真偽値) であり、'\&!' 演算子で off にできる。
整数値、文字列、リストのパラメータにも、真偽値として使用して、
それを無効にできるものがいくつか存在する。
パラメータの値が複数の単語を含むときは、
値をダブルクオート (\&"") で囲むとよい。
特殊文字はバックスラッシュ ('\e') でエスケープすることができる。
.PP
リストには代入演算子が = のほかにもう二つある。+= と \-= である。
こうした演算子は、それぞれ、リストに付け加えたり、リストから削除したりするのに使用する。
\-= 演算子を使って、リストに存在しない要素を消去しようとしても、エラーにはならない。
.PP
Defaults 行の解析は、次の順序で行われる。まず、汎用、Host、User の Defaults
が解析され、それから Runas の Defaults、最後にコマンドの Defaults の順番になる。
.PP
Defaults 行で使用できるパラメータのリストについては、
「SUDOERS のオプション」を御覧いただきたい。
.SS "ユーザ設定 (User Specification)"
.nf
.RS 0n
User_Spec ::= User_List Host_List '=' Cmnd_Spec_List \e
              (':' Host_List '=' Cmnd_Spec_List)*

Cmnd_Spec_List ::= Cmnd_Spec |
                   Cmnd_Spec ',' Cmnd_Spec_List

Cmnd_Spec ::= Runas_Spec? SELinux_Spec? Tag_Spec* Cmnd

Runas_Spec ::= '(' Runas_List? (':' Runas_List)? ')'

SELinux_Spec ::= ('ROLE=role' | 'TYPE=type')

Tag_Spec ::= ('EXEC:' | 'NOEXEC:' | 'FOLLOW:' | 'NOFOLLOW' |
              'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' |
              'NOLOG_OUTPUT:' | 'MAIL:' | 'NOMAIL:' | 'PASSWD:' |
              'NOPASSWD:' | 'SETENV:' | 'NOSETENV:')
.RE
.fi
.PP
\fBユーザ設定\fPは、あるユーザが、指定されたホストで (どのユーザに変身して)
どのコマンドを実行できるかを決定する。デフォルトでは、コマンドは \fBroot\fP
に変身して実行されるが、これはコマンドごとに変更することができる。
.PP
ユーザ設定の基本構造は、"who where = (as_whom) what" である
("誰が どのホストで = (誰に変身して) 何を")。構成部分に分けて説明しよう。
.SS Runas_Spec
Runas_Spec は変身の対象となるユーザやグループを規定している。
完全な形の Runas_Spec は、(上で定義しているように) コロン (':\&') で区切られ、
カッコで囲まれた、二つの Runas_List からなっている。一つ目の Runas_List は、
\fBsudo\fP で \fB\-u\fP オプションを使ったときに変身できるユーザを指している。
二番目の方が規定しているのは、\fBsudo\fP の \fB\-g\fP オプションによって指定できるグループのリストだ。
両方の Runas_List が指定されている場合は、それぞれの Runas_List
にリストされているユーザとグループの任意の組み合わせで、
コマンドを実行することができる。一つ目の Runas_List だけが指定されている場合は、
リスト中のいかなるユーザにでも変身してコマンドを実行できるが、
\fB\-g\fP オプションを指定することはできない。一つ目の Runas_List が空で、
二番目だけ指定されている場合は、\fBsudo\fP を実行するユーザの資格で、
グループを Runas_List にリストされている任意のグループに設定して、
コマンドを実行することができる。Runas_Lists が両方とも空の場合は、
\fBsudo\fP を実行するユーザの資格でしかコマンドを実行できない。
Runas_Spec がまったく指定されていない場合は、\fBroot\fP としてコマンドを実行できるが、
グループを指定することはできない。
.PP
Runas_Spec は、それに続くコマンドに対してデフォルトを定める。
それはどういうことかと言うと、次のようなエントリがあったとしよう。
.nf
.sp
.RS 0n
dgb	boulder = (operator) /bin/ls, /bin/kill, /usr/bin/lprm
.RE
.fi
.PP
ユーザ \fBdgb\fP は \fI/bin/ls\fP, \fI/bin/kill\fP, \fI/usr/bin/lprm\fP を実行することができる。
ただし、\fBoperator\fP として実行できるだけだ。たとえば、次のようにである。
.nf
.sp
.RS 0n
$ sudo \-u operator /bin/ls
.RE
.fi
.PP
エントリの後ろの方の Runas_Spec を変更することも可能だ。
上のエントリをこんなふうに書き変えたとしよう。
.nf
.sp
.RS 0n
dgb	boulder = (operator) /bin/ls, (root) /bin/kill, /usr/bin/lprm
.RE
.fi
.PP
すると、ユーザ \fBdgb\fP は、\fI/bin/ls\fP こそ \fBoperator\fP としてだが、
\fI/bin/kill\fP や \fI/usr/bin/lprm\fP は \fBroot\fP の資格で実行できるようになる。
.PP
\fBdgb\fP が /bin/ls を実行するとき、変身対象ユーザとグループのどちらでも
\fBoperator\fP になれるように、この記述を拡張することもできる。
.nf
.sp
.RS 0n
dgb	boulder = (operator : operator) /bin/ls, (root) /bin/kill,\e
	/usr/bin/lprm
.RE
.fi
.PP
注意してほしいが、Runas_Spec のグループの部分は、
コマンドをそのグループとして実行することをユーザに許可しているのであって、
そうすることをユーザに強制しているのではない。
コマンドラインでグループを指定しない場合は、コマンドは、
パスワード・データベースにある変身対象ユーザのエントリに登録されているグループとして実行されることになるのだ。
以下のコマンドはすべて、上記の sudoers エントリによって許可されることになるだろう。
.nf
.sp
.RS 0n
$ sudo \-u operator /bin/ls
$ sudo \-u operator \-g operator /bin/ls
$ sudo \-g operator /bin/ls
.RE
.fi
.PP
次の例では、ユーザ \fBtcm\fP がモデムのデバイスファイルにアクセスするコマンドを
dialer グループとして実行できるようにしている。
.nf
.sp
.RS 0n
tcm	boulder = (:dialer) /usr/bin/tip, /usr/bin/cu,\e
	/usr/local/bin/minicom
.RE
.fi
.PP
この例では、グループしか指定できないことに注意してほしい。コマンドは、
ユーザ \fBtcm\fP の資格のまま実行されるのである。たとえば、次のように。
.nf
.sp
.RS 0n
$ sudo \-g dialer /usr/bin/cu
.RE
.fi
.PP
Runas_Spec には複数のユーザやグループが存在してもよい。
その場合、ユーザは \fB\-u\fP や \fB\-g\fP オプションを使って、
ユーザとグループのどんな組み合わせでも選択することができる。
.nf
.sp
.RS 0n
alan	ALL = (root, bin : operator, system) ALL
.RE
.fi
.PP
この例では、ユーザ \fBalan\fP は root と bin のどちらのユーザにでも変身して、
任意のコマンドを実行することができる。また、グループを
operator や system に設定することも自由である。
.SS SELinux_Spec
SELinux をサポートするシステムでは、\fIsudoers\fP ファイルのエントリで
SELinux の role や type をコマンドに関連付けることも可能である。
role や type を特定のコマンドについて指定すると、
\fIsudoers\fP 中でデフォルトとして設定されている role や type があっても、
それよりも優先される。もっとも、role や type をコマンドラインで指定すれば、
そちらが \fIsudoers\fP 中の値よりさらに優先されることになる。
.SS Tag_Spec
コマンドは 0 個以上のタグを伴うことができる。使用できるタグの値は 14 個あり、
EXEC, NOEXEC, FOLLOW, NOFOLLOW, LOG_INPUT, NOLOG_INPUT, LOG_OUTPUT,
NOLOG_OUTPUT, MAIL, NOMAIL, PASSWD, NOPASSWD, SETENV, NOSETENV が、それである。
ある Cmnd にタグをセットすると、
Cmnd_Spec_List 中のそれ以後の Cmnd は、
反対の意味を持つタグによって変更されないかぎり、そのタグを継承することになる
(すなわち、PASSWD は NOPASSWD を無効にし、NOEXEC は EXEC を無効にする)。
.TP  2n
\fIEXEC\fP と \fINOEXEC\fP
.sp
\fBsudo\fP が \fInoexec\fP サポートつきでコンパイルされ、
使用しているオペレーティングシステムがそれに対応している場合、NOEXEC タグを利用すれば、
動的にリンクされた実行ファイルが、そこからさらにコマンドを実行するのを防ぐことができる。
.sp
次の例では、ユーザ \fBaaron\fP は \fI/usr/bin/more\fP と
\fI/usr/bin/vi\fP を実行できるが、シェル・エスケープは利用できない。
.nf
.sp
.RS 2n
aaron	shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
.RE
.fi
.RS 2n
.sp
NOEXEC がどんなふうに働くのか、お使いのシステムで利用できるかどうか、
などについてさらに詳しく知りたかったら、
後述の「シェル・エスケープの防止」セクションを御覧になるとよい。
.RE
.TP  2n
\fIFOLLOW\fP と \fINOFOLLOW\fP
バージョン 1.8.15 以来、\fBsudoedit\fP は、
\fIsudoedit_follow\fP オプションが有効になっていないかぎり、
ファイルがシンボリックリンクならば、それを開かないようになっている。
\fIFOLLOW\fP と \fINOFOLLOW\fP タグは、\fIsudoedit_follow\fP の値を上書きするので、
これを使用すれば、シンボリックリンクの編集をコマンドごとに許可したり、
禁止したりすることができる。
この二つのタグが効果があるのは、\fIsudoedit\fP コマンドに対してのみであり、
他のどんなコマンドに対しても無視される。
.TP  2n
\fILOG_INPUT\fP と \fINOLOG_INPUT\fP
.sp
この二つのタグは \fIlog_input\fP オプションの値をコマンドごとに変更する。
詳しい情報については、後述する「SUDOERS のオプション」セクションの
\fIlog_input\fP の説明をご覧になっていただきたい。
.TP  2n
\fILOG_OUTPUT\fP と \fINOLOG_OUTPUT\fP
.sp
この二つのタグは \fIlog_output\fP オプションの値をコマンドごとに変更する。
詳しい情報については、後述する「SUDOERS のオプション」セクションの
\fIlog_output\fP の説明をご覧になっていただきたい。
.TP  2n
\fIMAIL\fP と \fINOMAIL\fP
.sp
この二つのタグを使えば、
\fImail_all_cmnds\fP オプションの値をコマンドごとに上書きすることによって、
ユーザがコマンドを実行したときにメールを送付するかどうかについて、
きめ細かな制御を行うことができる。
\fBsudo\fP が \fB\-l\fP や \fB\-v\fP オプションを付けて実行されたときには、効果がない。
\fINOMAIL\fP は、\fImail_always\fP や \fImail_no_perms\fP オプションも上書きする。
詳細については、後述の「SUDOERS のオプション」セクションにある
\fImail_all_cmnds\fP, \fImail_always\fP, \fImail_no_perms\fP の説明をご覧いただきたい。
.TP  2n
\fIPASSWD\fP と \fINOPASSWD\fP
.sp
デフォルトでは、\fBsudo\fP はコマンドを実行する前に、ユーザが本人であることを証明するように求める。
この振舞いは NOPASSWD タグによって変更することができる。Runas_Spec と同様、
NOPASSWD タグも Cmnd_Spec_List 中のそれに続くコマンドに対してデフォルトを定める。
PASSWD の働きは反対であり、振舞いを元に戻したいときに使える。たとえば、
.nf
.sp
.RS 2n
ray	rushmore = NOPASSWD: /bin/kill, /bin/ls, /usr/bin/lprm
.RE
.fi
.RS 2n
.sp
とすれば、ユーザ \fBray\fP はマシン rushmore 上で認証をしないでも
\fBroot\fP として \fI/bin/kill\fP, \fI/bin/ls\fP, \fI/usr/bin/lprm\fP
を実行できるようになる。もし \fBray\fP がパスワードなしで実行できるコマンドを
\fI/bin/kill\fP だけに絞りたいのなら、エントリはこうなるだろう。
.nf
.sp
.RS 2n
ray	rushmore = NOPASSWD: /bin/kill, PASSWD: /bin/ls, /usr/bin/lprm
.RE
.fi
.sp
ただし、ユーザが \fIexempt_group\fP オプションで指定されているグループに属する場合は、
PASSWD タグが効果を持たないことに注意してほしい。
.sp
デフォルトでは、現在使用中のホストに関するユーザのエントリのうちに
NOPASSWD タグが指定されているものが一つでもあれば、
そのユーザはパスワードなしで "sudo \-l" を実行できる。
なお、ユーザがパスワードなしで "sudo \-v" を実行できるのは、
現在使用中のホストに関するそのユーザのエントリのすべてで
NOPASSWD タグが生きているときのみである。この動作は、\fIverifypw\fP や \fIlistpw\fP
オプションによって変更できる。
.RE
.TP  2n
\fISETENV\fP と \fINOSETENV\fP
.sp
上記のタグは \fIsetenv\fP オプションの値をコマンドごとに変更する。
あるコマンドに対して SETENV を設定すると、
ユーザがコマンドラインから \fB\-E\fP オプションを使用して、
\fIenv_reset\fP オプションを無効にできるようになることに注意してほしい。
それだけではない。コマンドラインから設定する環境変数が \fIenv_check\fP,
\fIenv_delete\fP, \fIenv_keep\fP による規制を受けないようにもなる。
それ故、こうした形で環境変数を設定することを許可するのは、
信用できるユーザだけに限るべきである。なお、マッチするコマンドが
\fBALL\fP だった場合は、暗黙のうちに SETENVタグがそのコマンドに付けられるが、
このデフォルトの動作は UNSETENV タグを使えば打ち消すことができる。
.SS ワイルドカード
\fIsudoers\fP ファイルでは、ホスト名、コマンドのパス名、
コマンドライン引き数にシェル形式のワイルドカード (メタ文字とか
glob キャラクタとも言う) が使用できる。ワイルドカードのマッチングは、
IEEE Std 1003.1 ("POSIX.1") で規定されている glob(3) や fnmatch(3)
関数を用いて行われる。
.TP  10n
*
0 個以上の任意の文字 (ホワイトスペースも含む) にマッチする。
.TP  10n
\&?
任意の 1 文字 (ホワイトスペースも含む) にマッチする。
.TP  10n
[...]
指定された範囲の任意の 1 文字にマッチする。
.TP  10n
[!...]
指定された範囲\fI以外\fPの任意の 1 文字にマッチする。
.TP  10n
\ex
\&'x' がどんな文字であっても、'x' そのものとして評価する。
この表記法は '*', '\&?', '[\&', ']\&'
といった特殊文字をエスケープするために使用される。
.PP
\fB上記のものは正規表現ではないことに注意していただきたい。\fP
正規表現とは違って、範囲内の文字一つ以上にマッチさせる方法は存在しない。
.PP
使用しているシステムの glob(3) や fnmatch(3) 関数が文字クラスに対応しているなら、
文字クラスが使用できる。ただし、':\&' 文字は、
\fIsudoers\fP で特別な意味を持っているので、エスケープしなければならない。
一例を上げる。
.nf
.sp
.RS 4n
/bin/ls [[\e:\&alpha\e:\&]]*
.RE
.fi
.PP
\fIsudoers\fP 中で上のように書けば、アルファベットの文字で始まるどんなファイル名にもマッチするだろう。
.PP
コマンドのファイル名の部分で使われたワイルドカードはフォワードスラッシュ
('/') に\fIマッチしない\fPことに注意していただきたい。そこで、次のようなパスは、
.nf
.sp
.RS 4n
/usr/bin/*
.RE
.fi
.PP
\fI/usr/bin/who\fP にマッチするが、\fI/usr/bin/X11/xterm\fP にはマッチしない。
.PP
だが、コマンドライン引き数の部分のマッチングでは、
ワイルドカードはスラッシュに\fIしっかりマッチする\fP。
コマンドライン引き数には、任意の文字列を含むことが認められており、
パス名しか許されていないわけではないからだ。
.PP
\fIsudoers\fP \fB中でコマンドライン引き数にワイルドカードを使用するときは、\fP
\fB注意しなければならない。\fP
.br
コマンドライン引き数は、結合して一つの文字列にした上で、マッチングを行う。
そのため、'\&?' や '*' といったワイルドカード文字が、
ユーザが指定したコマンドライン引き数と、
単語の境界をまたいでマッチしてしまうことになるのだ。
これは想定外のことかもしれない。たとえば、\fIsudoers\fP に次のような行があると、
.nf
.sp
.RS 4n
%operator ALL = /bin/cat /var/log/messages*
.RE
.fi
.PP
以下のコマンドが実行できることになるが、
.nf
.sp
.RS 4n
$ sudo cat /var/log/messages.1
.RE
.fi
.PP
また、以下のコマンドの実行も可能になってしまう。
.nf
.sp
.RS 4n
$ sudo cat /var/log/messages /etc/shadow
.RE
.fi
.PP
後者は、おそらく意図に反しているだろう。たいていの場合、
コマンドラインの処理は、\fIsudoers\fP ファイルの中ではなく、
スクリプト言語中で行った方が間違いがない。
.SS ワイルドカード・ルールの例外
上記ルールには以下の例外がある。
.TP  10n
\&""
\fIsudoers\fP ファイルのエントリにおいて、空文字列 \&""
が唯一のコマンドライン引き数だった場合は、
そのコマンドは引き数を\fI付けずに\fP実行しなければならないことを意味している。
.TP  10n
sudoedit
組み込みコマンド \fIsudoedit\fP にコマンドラインで渡す引き数は、
常にパス名であるはずだ。そこで、ワイルドカードはフォワードスラッシュ
('/') にマッチしないようになっている
(訳注: \fIsudoers\fP 中で \fIsudoedit\fP に対して引き数を指定する場合、
それは一般のコマンドライン引き数と同じ扱いではなく、パス名扱いになるということ)。
.SS "sudoers に他のファイルをインクルードする"
#include 命令や #includedir 命令を使えば、現在解析中の \fIsudoers\fP ファイルに、
外部にあるほかの \fIsudoers\fP ファイルをインクルードすることができる。
.PP
この方法を使えば、たとえば、サイト全体で使用する \fIsudoers\fP ファイルのほかに、
マシンごとのローカルな \fIsudoers\fP ファイルを持つことができる。
ここでは、サイト全体の \fIsudoers\fP ファイルを \fI/etc/sudoers\fP とし、
マシンごとの方は \fI/etc/sudoers.local\fP とすることにしよう。
\fI/etc/sudoers\fP に \fI/etc/sudoers.local\fP をインクルードするには、
\fI/etc/sudoers\fP 中に次の行を書き込めばよい。
.nf
.sp
.RS 4n
#include /etc/sudoers.local
.RE
.fi
.PP
\fBsudo\fP は解析中この行に出会うと、カレントファイル (\fI/etc/sudoers\fP だ)
の処理を一時中止して、処理の対象を \fI/etc/sudoers.local\fP に切り替える。
そして、\fI/etc/sudoers.local\fP の末尾まで達したら、\fI/etc/sudoers\fP の残りを処理するのである。
インクルードされるファイルが、さらに他のファイルをインクルードしていてもよい。
インクルートのネストには、128 ファイルまでというハード・リミットがあって、
インクルードファイルのループが起きないようになっている。
.PP
インクルードファイルのパスが絶対パスでない場合は (すなわち、パスが
\&'/' で始まっていない場合は)、インクルードする側の sudoers
ファイルと同じディレクトリに、インクルードされるファイルも存在しなければならない。
たとえば、\fI/etc/sudoers\fP に次のような行があったら、
.nf
.sp
.RS 4n
#include sudoers.local
.RE
.fi
.PP
インクルードされるファイルは、\fI/etc/sudoers.local\fP である。
.PP
なお、ファイル名には %h エスケープが使える。これはホスト名の短縮形を示している。
たとえば、マシンのホスト名が "xerxes" のとき、
.nf
.sp
.RS 4n
#include /etc/sudoers.%h
.RE
.fi
.PP
と書けば、\fBsudo\fP はファイル \fI/etc/sudoers.xerxes\fP
をインクルードすることになる。
.PP
#includedir 命令を使えば、\fIsudoers.d\fP ディレクトリを作っておいて、
システムのパッケージ管理者がパッケージをインストールする際に \fIsudoers\fP
のルールを記したファイルをそこに入れてやる、といったことが可能になる。
たとえば、次のように書くと、
.nf
.sp
.RS 4n
#includedir /etc/sudoers.d
.RE
.fi
.PP
\fBsudo\fP は \fI/etc/sudoers.d\fP にあるファイルを一つづつ読み込む。
ただし、末尾が '~' だったり、'.\&' 文字を含んでいたりするファイル名はスキップするが、
これは、パッケージマネージャやエディタが作った、
テンポラリファイルやバックアップファイルを読み込むような問題を起こさないためである。
ファイルは辞書順にソートされて、解析される。すなわち、\fI/etc/sudoers.d/01_first\fP は
\fI/etc/sudoers.d/10_second\fP より前に解析されるということだ。
ソートは辞書順であって、数値の順ではないので、
\fI/etc/sudoers.d/1_whoops\fP というファイルがあっても、
\fI/etc/sudoers.d/10_second\fP \fIより後で\fPロードされることに注意していただきたい。
ファイル名の先頭を 0 で埋めて数字の桁を揃えれば、
こうした問題を回避することができる。
.PP
気をつけていただきたいが、#include でインクルードされたファイルとは違って
(訳注: \fBvisudo\fP は \fI/etc/sudoers\fP を編集するとき、#include
で指定したファイルがあれば、続けてそれも編集する)、
\fBvisudo\fP が #includedir で指定したディレクトリのファイルまで編集するのは、
シンタクスエラーを含むものがあるときだけである。
とは言え、\fBvisudo\fP を \fB\-f\fP オプション付きで実行して、
ディレクトリ中のファイルを直接編集することは可能だが、その場合は、
他のファイルで定義されているエイリアスが再定義されていても、
それを見つけて指摘してくれることはない。
.SS ほかの特殊文字と予約語
パウンド記号 ('#') はコメントを示すのに使用される
(例外は、#include 命令の一部であるときや、ユーザ名に関連して現れ、
その後に一個以上の数字が続くときであり、後者の場合は uid と見なされる)。
コメント記号とそれに続くテキストは、行末にいたるまで無視される。
.PP
予約語 \fBALL\fP は組込みのエイリアスであり、何に対してでもマッチする。
\fBALL\fP は、Cmnd_Alias, User_Alias, Runas_Alias, Host_Alias
を代わりに使えるところなら、どこでも使用できる。
\fBALL\fP という名前のエイリアスを自分で定義しようとしてはいけない。
組込みのエイリアスの方が、自分で作ったエイリアスより優先して使われるからだ。
\fBALL\fP の使用には危険が伴うことがあるのを忘れないでいただきたい。
なぜなら、\fBALL\fP をコマンドに関して使うと、
ユーザにシステム上の\fIどんな\fPコマンドでも実行することを許してしまうからである。
.PP
エクスクラメーションマーク ('\&!') は、リストやエイリアス中はもちろん、
Cmnd の前でも論理 \fInot\fP 演算子として使用することができる。
これによってある値を除外することが可能になるわけだ。
ただし、'\&!' 演算子が効果を持つためには、
そこから除外する対象が存在しなければならない。
たとえば、root 以外のすべてのユーザにマッチさせたい場合は、
次の表現を使用する。
.nf
.sp
.RS 4n
ALL,!root
.RE
.fi
.PP
次のように \fBALL\fP の記述を省くと、
.nf
.sp
.RS 4n
!root
.RE
.fi
.PP
確かに root を明示的に否定することにはなるが、
他のどんなユーザともマッチすることがない。
この点が、正真の「否定」演算子とは違っている。
.PP
とは言え、組込みエイリアス \fBALL\fP と '\&!' を組み合わせて、
「二三のコマンド以外のすべての」コマンドの実行をあるユーザに許可しようとしても、
意図どおりの動きになることはめったにないことに気をつけていただきたい
(下記の「セキュリティに関する注意点」を参照)。
.PP
長い行は、行末にバックスラッシュ '\e' を置けば、継続することができる。
.PP
リストにおける要素間やユーザ設定における構文用特殊文字 ('=\&', ':\&',
\&'(\&', ')\&') の前後に空白 (white space) を入れることは、任意である。
.PP
次の文字を単語 (ユーザ名とかホスト名とか) の一部として使うときは、
バックスラッシュ ('\e') でエスケープしなければならない。
\&'\&!', '=\&', ':\&', ',\&', '(\&', ')\&', '\e' がそれである。
.SH "SUDOERS のオプション"
すでに説明したように、\fBsudo\fP の動作は Default_Entry 行によって変更することができる。
Defaults に与えることのできるパラメータについて、
サポートされているもののすべてを、タイプ別にまとめて以下に列挙する。
.PP
\fBブーリアン・フラグ\fP (真偽値)
.TP  18n
always_query_group_plugin
\fIgroup_plugin\fP の設定がなされている場合に、
%group の形式のグループを解決するのに、
同名のシステム・グループが同時に存在しないかぎり、
指定された \fIgroup_plugin\fP を使用する。
\fIalways_query_group_plugin\fP が設定されていない通常の状態では、
%:group の形式のグループのみが \fIgroup_plugin\fP に渡されるのである。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
always_set_home
これを有効にすると、\fBsudo\fP は環境変数 HOME を変身対象ユーザの
(\fB\-u\fP オプションが使用されていないかぎり、root の)
ホームディレクトリに設定することになる。事実上、
暗黙のうちに \fBsudo\fP に \fB\-H\fP オプションが常に指定されることになるわけだ。
気をつけていただきたいが、デフォルトでは、
\fIenv_reset\fP オプションが有効になっている場合は、
HOME の値は、変身対象ユーザのホームディレクトリに設定されることになる。
だから、\fIalways_set_home\fP
の指定に効果があるのは、\fIenv_reset\fP を無効に設定している場合か、
\fIenv_keep\fP のリストに HOME が存在する場合だけである。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
authenticate
これをセットすると、ユーザはコマンドの実行を許可される前に、パスワードで
(あるいは、ほかの認証方法で) 自分が本人であることを証明しなければならなくなる。
このデフォルト値は PASSWD や NOPASSWD タグで変更できる。
このフラグはデフォルトでは \fIon\fP である。
.TP  18n
closefrom_override
これをセットすると、ユーザが \fBsudo\fP の \fB\-C\fP
オプションを使用できるようになる。\fB\-C\fP オプションというのは、
\fBsudo\fP が開いているファイル・ディスクリプタを閉じていくとき、
どのディスクリプタから閉じていくかという、デフォルトの始点を変更するものだ。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
compress_io
これをセットすると、
\fBsudo\fP がコマンドの入出力のログを取るように設定されている場合に、
入出力のログを \fBzlib\fP を使って、圧縮することになる。
\fBsudo\fP が \fBzlib\fP をサポートするようにコンパイルされている場合、
このフラグのデフォルトは \fIon\fP である。
.TP  18n
exec_background
デフォルトでは、\fBsudo\fP 自体がフォアグラウンドで実行されているかぎり、
コマンドは \fBsudo\fP によってフォアグラウンド・プロセスとして実行される。それに対して、
\fIexec_background\fP フラグが有効になっている場合は、
コマンドが (入出力ロギングや \fIuse_pty\fP フラグのために) pty で実行されていると、
そのコマンドはバックグラウンド・プロセスとして実行されることになる。
このとき、そのコマンドが制御ターミナルから読み込みを行おうとすると
(あるいは、ターミナルの設定を変更しようとすると)、
コマンドは SIGTTIN シグナル (ターミナル設定の場合は SIGTTOU シグナル)
によってサスペンドされる。そうしたことが起きても、
\fBsudo\fP がフォアグラウンド・プロセスならば、
そのコマンドは制御ターミナルの使用を許可され、
ユーザが何の操作をしないでも、フォアグラウンドで実行が再開される。
コマンドの実行をバックグラウンドで始めることの利点は、
そうすれば、コマンドが明示的に要求しないかぎり、
\fBsudo\fP はターミナルから読み込みを行う必要がないということである。
そうしない場合は、コマンドが入力を要求しているか否かに関わりなく、
いかなる入力もコマンドに渡さなければならないのだ
(カーネルがターミナルのバッファリングをしているので、
コマンドが本当にその入力を必要としているかどうかを、
判断することはできないのである)。
この動作は、従来の \fIsudo\fP の動作とは異なっている。
また、コマンドが pty で実行されていないときの動作とも異なっている。
.sp
この動作がシームレスに行われるためには、オペレーティングシステムが、
システムコールの自動的な再スタートをサポートしていなければならない。
残念なことに、すべてのオペレーティングシステムが、
デフォルトでそれを行ってくれるわけではなく、
それを行ってくれるオペレーティングシステムにも、バグがあることがある。たとえば、
Mac OS X は、\fBtcgetattr\fP() や \fBtcsetattr\fP() システムコールの再スタートに失敗する
(これは Mac OS X のバグである)。それだけではなく、この動作は、
コマンドが SIGTTIN や SIGTTOU シグナルで停止することを当てにしているので、
そうしたシグナルは捕獲し、別のシグナル (たいていは SIGSTOP)
で自分を停止させるプログラムは、自動的にフォアグラウンド化できない。
linux の su(1) コマンドの動作が、系統によっては、そんなふうになっている。
このフラグはデフォルトでは \fIoff\fP である。
.sp
この設定は、バージョン 1.8.7 以上でのみサポートされている。
また、入出力ロギングが有効になっている場合や、
\fIuse_pty\fP フラグが有効になっている場合以外、この設定には効果がない。
.TP  18n
env_editor
これをセットすると、\fBvisudo\fP はデフォルトのエディタ・リストを利用する前に、
環境変数 EDITOR や VISUAL の値を使用するようになる。
それがセキュリティホールになりかねないことに注意していただきたい。
ユーザが root として任意のコマンドを、
ログに記録されることなく実行できるようになるからだ。
こうした環境変数を利用するときの、\fIenv_editor\fP を有効にするよりも安全な方法は、
\fIsudoers\fP ファイルの \fIeditor\fP オプションにコロンで区切ったエディタのリストを書いておくことだ。そうすれば、
\fBvisudo\fP が EDITOR や VISUAL を使うのは、それが \fIeditor\fP
オプションに指定した値とマッチしたときだけになる。
\fIenv_reset\fP フラグが有効な場合に、\fBsudo\fP 経由で \fBvisudo\fP を起動したとき
\fIenv_editor\fP フラグが効果を持つためには、
環境変数 EDITOR や VISUAL が \fIenv_keep\fP のリストに存在していなければならない。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
env_reset
これをセットすると、\fBsudo\fP は最小限の環境でコマンドを実行することになる。
その環境には、以下の変数が含まれている。TERM, PATH, HOME,
MAIL, SHELL, LOGNAME, USER, USERNAME、及び SUDO_* という変数。
それに、\fBsudo\fP を起動するユーザの環境にある変数のうち、
\fIenv_keep\fP や \fIenv_check\fP のリストにマッチするものが加わり、
さらに、\fIenv_file\fP オプションによって指定されたファイルがあれば、
そのファイルに記載されたすべての変数が追加される。
\fIenv_keep\fP や \fIenv_check\fP のリストにどんな変数が存在するかについては、
root ユーザとして \fBsudo\fP に \fB\-V\fP オプションを付けて実行すれば、
\fIsudoers\fP 中でグローバルな Defaults パラメータによって変更された結果を、
見ることができる。
なお、\fIsecure_path\fP オプションが設定されているときは、
その値が環境変数 PATH の値として使用される。
このフラグはデフォルトでは \fIon\fP である。
.TP  18n
fast_glob
通常 \fBsudo\fP はパス名のマッチングをするとき、glob(3)関数を使用して、
シェル・スタイルのワイルドカード展開 (glob) を行う。
しかし、glob(3) はファイルシステムにアクセスするので、
指定パターンによっては、作業を完了するまでに時間がかかることがある。
必要な時にマウントするようになっている (つまりオートマウントの)
ネットワーク・ファイル・システムを参照するときは、とりわけ時間がかかる。
\fIfast_glob\fP オプションを指定すると、\fBsudo\fP が fnmatch(3) 関数を使うようになるが、
こちらの関数はマッチングを行う際にファイルシステムにアクセスしない。
\fIfast_glob\fP の欠点は、\fI./ls\fP や \fI../bin/ls\fP
のような相対パスに対するマッチができないことである。そのため、
ワイルドカードを含むパス名が、否定演算子 '!\&'
と一緒に使われている場合に、セキュリティ上の問題が生じるおそれがある。
そうしたルールは簡単に迂回できるからだ。
従って、\fIsudoers\fP ファイルに、ワイルドカードを含むパス名を否定するルールが存在する場合は、
このオプションを使ってはいけない。このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
fqdn
ローカル・ホスト名 (hostname コマンドが返すもの) がドメイン名を含まないとき、
\fIsudoers\fP ファイルで完全修飾ホスト名を使用したかったら、
このフラッグをセットするとよい。すなわち、myhost ではなく、
myhost.mydomain.edu を使いたい場合だ。そのときでも、
そうしたければ、短縮形も使用できる (両方を混ぜて使うこともできる)。
このオプションに効果があるのは、\fBgetaddrinfo\fP() や \fBgethostbyname\fP()
関数が返すホストの「正規名 (canonical name)」が、
完全修飾ドメイン名であるときだけである。
システムがホスト名の解決に DNS を使用するように設定されているときは、普通そうなる。
.sp
システムが DNS よりも優先して \fI/etc/hosts\fP を使用するように設定されている場合、
ホストの正規名は完全修飾名ではないかもしれない。
ホスト名解決のために問い合わせる情報源の順番は、普通 \fI/etc/nsswitch.conf\fP,
\fI/etc/netsvc.conf\fP, \fI/etc/host.conf\fP ファイルで指定されている。
\fI/etc/resolv.conf\fP のこともある。\fI/etc/hosts\fP ファイルでは、
エントリの最初のホスト名が正規名と見なされる。後に続く名前はエイリアスであり、
\fBsudoers\fP によって使用されることはない。たとえば、hosts ファイルに
"xyzzy" というマシンについて下記の行があるとき、
完全修飾ドメイン名がホストの正規名であり、短い方の名前はエイリアスである。
.sp
.RS 24n
192.168.1.1	xyzzy.sudo.ws xyzzy
.RE
.RS 18n
.sp
hosts ファイルにおけるマシンのエントリの書式が不適切だと、
hosts ファイルへの問い合わせが DNS より前に行われる場合、\fIfqdn\fP
オプションを指定しても、効果がない。
.sp
気を付けてほしいのは、ホスト名の解決に DNS を使用する場合、
\fIfqdn\fP 有効にすると、\fBsudoers\fP は DNS に問い合わせをしなければならないので、
DNS が稼働していないと (たとえば、マシンがネットワークから切り離されていると)、
\fBsudo\fP が使えなくなるということである。
もう一つ気を付けるべきことがある。hosts ファイルを使用する場合と同じことだが、
DNS が知っているホストの正規名を使わなければならない。
言い換えれば、ホストのエイリアス (CNAME のエントリ) を使ってはいけない。
パフォーマンスの問題もあるし、DNS からエイリアスをすべて取得する方法はないからでもある。
.sp
このフラグはデフォルトでは \fIoff\fP である。
.RE
.TP  18n
ignore_dot
これをセットすると、環境変数 PATH 中に "." や ""
(どちらもカレントディレクトリを意味する) があっても、
\fBsudo\fP はそれを無視する。PATH そのものは変更されない。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
ignore_local_sudoers
LDAP の方でこのフラグをセットすると、\fI/etc/sudoers\fP の解析がスキップされることになる。
このフラグは、ローカルにある sudoers ファイルの使用を禁じて、
LDAP のみを使うようにしたい諸企業のためにある。
たちの悪いオペレータが \fI/etc/sudoers\fP に手を加えて、
自分の権限を増やそうとしても、そうした悪だくみは阻止されるわけだ。
このオプションが設定されているときは、
\fI/etc/sudoers\fP ファイルは存在する必要すらない。このオプションは、
LDAP 中に、マッチする特定のエントリが存在しなかったときに、
いかに振舞うべきかを \fBsudo\fP に指示するものだから、
これを指定する sudoOption は、cn=defaults のセクションになければ意味がない。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
insults
これをセットすると、不正なパスワードが入力されたとき、
\fBsudo\fP がユーザに悪態をつく。このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
log_host
これをセットすると、ホスト名が (syslog 経由ではない) \fBsudo\fP のログファイルに記録されることになる。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
log_input
これをセットすると、\fBsudo\fP は、擬似 tty でコマンドを実行し、
ユーザの入力をすべてログに取ることになる。入出力がリダイレクトされているとか、
コマンドがパイプラインの一部だとかいう理由で、標準入力がユーザの tty
に結びつけられていない場合でも、その入力はやはりキャプチャーされ、
独立したログファイルに書き込まれる。
より詳しい情報については、「入出力ログファイル」セクションをご覧になるとよい。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
log_output
これをセットすると、\fBsudo\fP は、\fI擬似 tty\fP でコマンドを実行し、
スクリーンに送られたすべての出力をログに取ることになる。
script(1) コマンドと似たことをやるわけだ。
より詳しい情報については、「入出力ログファイル」セクションをご覧になるとよい。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
log_year
これをセットすると、四桁の年が (syslog 経由ではない) \fBsudo\fP のログファイルに記入されることになる。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
long_otp_prompt
\fBS/Key\fP や \fBOPIE\fP のような One Time Password (OTP) スキームを採用しているときにこれを有効にすると、
チャレンジをローカルウィンドウにカット・アンド・ペーストしやすいように、
二行のプロンプトが使用される。デフォルトのプロンプトほど見栄えはよくないが、
こちらの方が便利だと思う人もいる。このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
mail_all_cmnds
ユーザが \fBsudo\fP 経由でコマンドの実行を試みるたびに
(\fBsudoedit\fP の実行も含む)、\fImailto\fP ユーザにメールを送付する。
ただし、ユーザが \fBsudo\fP に \fB\-l\fP や \fB\-v\fP オプションを付けて実行したときは、
認証エラーがあり、しかも \fImail_badpass\fP フラグがセットされていないかぎり、
メールを送付することはない。このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
mail_always
ユーザが \fBsudo\fP を実行するたびに、\fImailto\fP ユーザにメールを送る。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
mail_badpass
\fBsudo\fP を実行するユーザが正しいパスワードを入力しなかったら、
\fImailto\fP ユーザにメールを送付する。ユーザが実行しようとしているコマンドが
\fBsudoers\fP によって許可されていない場合に、\fImail_all_cmnds\fP,
\fImail_always\fP, \fImail_no_host\fP, \fImail_no_perms\fP, \fImail_no_user\fP
フラグのどれかがセットされていると、このフラグは効果を持たないことになる。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
mail_no_host
これをセットすると、\fBsudo\fP を起動したユーザが \fIsudoers\fP
ファイルに記載されてはいるものの、
使用中のホストでコマンドの実行を許可されていない場合に、
\fImailto\fP ユーザにメールを送付する。このフラグはデフォルトでは
\fIoff\fP である。
.TP  18n
mail_no_perms
これをセットすると、\fBsudo\fP を起動したユーザが
\fBsudo\fP の使用を許可されているが、
実行しようとしているコマンドが \fIsudoers\fP ファイルの
そのユーザのエントリに登録されていないか、明示的に禁止されている場合に、
\fImailto\fP ユーザにメールを送付する。このフラグはデフォルトでは
\fIoff\fP である。
.TP  18n
mail_no_user
これをセットすると、\fBsudo\fP を起動したユーザが \fIsudoers\fP
ファイルに記載されていない場合に、\fImailto\fP ユーザにメールを送付する。
このフラグはデフォルトでは \fIon\fP である。
.TP  18n
netgroup_tuple
これをセットすると、
ネットグループの検索がネットグループのタプル全部を使って行われることになる
(すなわち、ホスト名、ユーザ名、ドメインの三つが、それぞれ設定されているならば、
使用される)。従来の \fBsudo\fP では、
User_List で使用されるネットグループについては、
ユーザ名とドメインだけを照合し、Host_List で使用されるネットグループについては、
ホスト名とドメインだけを照合していた。このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
noexec
これをセットすると、\fBsudo\fP を通して実行されるすべてのコマンドが、
EXEC タグで無効にされないかぎり、
あたかも NOEXEC タグが設定されているかのごとく振舞うようになる。
前述の「\fIEXEC\fP と \fINOEXEC\fP」の説明、および、
このマニュアルの終わりの方にある「シェル・エスケープの防止」というセクションを参照していただきたい。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
pam_session
認証に PAM を使用するシステムでは、\fBsudo\fP は新しい PAM セッションを作成し、
その中でコマンドを実行する。PAM の実装が古い場合や、
PAM セッションの開始が utmp や wtmp ファイルを変更するオペレーティングシステムでは、
\fIpam_session\fP を無効にする必要があるかもしれない。
ただし、PAM セッションのサポートを無効にすると、
実行されるコマンドに対するリソースの上限が更新されないかもしれない。
なお、\fIpam_session\fP, \fIpam_setcred\fP, \fIuse_pty\fP が無効になっていて、
しかも 入出力ロギングが設定されていない場合は、
\fBsudo\fP はコマンドを子プロセスとしてではなく、
直接実行する。このフラグはデフォルトでは \fIon\fP である。
.sp
この設定は、バージョン 1.8.7 以上でのみサポートされている。
.TP  18n
pam_setcred
認証に PAM を使用するシステムでは、\fBsudo\fP はデフォルトでは、
使用している認証システムがサポートしているなら、変身対象ユーザの認証情報
(credential) が有効であることを確認しようとする。認証情報の例を一つ挙げれば、
Kerberos のチケットがそれである。\fIpam_session\fP, \fIpam_setcred\fP,
\fIuse_pty\fP が無効になっていて、しかも 入出力ロギングが設定されていない場合は、
\fBsudo\fP はコマンドを子プロセスとしてではなく、直接実行する。
このフラグはデフォルトでは \fIon\fP である。
.sp
この設定は、バージョン 1.8.8 以上でのみサポートされている。
.TP  18n
passprompt_override
通常、\fIpassprompt\fP オプションによって指定されたパスワードプロンプトが使用されるのは、
PAM のようなシステムが用意しているパスワードプロンプトが、
"Password:" という文字列にマッチしているときだけである。
\fIpassprompt_override\fP をセットすると、\fIpassprompt\fP が無条件で使われることになる。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
path_info
通常 \fBsudo\fP は、環境変数 PATH 中にコマンドが見付からないと、
ユーザにその旨を知らせる。これを利用すれば、
一般ユーザにアクセス権のない実行ファイルのありかについて情報を収集できるという理由から、
この動作を無効にしたいサイトもあるかもしれない。
その場合の欠点は、実行ファイルが単にユーザの PATH 中になかっただけの場合でも、
実行の許可がないと \fBsudo\fP がユーザに告げることになって、
実情がわかりにくいかもしれないことである。
このフラグはデフォルトでは \fIon\fP である。
.TP  18n
preserve_groups
デフォルトでは、\fBsudo\fP は所属グループの初期値として、
変身対象ユーザが所属しているグループのリストを設定する。
\fIpreserve_groups\fP をセットすると、
\fBsudo\fP を実行するユーザの所属グループのリストが、
変更されずにそのまま維持される。とは言え、実グループ ID や実効グループ ID が、
変身対象ユーザのそれに設定されることに変わりはない。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
pwfeedback
ほかのたいていの Unix のプログラムと同様、
\fBsudo\fP はパスワードを読み込むとき、デフォルトでは、ユーザが Return
(または Enter) キーを押すまで、エコーを off にする。
この動作にとまどうユーザが存在する。
彼らには \fBsudo\fP が急に反応しなくなったように見えるのだ。
\fIpwfeedback\fP をセットすると、ユーザがキーを押すたびに、
\fBsudo\fP が目に見える反応を返すようになる。
これには、セキュリティ上の問題があることに注意していただきたい。
側で見ている人が、打ち込まれたパスワードの文字数を特定できてしまうかもしれないのだ。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
requiretty
これをセットすると、\fBsudo\fP が実行されるのは、ユーザが実際の tty
にログインしたときだけになる。すなわち、\fBsudo\fP を実行できるのは、
ログイン・セッションからだけであって、cron(8) や cgi\-bin スクリプトといった、
ほかの方法を介して実行することはできないということだ。
このフラグは、デフォルトでは \fIoff\fP である。
.TP  18n
root_sudo
これをセットすると、root も \fBsudo\fP を実行できるようになる。
このフラグを無効にすると、ユーザがたとえば "sudo sudo /bin/sh"
といったように \fBsudo\fP コマンドを「連鎖的に」使って、
ルートシェルを獲得することができなくなる。
ところで、\fIroot_sudo\fP が off だと、
root が \fBsudoedit\fP まで実行できなくなることに注意していただきたい。
\fIroot_sudo\fP を無効にしても、セキュリティが実際に向上するわけではない。
このフラグが存在しているのは、
もっぱら歴史的な理由からなのだ。このフラグはデフォルトでは \fIon\fP である。
.TP  18n
rootpw
これをセットすると、\fBsudo\fP は、コマンドを実行したり、
ファイルを編集したりするとき、起動したユーザのパスワードではなく、
root のパスワードを要求するようになる。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
runaspw
これをセットすると、\fBsudo\fP は、コマンドを実行したり、
ファイルを編集したりするとき、起動したユーザのパスワードではなく、
\fIsudoers\fP ファイルの \fIrunas_default\fP オプションで指定しているユーザーの
(デフォルトでは root である) パスワードを要求するようになる。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
set_home
これが有効なときに \fBsudo\fP を \fB\-s\fP オプション付きで起動すると、
環境変数 HOME が変身対象ユーザの (\fB\-u\fP オプションが使用されないかぎり、
それは root である) ホームディレクトリに設定される。すなわち、
\fB\-s\fP オプションが \fB\-H\fP オプションを事実上兼ねることになるわけだ。
気をつけてほしいのは、\fIenv_reset\fP が有効な場合、HOME はすでに
(訳注: 変身対象ユーザのホームディレクトリに) 設定済みだということだ。
だから、\fIset_home\fP の効果があるのは、\fIenv_reset\fP が無効に設定されているか、
\fIenv_keep\fP のリストに HOME が存在する場合だけである。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
set_logname
通常 \fBsudo\fP は環境変数 LOGNAME, USER, USERNAME を変身対象ユーザの名前
(\fB\-u\fP オプションが指定されていない場合、普通は root) にセットする。
しかし、プログラムによっては
(たとえば、RCS リビジョンコントロールシステムがその一つだが)
ユーザが実際には誰であるかを判定するのに LOGNAME を使用していることがあり、
そのため、この振舞いを変更したい場合もある。
set_logname オプションに '!\&' を付けて否定することで、それができる。
なお \fIenv_reset\fP オプションを無効にしていない場合に、
\fIenv_keep\fP のリストに LOGNAME, USER, USERNAME などが入っていると、
\fIset_logname\fP は効果を持たないので、注意していただきたい。
このフラグはデフォルトでは \fIon\fP である。
.TP  18n
set_utmp
これが有効になっていると、\fBsudo\fP は擬似 tty を割り当てるときに、
utmp (または utmpx) ファイルにエントリを作成する。
\fBsudo\fP によって擬似 tty の割り当てが行われるのは、\fIlog_input\fP,
\fIlog_output\fP, \fIuse_pty\fP といったフラグが有効になっているときである。
デフォルトでは、新しいエントリは、そのユーザの utmp エントリが存在すれば、
そのコピーであり、tty, time, type, pid フィールドが更新される。
このフラグはデフォルトでは \fIon\fP である。
.TP  18n
setenv
これをセットすると、ユーザがコマンドラインで \fB\-E\fP オプションを指定して、
\fIenv_reset\fP オプションを無効にできるようになる。
さらに、コマンドラインから設定する環境変数が
\fIenv_check\fP, \fIenv_delete\fP, \fIenv_keep\fP による制限を受けなくなる。
それ故、そのようなやり方で変数を設定することを許可するのは、
信用できるユーザのみに限るべきだ。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
shell_noargs
これがセットされているとき、\fBsudo\fP を引き数なしで起動すると、
\fBsudo\fP は \fB\-s\fP オプションが指定されたかのように振舞う。
すなわち、root ユーザとしてシェルを実行するわけだ (シェルは、環境変数
SHELL がセットされていれば、それによって決まり、
セットされていなければ、\fBsudo\fP を起動したユーザの
/etc/passwd エントリに登録されたものになる)。このフラグはデフォルトでは
\fIoff\fP である。
.TP  18n
stay_setuid
通常 \fBsudo\fP は、コマンドを実行するとき、実 UID と実効 UID
を変身対象ユーザ (デフォルトでは root) のものにセットする。
このオプションは、その振舞いを変更して、\fBsudo\fP を起動したユーザの
UID が、そのまま実 UID として残るようにするのだ。言い換えると、
このオプションは \fBsudo\fP を setuid ラッパーとして動作するようにするわけである。
プログラムを setuid で動かすと、危険をもたらしかねないという理由から、
ある種の機能を使えないようにしているシステムでは、
このオプションが役に立つかもしれない。このオプションは、システムコールの
setreuid() や setresuid() をサポートしているシステムでのみ有効である。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
sudoedit_checkdir
.br
これをセットすると、
\fBsudoedit\fP は、編集対象ファイルのパス中にあるディレクトリ部分のすべてについて、
\fBsudoedit\fP を実行するユーザとって書き込み可能かどうかを、チェックすることになる。
ユーザに書き込み可能なディレクトリに存在するいかなるシンボリックリンクも、
たどられることがなく、また、ユーザに書き込み可能なディレクトリにあるファイルの編集は、
拒否されることになる。
ただし、こうした制限は、\fBsudoedit\fP を実行するユーザが root の場合には、行われない。
システムによっては、編集対象ファイルのパス中にあるディレクトリ部分のすべてが、
変身対象ユーザにとって読み込み可能でないかぎり、
\fBsudoedit\fP でファイルを編集できないものもある。
このフラグはデフォルトでは \fIon\fP である。
.sp
この設定が最初に導入されたのは、バージョン 1.8.15 だったが、
当初のものには競合状態を引き起こす欠陥があった。
編集対象ファイルのパスの途中に書き込み可能なディレクトリがあり、
そこにシンボリックリンクが存在する場合のチェックは、バージョン 1.8.16 で追加された。
.TP  18n
sudoedit_follow
\fBsudoedit\fP はデフォルトでは、ファイルをオープンするときにシンボリックリンクをたどらない。
\fIsudoedit_follow\fP オプションを有効にすると、
\fBsudoedit\fP がシンボリックリンクをオープンできるようになる。
そうした動作は \fIFOLLOW\fP や \fINOFOLLOW\fP タグを使えば、
コマンドごとに変更することができる。このフラグはデフォルトでは \fIoff\fP である。
.sp
この設定は、バージョン 1.8.15 以上でのみサポートされている。
.TP  18n
targetpw
これをセットすると、\fBsudo\fP は、コマンドを実行したり、
ファイルを編集したりするとき、起動したユーザのパスワードではなく、
\fB\-u\fP オプションで指定されたユーザ (デフォルトでは root)
のパスワードを要求するようになる。
このフラグを設定をすると、\fB\-u\fP オプションの引き数として、
passwd データベースに登録されていない uid が使えなくなることに注意してほしい。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
tty_tickets
これをセットすると、ユーザは tty ごとに認証をしなければならなくなる。
このフラグが有効な場合、\fBsudo\fP は、各 tty に対して、
タイムスタンプ・ファイル中の、それぞれ別個に記録される情報を使用することになる。
それに対して、このフラグが無効な場合は、すべてのログイン・セッションに対して、
単一の記録が使用されるのである。このフラグはデフォルトでは \fIon\fP である。
.TP  18n
umask_override
これをセットすると、\fBsudo\fP は umask を \fIsudoers\fP の
umask オプションで指定されたとおりの値に、変更を加えることなく設定する。
このことによって、ユーザ自身の umask 値よりもっと緩やかな umask 値を
\fIsudoers\fP ファイルで指定することが可能になる。\fBsudo\fP の昔の動作と同じになるわけだ。
\fIumask_override\fP をセットしない場合、
現在の \fBsudo\fP は umask を、ユーザの umask 値と \fIsudoers\fP で指定した
umask 値とのビット和に設定することになっている。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
use_netgroups
これをセットすると、ユーザやホストを指定する場所でネットグループ
(接頭辞 '+' が付く) が使えるようになる。LDAP を使用する sudoers では、
ネットグループをサポートすると、\fI/etc/ldap.conf\fP ファイルで
\fBNETGROUP_BASE\fP 設定オプションを指定していない場合に、
サーバ側で負荷の高い部分文字列 (substring) のマッチングを行う必要が生じる。
そこで、ネットグループを使用する必要がない場合は、
このオプションを \fIoff\fP にすれば、LDAP サーバの負荷を減らすことができる。
このフラグはデフォルトでは \fIon\fP である。
.TP  18n
use_pty
これをセットすると、\fBsudo\fP は入出力のロギングが行われていないときでも、
擬似 tty でコマンドを実行することになる。
\fBsudo\fP によって実行された悪意のあるプログラムが、
バックグラウンド・プロセスをフォークし、
そのプロセスが、メインプログラムの実行が終了した後でも、
ユーザのターミナルデバイスを握って離さないといったことが考えられる。
このオプションを使えば、そういったことが不可能になる。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
utmp_runas
これをセットすると、\fBsudo\fP は utmp (または utmpx) ファイルを更新するとき、
変身対象ユーザの名前を記録するようになる。\fBsudo\fP はデフォルトでは、
\fBsudo\fP を実行したユーザの名前を記録するのだ。
このフラグはデフォルトでは \fIoff\fP である。
.TP  18n
visiblepw
デフォルトでは、ユーザがパスワードを入力しなければならないときに、
使用しているターミナルでエコーの抑制ができなかったら、
\fBsudo\fP は実行を拒否するようになっている。
それに対し、\fIvisiblepw\fP フラグが設定されていると、
パスワードがスクリーンに表示されてしまう場合でも、
\fBsudo\fP はプロンプトを出して、パスワードを求めるようになる。
ssh(1) はデフォルトでは、コマンドを実行する際に tty を割り当てないので、
\fBsudo\fP はエコーの抑制ができないが、その場合でも、この設定によって、
"ssh somehost sudo ls" といった操作の実行が可能になるわけだ。
このフラグはデフォルトでは \fIoff\fP である。
.PP
\fB整数\fP:
.TP  18n
closefrom
\fBsudo\fP はコマンドを実行する前に、標準入力、標準出力、標準エラー
(すなわち、ファイルディスクリプタ 0\-2 ) を除いて、
開いているすべてのファイル・ディスクリプタをクローズする。
\fIclosefrom\fP オプションを使用すると、
0\-2 以外のどのファイル・ディスクリプタから閉じて行くかを指定することができる。
デフォルトは 3 である。
.TP  18n
maxseq
入出力ログファイルで
"%{seq}" エスケープシーケンスに置き換えられる連続番号の最大値
(詳細については、後述の \fIiolog_dir\fP オプションの説明を参照すること)。
"%{seq}" に置き換えられる値は 36 進数だが、\fImaxseq\fP そのものは
10 進数で指定するべきである。2176782336 (38 進数の連続番号では、
"ZZZZZZ" に相当する) より大きい値は 、暗黙のうちに
2176782336 に縮小される。デフォルトの値は 2176782336 である。
.sp
使用している連続番号が \fImaxseq\fP の値に達したら、最初の値の 0 に戻る。
それ以後は、\fBsudoers\fP は存在している入出力ログファイルをサイズ 0 に短縮して、
そのパス名を再利用することになる。
.sp
この設定は、バージョン 1.8.7 以上でのみサポートされている。
.TP  18n
passwd_tries
\fBsudo\fP が「失敗」をログに記録して終了する前に、
ユーザがパスワードを入力できる回数。デフォルトは 3 回。
.PP
\fB真偽値としても使用できる整数\fP:
.TP  18n
loglinelen
\fBsudo\fP 独自のログファイルの一行あたりの文字数。この値は、
ログファイルを見やすくするために改行する位置を決めるのに使用される。
この値は、syslog 経由のログファイルには影響せず、
独自のファイルにログを記録するときのみ効果がある。デフォルトは 80 である
(改行をしないようにするには、値を 0 にするか、頭に '!\&' を付けて、
このオプションを否定する)。
.TP  18n
passwd_timeout
\fBsudo\fP のパスワードプロンプトが時間切れになるまでの分単位の時間。
0 を指定すると、時間切れなしになる。
分よりももっと細かい時間を指定したかったら、2.5 のように、
小数点以下を付けることもできる。デフォルトは 5 分。
.TP  18n
timestamp_timeout
.br
\fBsudo\fP がパスワードを再び要求するようになるまでの時間を分単位で指定する。
分よりももっと細かい時間を指定したかったら、2.5 のように、
小数点以下を付けることもできる。デフォルトは 5 分である。
これを 0 にセットすると、毎回パスワードを要求するようになる。
0 よりも小さい値にセットすると、ユーザのタイムスタンプは、
システムがリブートされるまで期限切れにならない。
ユーザが "sudo \-v" と "sudo \-k" を実行することによって、
タイムスタンプを自分で作ったり、消したりできるようにしたかったら、
この手を使えばよい。
.TP  18n
umask
コマンドを実行するときに使用する umask 値。
ユーザの umask 値をそのまま使いたかったら、'!\&' を頭に付けて、
このオプションを否定するか、0777 にセットすればよい。
このオプションの値が 0777 以外の場合、実際に使用される umask 値は、
ユーザの umask 値と \fIumask\fP オプションの値とのビット和であり、
後者のデフォルトは 0022 である。
このことによって、\fBsudo\fP がコマンドを実行するときの umask 値が、
ユーザの umask 値より低くならないようになっているわけだ。
PAM を使用しているシステムでは、
PAM のデフォルト設定で umask 値を指定することができるが、
その場合は、それが \fIsudoers\fP で指定する値に優先することに注意していただきたい。
.PP
\fB文字列\fP:
.TP  18n
badpass_message
ユーザが不正なパスワードを入力したときに表示するメッセージ。
\fIinsults\fP フラグが有効になっていないかぎり、
デフォルトは「Sorry, try again.」である。
.TP  18n
editor
\fBvisudo\fP で使用できるエディタをコロン (':\&') で区切ったリスト。\fBvisudo\fP は、
可能ならば、ユーザの EDITOR 環境変数や
VISUAL 環境変数とマッチしたリスト中のエディタを選択する。
それができないときは、このリストにあるエディタで、実際に存在し、
かつ実行可能な最初のエディタを使用する。
環境変数 EDITOR や VISUAL は、\fIenv_reset\fP オプションが有効な場合、
デフォルトでは保存されないことに注意していただきたい。
デフォルトは \fIvi\fP である。
.TP  18n
iolog_dir
このオプションの値をトップレベル・ディレクトリにして、
入出力ログを置くディレクトリのパス名が構成される。この値が使用されるのは、
\fIlog_input\fP や \fIlog_output\fP オプションが有効になっているときや、
LOG_INPUT や LOG_OUTPUT タグがコマンドに付いているときだけである。
このディレクトリ以下に、セッション ID が連番ならば、
セッションの連番が (訳注: 以下の "%{seq}" の説明にあるような形で) 
格納されることになるわけだ。デフォルトは \fI/var/log/sudo\-io\fP である。
.sp
以下のパーセント ('%') エスケープシーケンスが使用できる。
.PP
.RS 18n
.PD 0
.TP  6n
%{seq}
単調に増加する 36 進数の連続番号に展開される。たとえば、0100A5
といった番号であり、二桁づつ使って新しいディレクトリを作っていく。
この場合なら、\fI01/00/A5\fP といった具合だ。
.PD
.TP  6n
%{user}
\fBsudo\fP を実行するユーザーのログイン名に展開される。
.TP  6n
%{group}
\fBsudo\fP を実行するユーザーの実グループ ID の名前に展開される。
.TP  6n
%{runas_user}
変身対象ユーザのログイン名に展開される (たとえば root)。
.TP  6n
%{runas_group}
変身対象ユーザのグループ名に展開される (たとえば wheel)。
.TP  6n
%{hostname}
ドメイン名なしのローカル・ホスト名に展開される。
.TP  6n
%{command}
実行されるコマンドのベースネームに展開される。
.PP
このほか、システムの strftime(3) 関数がサポートしているエスケープシーケンスは、
いかなるものでも展開の対象になる。
.sp
\&'%' 文字そのものを使いたかったら、文字列 '%%' を使用すればよい。
.RE
.TP  18n
iolog_file
\fIiolog_dir\fP を基点とする相対パス名であり、\fIlog_input\fP や
\fIlog_output\fP オプションが有効になっていたり、LOG_INPUT や LOG_OUTPUT
タグがコマンドに付いている場合に、入出力ログがこの中に格納される。
\fIiolog_file\fP の値が複数のディレクトリ構成要素を含んでいることがあるのに注意していただきたい。
デフォルトは "%{seq}" である。
.sp
使用できるパーセント ('%') エスケープシーケンスのリストについては、
上記の \fIiolog_dir\fP オプションを参照。
.sp
エスケープシーケンスの展開とは別に、パス名が六個以上の X で終わっている場合は、
X の部分が、他と重複しない英数字の組み合わせに置き換えられる。
mktemp(3) 関数の場合と同様である。
.sp
\fIiolog_dir\fP と \fIiolog_file\fP を結合して作られるパスがすでに存在している場合は、
\fIiolog_file\fP が 6 個以上の X で終わっていないかぎり、
既存の入出力ログファイルは、サイズ 0 に短縮された上で、上書きされることになる。
.TP  18n
lecture_status_dir
\fBsudo\fP はこのディレクトリに、
ユーザが訓戒を受けたかどうかを示すファイルを、ユーザごとに入れておく。
ユーザが訓戒を受けると、サイズ 0 のファイルがこのディレクトリに作成され、
\fBsudo\fP はそのユーザに再び訓戒を行わなくなる。このディレクトリは、
システムのブート時に\fI消去すべきではない\fP。
デフォルトは \fI/var/lib/sudo/lectured\fP である。
.TP  18n
mailsub
\fImailto\fP ユーザに送付するメールの件名。
エスケープ文字 %h はマシンのホスト名に展開される。
デフォルトは「*** SECURITY information for %h ***」である。
.TP  18n
noexec_file
\fBsudo\fP バージョン 1.8.1 以来、このオプションはサポートされていない。
現在では、noexec ファイルのパスは sudo.conf(5) ファイルで設定するべきである。
.TP  18n
pam_login_service
.br
PAM を認証に使用しているシステムでは、このオプションの値が、
\fBsudo\fP コマンドに \fB\-i\fP オプションが指定されたとき使用されるサービス名になる。
デフォルトの値は、
"sudo" である。\fIpam_service\fP の説明もご覧いただきたい。
.sp
この設定は、バージョン 1.8.8 以上でのみサポートされている。
.TP  18n
pam_service
PAM を使用しているシステムでは、このオプションで指定するサービス名が、
適用される PAM ポリシーを指定することになる。サービス名は \fIpam.conf\fP
ファイル中のエントリ名や、\fI/etc/pam.d\fP にあるファイル名に対応している。
デフォルトの値は "sudo" である。
.sp
この設定は、バージョン 1.8.8 以上でのみサポートされている。
.TP  18n
passprompt
パスワードを要求するときに使用するデフォルトのプロンプト。
\fB\-p\fP オプションや環境変数 SUDO_PROMPT によって変更することができる。
以下のパーセント ('%') エスケープシーケンスが使用できる。
.PP
.RS 18n
.PD 0
.TP  6n
%H
ドメイン名付きのローカルホスト名に展開される (マシンのホスト名が完全修飾名か、
\fIfqdn\fP オプションがセットされている場合のみ)。
.PD
.TP  6n
%h
ドメイン名なしのローカル・ホスト名に展開される。
.TP  6n
%p
パスワードを要求されているユーザ名に展開 (\fIsudoers\fP ファイルの
\fIrootpw\fP, \fItargetpw\fP, \fIrunaspw\fP フラグを尊重する)。
.TP  6n
\&%U
変身対象ユーザの (デフォルトでは root) ログイン名に展開。
.TP  6n
%u
\fBsudo\fP を実行するユーザーのログイン名に展開される。
.TP  6n
%%
連続した二個の % は、一個の % 文字そのものを意味する。
.PP
デフォルトの値は「Password:」である。
.RE
.TP  18n
role
コマンドの実行に当たって
SELinux の新しいセキュリティ・コンテキストを構成するときに使用する、
デフォルトのロール。デフォルトのロールは、
\fIsudoers\fP ファイルや、コマンドラインオプションを使って、
コマンドごとに変更することができる。このオプションが利用できるのは、
\fBsudo\fP が SELinux サポートつきでビルドされたときだけである。
.TP  18n
runas_default
コマンドラインで \fB\-u\fP オプションが指定されていないときの、
デフォルトの変身対象ユーザ。デフォルトでは root になっている。
.TP  18n
syslog_badpri
ユーザが認証に失敗したときに使用する syslog の重大度 (priority)。
デフォルトでは alert になっている。
.sp
syslog の重大度には、次のものが指定できる。\fBemerg\fP, \fBalert\fP,
\fBcrit\fP, \fBerr\fP, \fBwarning\fP, \fBnotice\fP, \fBinfo\fP, \fBdebug\fP。
.TP  18n
syslog_goodpri
ユーザが認証に成功したときに使用する syslog の重大度 (priority)。
デフォルトでは notice になっている。
.sp
どんな syslog の重大度が指定できるかについては、
\fIsyslog_badpri\fP を参照。
.TP  18n
sudoers_locale
sudoers ファイルを解析したり、コマンドのログを記録したり、
email を送付したりするときに使用するロケール。
ロケールの変更は、sudoers の解釈に影響があるかもしれないので、
気をつけていただきたい。デフォルトでは "C" になっている。
.TP  18n
timestampdir
\fBsudo\fP がタイムスタンプ・ファイルを置くディレクトリ。
このディレクトリは、システムがリブートするとき、クリアされるべきである。
デフォルトは \fI/var/run/sudo/ts\fP になっている。
.TP  18n
timestampowner
ユーザが訓戒を受けたかどうかを示すファイルを入れておくディレクトリや、
タイムスタンプ・ディレクトリ、
及びそうしたディレクトリに置かれるすべてのファイルの所有者。
デフォルトは root である。
.TP  18n
type
コマンドの実行に当たって
SELinux の新しいセキュリティ・コンテキストを構成するときに使用する、
デフォルトのタイプ。デフォルトのタイプは、
\fIsudoers\fP ファイルや、コマンドラインオプションを使って、
コマンドごとに変更することができる。このオプションが利用できるのは、
\fBsudo\fP が SELinux サポートつきでビルドされたときだけである。
.PP
\fB真偽値としても使用できる文字列\fP:
.TP  14n
env_file
\fIenv_file\fP オプションでは、
実行するプログラムの環境に設定する変数を記載したファイルの絶対パスを指定する。
このファイルに記載する項目は、"VARIABLE=value" か "export VARIABLE=value"
の形でなければならない。変数の値をシングルクォートやダブルクォートで囲んでもよい。
このファイルに含まれる変数は、\fIenv_keep\fP や \fIenv_check\fP のような
\fBsudo\fP のほかの環境設定の影響を受ける。
.TP  14n
exempt_group
このグループのユーザはパスワードの入力や \fIsecure_path\fP などによる
PATH の限定を免除される。指定するグループ名に接頭辞の % を付けてはいけない。
このオプションはデフォルトではセットされていない。
.TP  14n
group_plugin
このオプションの値となる文字列には、
\fBsudoers\fP が使用するグループ・プラグインと、必要ならその引き数を指定する。
値となる文字列は、プラグインのパスに続けて、その設定に必要な引き数があれば、
それを付け加えたものだが、パスは絶対パスか、
\fI/usr/local/libexec/sudo\fP を基点とする相対パスにするべきである。
引き数が存在するなら、それはプラグインの初期化関数に渡される。
引き数が存在する場合は、文字列全体をダブルクォート (\&"") で囲まなければならない。
.sp
詳細については、
「グループ・プロバイダー・プラグイン」セクションををご覧いただきたい。
.TP  14n
lecture
\fBsudo\fP はパスワードプロンプトに添えて簡単な訓戒を表示することができる。
このオプションはその訓戒をいつ表示するかを決定する。以下の値が可能である。
.PP
.RS 14n
.PD 0
.TP  8n
always
いつでも必ず訓戒を表示する。
.PD
.TP  8n
never
訓戒をまったく表示しない。
.TP  8n
once
ユーザがはじめて \fBsudo\fP を実行したときだけ表示する。
.PP
値を指定しないと、\fIonce\fP を指定したことになる。頭に '!' を付けて、
このオプションを否定すると、値に \fInever\fP が使用される。
デフォルトの値は \fIonce\fP である。
.RE
.TP  14n
lecture_file
標準の訓戒とは別の \fBsudo\fP の訓戒を書き込んだファイルのパス。
指名したファイルが存在すれば、\fBsudo\fP は標準の訓戒の代わりに、それを使用する。
デフォルトでは、プログラムに埋め込まれた訓戒が使用される。
.TP  14n
listpw
このオプションは、\fBsudo\fP を \fB\-l\fP オプション付きで実行したとき、
ユーザがパスワードを要求されるのは、どんな場合かを決定する。
以下の値が可能である。
.PP
.RS 14n
.PD 0
.TP  10n
all
パスワードを入力しないですむためには、
\fIsudoers\fP ファイルの使用中のホストに対する当該ユーザのエントリのすべてに
NOPASSWD タグが設定されていなければならない。
.PD
.TP  10n
always
ユーザは \fB\-l\fP オプションを使用する際に、必ずパスワードを入力しなければならない。
.TP  10n
any
パスワードを入力しないですむためには、
\fIsudoers\fP ファイルの使用中のホストに対する当該ユーザのエントリの少なくとも一つに
NOPASSWD タグが設定されていなければならない。
.TP  10n
never
ユーザは \fB\-l\fP オプションを使用する際に、パスワードを入力する必要がまったくない。
.PP
値を指定しないと、値は \fIany\fP だと見なされる。'!' を頭に付けて、
このオプションを否定すると、値に \fInever\fP が使われることになる。
デフォルトは \fIany\fP である。
.RE
.TP  14n
logfile
\fBsudo\fP 独自のログファイルのパス (syslog 経由のログファイルではない)。
パスを指定すると、独自ファイルへのロギングが on になり、
\&'!' を頭に付けて、このオプションを否定すると、off になる。
デフォルトでは、\fBsudo\fP は syslog 経由でログを取る。
.TP  14n
mailerflags
メーラを起動するときに使用するフラグ。デフォルトは \fB\-t\fP になっている。
.TP  14n
mailerpath
警告メールの送信に使用するメール・プログラムのパス。
デフォルトは configure したときに見つかった sendmail のパス。
.TP  14n
mailfrom
警告メールやエラー・メールを送るとき、差出人として使用するアドレス。
\fBsudo\fP が @ 記号を解釈しないように、
アドレスはダブルクォート (\&"") で囲むべきである。
デフォルトは、\fBsudo\fP を実行しているユーザの名前。
.TP  14n
mailto
警告メールやエラー・メールを送付する宛先のアドレス。
\fBsudo\fP が @ 記号を解釈しないように、
アドレスはダブルクォート (\&"") で囲むべきである。
デフォルトは root になっている。
.TP  14n
secure_path
\fBsudo\fP から実行されるあらゆるコマンドが使用するパス。
\fBsudo\fP を実行するユーザが、無難な PATH 環境変数 を使っているかどうか確信が持てないなら、
このオプションを使用するとよいだろう。もう一つの使用法は、
「root のパス」と「一般ユーザのパス」を別のものにしておきたい場合だ。
ユーザが \fIexempt_group\fP オプションで指定したグループに属していると、
そのユーザは \fIsecure_path\fP の影響を受けない。
このオプションは、デフォルトではセットされていない。
.TP  14n
syslog
syslog を使ってログを取っている場合の syslog のファシリティ
(syslog 経由でログを取らないなら、'!' を頭に付けて、
このオプションを否定する)。デフォルトでは authpriv になっている。
.sp
syslog のファシリティには、次のものが指定できる。
\fBauthpriv\fP (使用 OS が対応している場合), \fBauth\fP, \fBdaemon\fP, \fBuser\fP,
\fBlocal0\fP, \fBlocal1\fP, \fBlocal2\fP, \fBlocal3\fP, \fBlocal4\fP, \fBlocal5\fP,
\fBlocal6\fP, \fBlocal7\fP。
.TP  14n
verifypw
このオプションは、\fBsudo\fP を \fB\-v\fP オプション付きで実行したとき、
ユーザがパスワードを要求されるのは、どんな場合かを決定する。
以下の値が可能である。
.PP
.RS 14n
.PD 0
.TP  8n
all
パスワードを入力しないですむためには、
\fIsudoers\fP ファイルの使用中のホストに対する当該ユーザのエントリのすべてに
NOPASSWD タグが設定されていなければならない。
.PD
.TP  8n
always
ユーザは \fB\-v\fP オプションを使用する際に、必ずパスワードを入力しなければならない。
.TP  8n
any
パスワードを入力しないですむためには、
\fIsudoers\fP ファイルの使用中のホストに対する当該ユーザのエントリの少なくとも一つに
NOPASSWD タグが設定されていなければならない。
.TP  8n
never
ユーザは \fB\-v\fP オプションを使用する際に、パスワードを入力する必要がまったくない。
.PP
値を指定しないと、値は \fIall\fP だと見なされる。'!' を頭に付けて、
このオプションを否定すると、値に \fInever\fP が使われることになる。
デフォルトは \fIall\fP である。
.RE
.PP
\fB真偽値としても使用できるリスト\fP:
.TP  18n
env_check
「安全」だと見なされない場合に、ユーザの環境から取り除かれる環境変数。
TZ 以外のすべての環境変数について、「安全」というのは、変数の値に
\&'%' や '/' という文字を一つも含まないことである。この動作を利用すれば、
出来のよくないプログラムに見られる
printf 形式のフォーマットの脆弱性に対処することが可能になる。
TZ 変数については、以下のどれかが真ならば、安全ではないと見なされる。
.PP
.RS 18n
.PD 0
.TP  4n
\fB\(bu\fP
変数の値が絶対パス名であり (コロン (':\&') が先頭に付いていることもある)、
それが \fIzoneinfo\fP ディレクトリの位置にマッチしない。
.PD
.TP  4n
\fB\(bu\fP
変数の値に \fI..\fP というパスの要素が存在する。
.TP  4n
\fB\(bu\fP
変数の値にホワイトスペースや表示不能文字が存在する。
.TP  4n
\fB\(bu\fP
変数の値が PATH_MAX の値より長い。
.PP
このオプションの引き数は、ダブルクォートで囲まれ、
スペースで区切られたリストでもよく、
ダブルクォートなしの単一の値でもよい。リストは、=, +=, \-=, \&!
演算子を使って、それぞれ置き換えたり、追加したり、削除したり、
無効にしたりすることができる。\fIenv_check\fP で指定された変数は、
\fIenv_reset\fP オプショの有効・無効にかかわらず、上記のチェックにパスすれば、
環境に保存されることになる。チェックされる環境変数のグローバルなリストは、
root ユーザが \fBsudo\fP に \fB\-V\fP オプションを付けて実行したときに表示される。
.RE
.TP  18n
env_delete
\fIenv_reset\fP オプションが無効になっているときに、
ユーザの環境から取り除かれる環境変数。このオプションの引き数は、
ダブルクォートで囲まれ、スペースで区切られたリストでもよく、
ダブルクォートなしの単一の値でもよい。
リストは、=, +=, \-=, \&! 演算子を使って、それぞれ置き換えたり、追加したり、
削除したり、無効にしたりすることができる。
取り除かれる環境変数のグローバルなリストは、root ユーザが \fBsudo\fP に
\fB\-V\fP オプションを付けて実行したときに表示される。
なお、オペレーティングシステムには、危険をもたらしかねない変数を、
いかなる setuid プロセス (\fBsudo\fP もその一つ)
の環境からも取り除くことにしているものが多いことに留意してほしい。
.TP  18n
env_keep
\fIenv_reset\fP オプションが有効になっているときでも、
ユーザの環境にそのまま保存される環境変数。このオプションによって、
\fBsudo\fP から生み出されるプロセスが受け取る環境を、
きめ細かく制御することが可能になる。このオプションの引き数は、
ダブルクォートで囲まれ、スペースで区切られたリストでもよく、
ダブルクォートなしの単一の値でもよい。
リストは、=, +=, \-=, \&! 演算子を使って、
それぞれ置き換えたり、追加したり、削除したり、無効にしたりすることができる。
保存される変数のグローバルなリストは、root ユーザが \fBsudo\fP に
\fB\-V\fP オプションを付けて実行したときに表示される。
.SH グループ・プロバイダー・プラグイン
\fBsudoers\fP プラグインは、non\-Unix グループの検索を可能にするために、
補助的なプラグインに対するインターフェースを備えており、それによって、
標準的な Unix グループ・データベース以外のグループ情報源に対する問い合わせができるようになっている。
先に述べたような、non\-Unix グループを指定する書式の使用を可能にしたかったら、
この仕組みが使用できる。
.PP
グループ・プロバイダー・プラグインは、デフォルト設定の \fIgroup_plugin\fP
によって指定する。\fIgroup_plugin\fP に対する引き数は、プラグインのパスに続けて、
その設定に必要なオプションがあれば、それを付け加えたものだが、
パスは絶対パスか、\fI/usr/local/libexec/sudo\fP
を基点とする相対パスにするべきである。そうしたオプションは (指定されていれば)
プラグインの初期化関数に渡されることになる。オプションがある場合は、
文字列全体をダブルクォート (\&"") で囲まなければならない。
.PP
以下のグループ・プロバイダー・プラグインがデフォルトでインストールされている。
.TP  10n
group_file
\fIgroup_file\fP プラグインは、\fI/etc/group\fP の代わりに、
\fI/etc/group\fP と同じ書式を使用する別のグループファイルを使えるようにする。
プラグインに対するオプションとして、グループファイルのパスを指定するべきである。
たとえば、使用するグループファイルが \fI/etc/sudo\-group\fP ならば、
次のように書くことになる。
.nf
.sp
.RS 10n
Defaults group_plugin="group_file.so /etc/sudo\-group"
.RE
.fi
.TP  10n
system_group
\fIsystem_group\fP プラグインは、標準 C ライブラリの関数 \fBgetgrnam\fP() と
\fBgetgrid\fP() によるグループ検索をサポートしている。このプラグインは、
ユーザがそのユーザの補助グループのリストに存在しないグループに所属しているといった場合にも使用できる。
このプラグインはオプションを取らないので、書式は次のようになる。
.nf
.sp
.RS 10n
Defaults group_plugin=system_group.so
.RE
.fi
.PP
グループ・プロバイダー・プラグインの API については、sudo_plugin(5)
に詳細な説明がある。
.SH ログの書式
\fBsudoers\fP は、何が起きたかを記録するのに、suslog(3) を使用することもできるし、
単独のログ・ファイルを使用することもできる。
どちらの場合も、ログの書式はほとんど同じである。
.SS 実行を許可されたコマンドに関するログ記載事項
sudo が実行したコマンドは、次の書式を使って記録される
(読みやすいように、ここでは複数行に分けている)。
.nf
.sp
.RS 4n
date hostname progname: username : TTY=ttyname ; PWD=cwd ; \e
    USER=runasuser ; GROUP=runasgroup ; TSID=logid ; \e
    ENV=env_vars COMMAND=command
.RE
.fi
.PP
各フィールドは以下のようになっている。
.TP  14n
date
コマンドが実行された日時。たいていは、"MMM, DD, HH:MM:SS" の形式である。
syslog(3) 経由でロギングしている場合に、
日時が実際にどんな形式になるかを決めるのは、syslog デーモンである。
\fBsudo\fP 独自のファイルにロギングしているとき、
\fIlog_year\fP オプションが有効だと、日時に年度も含まれることになる。
.TP  14n
hostname
\fBsudo\fP が実行されたホストの名前。このフィールドは、
syslog(3) 経由でロギングしているときにのみ存在する。
.TP  14n
progname
プログラム名。普通は、\fIsudo\fP か \fIsudoedit\fP。このフィールドは、
syslog(3) 経由でロギングしているときのみ存在する。
.TP  14n
username
\fBsudo\fP を実行したユーザのログイン名。
.TP  14n
ttyname
\fBsudo\fP が実行された端末の短縮名
(たとえば、"console", "tty01", "pts/0" など)。端末が存在しなかった場合は、
"unknown" になる。
.TP  14n
cwd
\fBsudo\fP が実行されたカレント・ワーキング・ディレクトリ。
.TP  14n
runasuser
変身対象ユーザ。
.TP  14n
runasgroup
変身対象グループがコマンドラインで指定されていれば、そのグループ。
.TP  14n
logid
入出力ログの識別名。コマンドの出力を再生するときに使用できる。
このフィールドは、\fIlog_input\fP や \fIlog_output\fP
オプションが有効なときにのみ存在する。
.TP  14n
env_vars
環境変数がコマンドラインで指定された場合、そのリスト。
.TP  14n
command
実行された実際のコマンド。
.PP
メッセージは \fIsudoers_locale\fP で指定されたロケールを使って記録される。
デフォルトは "C" である。
.SS 実行を拒否されたコマンドに関するログ記載事項
ユーザがコマンドの実行を認められなかった場合、
拒否された理由が、ユーザ名の後に記録されることになる。
理由として挙げられるものには、次のようなものがある。
.TP  3n
user NOT in sudoers
そのユーザに関する記載が \fIsudoers\fP ファイルに存在しない。
.TP  3n
user NOT authorized on host
そのユーザに関する記載が \fIsudoers\fP ファイルに存在するが、
このホストではコマンドの実行を許可されていない。
.TP  3n
command not allowed
このホストに対するそのユーザの記載が \fIsudoers\fP ファイルに存在するが、
指定されたコマンドの実行を許可されていない。
.TP  3n
3 incorrect password attempts
ユーザがパスワードの入力に 3 回失敗した。実際に書き込まれる試行回数は、
失敗した回数と \fIpasswd_tries\fP オプションの値によって様々である。
.TP  3n
a password is required
\fBsudo\fP に \fB\-n\fP オプションを指定したが、パスワードが必要だった。
.TP  3n
sorry, you are not allowed to set the following environment variables
ユーザがコマンドラインで環境変数を指定したが、
それは \fIsudoers\fP によって許可されていない。
.SS エラーに関するログ記載事項
エラーが起きると、\fBsudoers\fP はメッセージをログに記録し、たいていの場合は、
管理者に email で報告する。起きるかもしれないエラーには次のものがある。
.TP  3n
parse error in /etc/sudoers near line N
\fBsudoers\fP が上記ファイルの解析中にエラーに出会った。
エラーのタイプによっては、実際のエラーは、記載された行番号より 1 行上、
あるいは、1 行下にあることもある。
.TP  3n
problem with defaults entries
\fIsudoers\fP ファイル中に意味不明なデフォルト設定 (Defaults setting) が、
一つ以上ある。このエラーがあっても、\fBsudo\fP が実行できなくなることはないが、
\fBvisudo\fP を使って \fIsudoers\fP ファイルをチェックするべきである。
.TP  3n
timestamp owner (username): \&No such user
\fItimestampowner\fP オプションで指定されたタイムスタンプ・ディレクトリの所有者が、
パスワード・データベースに存在しなかった。
.TP  3n
unable to open/read /etc/sudoers
\fIsudoers\fP ファイルを読み込もうとしたが、オープンできなかった。
そうしたことは、\fIsudoers\fP ファイルがリモート・ファイルシステムに存在して、
そこではユーザ ID 0 を別の値にマップしている場合に起きることがある
(訳注: たとえば、NFS で root_squash が有効な場合)。
通常 \fBsudoers\fP は、この問題を回避するために、グループのパーミッションを使って
\fIsudoers\fP ファイルをオープンしようとする。
\fI/etc/sudoers\fP の所有権を変更するなり、
sudo.conf(5) ファイルの \fBsudoers\fP Plugin 行の末尾に "sudoers_uid=N"
('N' は、\fIsudoers\fP ファイルの所有者のユーザ ID)
といった引き数を追加するなりを、考慮すべきである。
.TP  3n
unable to stat /etc/sudoers
\fI/etc/sudoers\fP ファイルが見つからない。
.TP  3n
/etc/sudoers is not a regular file
\fI/etc/sudoers\fP は存在するが、通常ファイルでもシンボリック・リンクでもない。
.TP  3n
/etc/sudoers is owned by uid N, should be 0
\fIsudoers\fP ファイルの所有者が適切ではない。
\fIsudoers\fP ファイルの所有者を変更したい場合には、sudo.conf(5) ファイルの
\fBsudoers\fP Plugin 行に "sudoers_uid=N" ('N' は、
\fIsudoers\fP ファイルの所有者のユーザ ID) を付け加えていただきたい。
.TP  3n
/etc/sudoers is world writable
\fIsudoers\fP ファイルのパーミッションがすべてのユーザに書き込みを許している。
\fIsudoers\fP ファイルは、誰にでも書き込み可であってはならず、
デフォルトのファイルモードは 0440 である (所有者とグループのみ読むことができ、
書き込み権限は誰にもない)。デフォルトのモードは、sudo.conf(5) ファイルの
\fBsudoers\fP Plugin 行に "sudoers_mode"
オプションを指定することで変更することができる。
.TP  3n
/etc/sudoers is owned by gid N, should be 1
\fIsudoers\fP ファイルの所有グループが適切ではない。
\fIsudoers\fP ファイルの所有グループを変更したい場合には、
sudo.conf(5) ファイルの \fBsudoers\fP Plugin 行に "sudoers_gid=N"
('N' は、\fIsudoers\fP ファイルの所有グループ ID) を付け加えていただきたい。
.TP  3n
unable to open /var/run/sudo/ts/username
\fBsudoers\fP がユーザのタイムスタンプ・ファイルを読み込んだり、
作成したりすることができなかった。そうしたことは、
\fItimestampowner\fP が root 以外のユーザに設定されていて、
しかも \fI/var/run/sudo\fP のモードが、
グループやその他のユーザに対して検索不可になっている場合に起きることがある。
\fI/var/run/sudo\fP のデフォルトのモードは、0711 である。
.TP  3n
unable to write to /var/run/sudo/ts/username
\fBsudoers\fP がユーザのタイムスタンプ・ファイルに書き込むことができなかった。
.TP  3n
/var/run/sudo/ts is owned by uid X, should be Y
タイムスタンプ・ディレクトリの所有者が \fItimestampowner\fP 以外のユーザである。
そうしたことは、\fItimestampowner\fP の値を変更した時に起きることがある。
\fBsudoers\fP は、ディレクトリの所有者が訂正されるまで、
タイムスタンプ・ディレクトリを無視することになる。
.TP  3n
/var/run/sudo/ts is group writable
タイムスタンプ・ディレクトリがグループによって書き込み可能になっている。
書き込みが可能なのは、\fItimestampowner\fP のみにするべきだ。
タイムスタンプ・ディレクトリのデフォルトのモードは、700 である。
\fBsudoers\fP は、ディレクトリのモードが訂正されるまで、
タイムスタンプ・ディレクトリを無視することになる。
.SS "syslog 経由でロギングするときの注意点"
デフォルトでは、\fBsudoers\fP は syslog(3) 経由でメッセージをログに記録する。
その場合、\fIdate\fP, \fIhostname\fP, \fIprogname\fP フィールドをログに付加するのは、
syslog デーモンであって、\fBsudoers\fP ではない。
従って、そうしたフィールドは、システムが違えば書式も違うかもしれない。
.PP
ほとんどのシステムで、syslog(3) は、かなり小さなログ・バッファしか持っていない。
そこで、コマンドライン引き数の後ろの方が切り捨てられたりしないように、
\fBsudoers\fP は、(date, hostname, 及び "sudo" という文字列を別にして)
ログ・メッセージが 960 字以上になると、それを分割するようになっている。
メッセージが分割される場合、後続部分では、
ユーザ名の後ろに "(command continued)" という文字列が続き、
その後にコマンドライン引き数の残りが続くことになる。
.SS ファイルにロギングするときの注意点
\fIlogfile\fP オプションを設定すると、\fBsudoers\fP は \fI/var/log/sudo\fP
といったローカルなファイルにログを記録するようになる。ファイルにロギングする場合も、
\fBsudoers\fP は syslog(3) とほとんど同じ書式を使用するが、
いつくかの重要な違いがある。
.TP  5n
1.\&
\fIprogname\fP と \fIhostname\fP フィールドは存在しない。
.TP  5n
2.\&
\fIlog_year\fP オプションが有効な場合、日付には年度も含まれることになる。
.TP  5n
3.\&
\fIloglinelen\fP (デフォルトでは 80) 文字よりも長い行は改行され、
4 文字分のインデントを付けて次の行に続くことになる。
そうすることで、記述情報が人間に読みやすくなるが、
ログファイルに対して grep(1) を使用することは難しくなる。
\fIloglinelen\fP オプションに 0 を指定すると
(あるいは、頭に '\&!' をつけて、否定すると)、改行は行われなくなる。
.SH 入出力ログファイル
入出力ロギングを有効にすると、\fBsudo\fP は擬似 tty でコマンドを実行して、
ユーザのすべての入力や出力のログを取ることになる。
入出力は、\fIiolog_dir\fP オプションで指定したディレクトリに
(デフォルトでは \fI/var/log/sudo\-io\fP)、
一意なセッション ID を使って記録される。
このセッション ID は、(訳注: syslog 経由であれ、独自ファイルであれ)
\fBsudo\fP に関するログの行に、"TSID=" に続く値として書き込まれているものだ。
\fIiolog_file\fP オプションを使えば、
セッション ID の形式を変更することができる。
.PP
各入出力ログは、独立したディレクトリに収納される。
そうしたディレクトリには、次のようなファイルが入っている。
.TP  10n
\fIlog\fP
次のような情報を含むテキストファイル。コマンドが実行された日時、
\fBsudo\fP を実行したユーザの名前、変身対象ユーザ名、変身対象グループ名 (ないこともある)、
\fBsudo\fP が実行された端末、その端末の縦横のサイズ (何行何桁か)、
コマンドがそこから実行されたカレントディレクトリ、
それに、コマンドそのもののパス名 (引き数があれば、それも)
.TP  10n
\fItiming\fP
入出力ログに記録される各事項間の時間間隔と各事項の入出力バイト数のログ
(セッションの再生で使用される)
.TP  10n
\fIttyin\fP
ユーザが使用している端末からの入力 (ユーザがタイプしたこと)。
.TP  10n
\fIstdin\fP
パイプやファイルからの入力
.TP  10n
\fIttyout\fP
擬似 tty の出力 (コマンドがスクリーンに書き出したこと)
.TP  10n
\fIstdout\fP
パイプへ出力されたり、ファイルにリダイレクトされた標準出力
.TP  10n
\fIstderr\fP
パイプへ出力されたり、ファイルへリダイレクトされた標準エラー
.PP
\fIlog\fP 以外のすべてのファイルは、\fIcompress_io\fP オプションが無効になっていないかぎり、
gzip 形式で圧縮される。バッファリングを行うので、入出力のデータは、
\fBsudo\fP コマンドが完了するまで、完全なものにはならない。
入出力ログファイルの出力の部分は、sudoreplay(8) を使って再生することができる。
また、sudoreplay(8) ユーティリティは、利用できるログをリスト表示したり、
検索したりするのに使うこともできる。
.PP
ユーザの入力には、パスワードのような (たとえ、
画面にエコーされることはないにしても) 秘密情報が含まれていることがある。
そういった情報も、暗号化されずに、ログファイルに記録されることに注意していただきたい。
たいていの場合、\fIlog_output\fP や LOG_OUTPUT を使って、
コマンドの出力をログに記録するだけで十分用が足りる。
.PP
入出力ログは、セッションごとに独立したディレクトリに収納される。
そのため、従来からあるログローテーション・ユーティリティを使用して、
保存しておく入出力ログ数を制限することはできない。
保存する入出力ログ数を制限する最も簡単な方法は、
\fImaxseq\fP オプションで保存したいログの最大数を指定することである。
入出力ログの連番が \fImaxseq\fP に達すると、連番は 0 にリセットされ、
\fBsudoers\fP は既存の入出力ログファイルをサイズ 0 に短縮して、再利用することになる。
.SH ファイル
.TP  26n
\fI/etc/sudo.conf\fP
sudo フロントエンドの設定
.TP  26n
\fI/etc/sudoers\fP
誰が何を実行できるかのリスト
.TP  26n
\fI/etc/group\fP
ローカルのグループファイル
.TP  26n
\fI/etc/netgroup\fP
ネットワークグループのリスト
.TP  26n
\fI/var/log/sudo\-io\fP
入出力のログファイル (訳注: 厳密には、
入出力のログを記録するファイル群をその下に格納するトップディレクトリ)
.TP  26n
\fI/var/run/sudo/ts\fP
\fBsudoers\fP セキュリティポリシーが使用するタイムスタンプを格納するディレクトリ
.TP  26n
\fI/var/lib/sudo/lectured\fP
\fBsudoers\fP セキュリティポリシーが使用する訓戒状態ファイルを格納するディレクトリ
.TP  26n
\fI/etc/environment\fP
Linux や AIX で \fB\-i\fP モードを使用するときの初期環境
.SH 用例
以下は \fIsudoers\fP ファイルの記載例である。
正直なところ、いささか凝りすぎの部分もある。
まず最初に継承を許可する環境変数をいくつか指定し、
続いて \fIaliases\fP の定義をする。
.nf
.sp
.RS 0n
# sudo 経由で X アプリケーションを実行するとき、HOME は
# .Xauthority ファイルを探すために使用される。ほかのプログラムも
# 設定ファイルを探すのに HOME を使用するので、この指定が
# 権限の昇格を引き起こしかねないことに注意してほしい。
Defaults env_keep += "DISPLAY HOME"

# User alias の指定
User_Alias	FULLTIMERS = millert, mikef, dowdy
User_Alias	PARTTIMERS = bostley, jwfox, crawl
User_Alias	WEBMASTERS = will, wendy, wim

# Runas alias の指定
Runas_Alias	OP = root, operator
Runas_Alias	DB = oracle, sybase
Runas_Alias	ADMINGRP = adm, oper

# Host alias の指定
Host_Alias	SPARC = bigtime, eclipse, moet, anchor :\e
		SGI = grolsch, dandelion, black :\e
		ALPHA = widget, thalamus, foobar :\e
		HPPA = boa, nag, python
Host_Alias	CUNETS = 128.138.0.0/255.255.0.0
Host_Alias	CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0
Host_Alias	SERVERS = master, mail, www, ns
Host_Alias	CDROM = orion, perseus, hercules

# Cmnd alias の指定
Cmnd_Alias	DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,\e
			/usr/sbin/restore, /usr/sbin/rrestore,\e
			sha224:0GomF8mNN3wlDt1HD9XldjJ3SNgpFdbjO1+NsQ== \e
			/home/operator/bin/start_backups
Cmnd_Alias	KILL = /usr/bin/kill
Cmnd_Alias	PRINTING = /usr/sbin/lpc, /usr/bin/lprm
Cmnd_Alias	SHUTDOWN = /usr/sbin/shutdown
Cmnd_Alias	HALT = /usr/sbin/halt
Cmnd_Alias	REBOOT = /usr/sbin/reboot
Cmnd_Alias	SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh,\e
			 /usr/local/bin/tcsh, /usr/bin/rsh,\e
			 /usr/local/bin/zsh
Cmnd_Alias	SU = /usr/bin/su
Cmnd_Alias	PAGERS = /usr/bin/more, /usr/bin/pg, /usr/bin/less
.RE
.fi
.PP
以下では、コンパイル時に埋め込まれたデフォルト値のいくつかを変更している。
\fBsudo\fP には syslog(3) 経由でログを記録し、
ファシリティにはすべての場合に \fIauth\fP を使用させたい。
フルタイムのスタッフには \fBsudo\fP の訓戒を出さないようにしたい。
ユーザ \fBmillert\fP はパスワードを入力しないでよい。
コマンドを root として実行するときは、
環境変数 LOGNAME, USER, USERNAME を変更したくない。
さらに、\fISERVERS\fP という Host_Alias に属するマシンでは、
ローカルなログファイルを副本として作り、
ログの記入事項は数年に渡って保存されるので、
ログの各行に間違いなく年度が入るようにする。
最後に \fIPAGERS\fP という Cmnd_Alias に属するコマンド
(\fI/usr/bin/more\fP, \fI/usr/bin/pg\fP, \fI/usr/bin/less\fP) については、
シェル・エスケープを無効にする。なお、最後の設定は、
許可するコマンドが ALL になっているユーザに対しては、
効果的な抑制にはならないことに注意していただきたい。
.nf
.sp
.RS 0n
# built\-in defaults の変更
Defaults		syslog=auth
Defaults>root		!set_logname
Defaults:FULLTIMERS	!lecture
Defaults:millert	!authenticate
Defaults@SERVERS	log_year, logfile=/var/log/sudo.log
Defaults!PAGERS		noexec
.RE
.fi
.PP
ユーザ設定が、誰が何を実行できるかを実際に決めている部分だ。
.nf
.sp
.RS 0n
root		ALL = (ALL) ALL
%wheel		ALL = (ALL) ALL
.RE
.fi
.PP
\fBroot\fP と \fBwheel\fP グループに属するすべてのユーザには、
どのホストでも任意のユーザとしていかなるコマンドでも実行することを認める。
.nf
.sp
.RS 0n
FULLTIMERS	ALL = NOPASSWD: ALL
.RE
.fi
.PP
フルタイムのシステム管理者 (\fBmillert\fP, \fBmikef\fP, \fBdowdy\fP) は、
どのホストでも任意のコマンドを認証なしで実行できる。
.nf
.sp
.RS 0n
PARTTIMERS	ALL = ALL
.RE
.fi
.PP
パートタイムのシステム管理者 (\fBbostley\fP, \fBjwfox\fP, \fBcrawl\fP) は、
どのホストでも任意のコマンドを実行できるが、その際に認証をしなければならない
(このエントリには NOPASSWD タグが指定されていないので)。
.nf
.sp
.RS 0n
jack		CSNETS = ALL
.RE
.fi
.PP
ユーザ \fBjack\fP は、\fICSNETS\fP というエイリアスに属するマシンで、
任意のコマンドを実行できる (すなわち、ネットワークが 128.138.243.0,
128.138.204.0, 128.138.242.0 のマシンだ)。この内、128.138.204.0 にのみ
class C のネットワークであることを示す明示的な (CIDR 表記の)
netmask がある。\fICSNETS\fP のほかのネットワークについては、
ローカルマシンの netmask がマッチングの際に使われることになる。
.nf
.sp
.RS 0n
lisa		CUNETS = ALL
.RE
.fi
.PP
ユーザ \fBlisa\fP は、エイリアスが \fICUNETS\fP のいかなるホストでも、
任意のコマンドを実行することができる
(すなわち、128.138.0.0 という class B ネットワークのマシンだ)。
.nf
.sp
.RS 0n
operator	ALL = DUMPS, KILL, SHUTDOWN, HALT, REBOOT, PRINTING,\e
		sudoedit /etc/printcap, /usr/oper/bin/
.RE
.fi
.PP
ユーザ \fBoperator\fP は、
簡単な保守管理に用途が限定されたコマンドを実行できる。この場合それは、
バックアップしたり、プロセスを kill したり、印刷システムを操作したり、
システムをシャットダウンしたりするのに関係するコマンドと、
\fI/usr/oper/bin/\fP ディレクトリにある任意のコマンドである。
注意: \fIDUMPS\fP という Cmnd_Alias に属するコマンドのひとつ、すなわち
\fI/home/operator/bin/start_backups\fP は、sha224 ダイジェスト付きである。
そうしているのは、そのスクリプトが置かれているディレクトリが
operator ユーザによって書き込み可能だからだ。スクリプトが変更された場合
(その結果、ダイジェストが一致しないことになる)、
\fBsudo\fP 経由でそのスクリプトを実行することはもはや不可能になる。
.nf
.sp
.RS 0n
joe		ALL = /usr/bin/su operator
.RE
.fi
.PP
ユーザ \fBjoe\fP は、su(1) を使って operator になることしかできない。
.nf
.sp
.RS 0n
pete		HPPA = /usr/bin/passwd [A\-Za\-z]*, !/usr/bin/passwd root

%opers		ALL = (: ADMINGRP) /usr/sbin/
.RE
.fi
.PP
\fBopers\fP グループのユーザは、\fI/usr/sbin/\fP にあるコマンドを、
自分自身の資格で、Runas_Alias \fIADMINGRP\fP に属する任意のグループ
(すなわち、\fBadm\fP か \fBoper\fP グループ) として実行できる。
.PP
ユーザ \fBpete\fP は、\fIHPPA\fP に属するマシンで
root 以外なら誰のパスワードでも変更することを許されている。
コマンドライン引き数は、結合して一つの文字列にした上で、マッチングを行うので、
ワイルドカード '*' は、\fI複数の\fP単語とマッチすることになる。だから、
この例は、passwd(1) がコマンドラインで複数のユーザ名を受け付けないことを前提としているのである。
GNU のシステムでは、
passwd(1) に対するオプションをユーザ引き数の後ろに置くことができるのに注意していただきたい。
そのため、このルールは次のようなコマンドも許可してしまうことになる。
.nf
.sp
.RS 4n
passwd username \-\-expire
.RE
.fi
.PP
これは、望ましくないことかもしれない。
.nf
.sp
.RS 0n
bob		SPARC = (OP) ALL : SGI = (OP) ALL
.RE
.fi
.PP
ユーザ \fBbob\fP は、\fISPARC\fP や \fISGI\fP に属するマシンで
Runas_Alias \fIOP\fPに登録されている任意のユーザとして
(\fBroot\fP と \fBoperator\fP である) どんなコマンドでも実行できる。
.nf
.sp
.RS 0n
jim		+biglab = ALL
.RE
.fi
.PP
ユーザ \fBjim\fP は、\fIbiglab\fP ネットグループに属するマシンで、
どんなコマンドでも実行できる。
\fBsudo\fP は、"biglab" に '+' の接頭辞が付いているので、
それをネットグループだと認識する。
.nf
.sp
.RS 0n
+secretaries	ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser
.RE
.fi
.PP
\fBsecretaries\fP ネットグループのユーザは、ユーザの追加や削除はもちろん、
プリンタの管理にも協力する必要がある。
そこで、すべてのマシンでその種のコマンドの実行を認められている。
.nf
.sp
.RS 0n
fred		ALL = (DB) NOPASSWD: ALL
.RE
.fi
.PP
ユーザ \fBfred\fP は、Runas_Alias \fIDB\fP の任意のユーザとして
(\fBoracle\fP か \fBsybase\fP だ)
パスワードを入力しないでもコマンドを実行することができる。
.nf
.sp
.RS 0n
john		ALPHA = /usr/bin/su [!\-]*, !/usr/bin/su *root*
.RE
.fi
.PP
ユーザ \fBjohn\fP は、\fIALPHA\fP に属するマシンで su(1) を使って
root 以外の誰にでもなることができるが、
su にオプションを指定することは許されていない。
.nf
.sp
.RS 0n
jen		ALL, !SERVERS = ALL
.RE
.fi
.PP
ユーザ \fBjen\fP は、Host_Alias \fISERVERS\fP に属するマシン
(master, mail, www, ns) を除くいかなるマシンでも、任意のコマンドを実行できる。
.nf
.sp
.RS 0n
jill		SERVERS = /usr/bin/, !SU, !SHELLS
.RE
.fi
.PP
\fBjill\fP は、Host_Alias \fISERVERS\fP のいかなるマシンでも
\fI/usr/bin/\fP ディレクトリにある任意のコマンドを実行できるが、
\fISU\fP や \fISHELLS\fP という Cmnd_Alias に属するコマンドは実行できない。
ルールのこのくだりでは特に言っていないが、
Cmnd_Alias \fIPAGER\fP のコマンドはすべて \fI/usr/bin\fP にあり、
\fInoexec\fP オプションが設定されている。
.nf
.sp
.RS 0n
steve		CSNETS = (operator) /usr/local/op_commands/
.RE
.fi
.PP
ユーザ \fBsteve\fP は、ディレクトリ \fI/usr/local/op_commands/\fP
にある任意のコマンドを実行できるが、
operator というユーザとして実行できるだけだ。
.nf
.sp
.RS 0n
matt		valkyrie = KILL
.RE
.fi
.PP
\fBmatt\fP も、自分用のワークステーション valkyrie で、
ハングしたプロセスの kill ぐらいはできる必要がある。
.nf
.sp
.RS 0n
WEBMASTERS	www = (www) ALL, (root) /usr/bin/su www
.RE
.fi
.PP
ホスト www で User_Alias \fIWEBMASTERS\fP に属するいかなるユーザも
(will, wendy, wim だ)、ユーザ www (web ページの所有者)
として任意のコマンドを実行することができる。
単に su(1) でユーザ www になってもよい。
.nf
.sp
.RS 0n
ALL		CDROM = NOPASSWD: /sbin/umount /CDROM,\e
		/sbin/mount \-o nosuid\e,nodev /dev/cd0a /CDROM
.RE
.fi
.PP
いかなるユーザも、Host_Alias が \fICDROM\fP のマシンで
(orion, perseus, hercules)、パスワードを入力することなく
CD\-ROM をマウント、アンマウントできる。
上記のコマンドを打ち込むのはユーザにとっていささか面倒なので、
シェルスクリプトとしてカプセル化してしまうのがよいだろう。
.IP "[\fB訳注\fP]:" 8
注意していただきたいが、
\fI/etc/sudoers\fP ファイルに「user1 ALL = (ALL) ALL」といった設定を書いても、
user1 が \fBsudo\fP 経由であらゆるコマンドを実行できるようになるのは、
自ホスト、すなわち、その \fI/etc/sudoers\fP が存在するホストだけであって、
telnet や ssh で接続したホストで 
\fBsudo\fP 経由でコマンドを実行できるとはかぎらない。
他ホストの \fBsudo\fP は、自分のところにある \fI/etc/sudoers\fP 
ファイルしか参照しないからである。
.sp
それでは、何故、上記の「用例」で自ホスト以外の設定が行われているのだろうか? 
そもそも、\fIsudoers\fP の書式で自ホスト以外のホストを指定できるのは、
何故なのか? ホストに \fBALL\fP を指定できるのは、何故なのか? 
それは、管理しているサイトのすべてのホストの設定を記した 
\fIsudoers\fP ファイルを一つ作って、それをすべてのホストにコピーして使う、
そういった使い方を想定しているからだろう。昔の習慣の名残りかもしれない。
もし、サイト中のすべてのホストの設定を一ヶ所にまとめて置き、
それをすべてのホストに共有させたいのなら 
(すなわち、\fIsudoers\fP セキュリティポリシー設定の集中管理がしたいのなら)、
\fBLDAP\fP の採用を考えるべきである。
.SH セキュリティに関する注意点
.SS "'!\&' 演算子の限界"
一般的に言って、演算子 '!\&' を使用して \fBALL\fP
からコマンドの「引き算」をするのは、あまり効果的な方法ではない。
ユーザは実行したいコマンドを名前を変えてコピーし、
それからそれを実行するといった簡単な方法で、裏をかくことができるからだ。
たとえば、
.nf
.sp
.RS 0n
bill	ALL = ALL, !SU, !SHELLS
.RE
.fi
.PP
という行は、\fISU\fP や \fISHELLS\fP に列記されているコマンドの \fBbill\fP による実行を、
本当に阻止することにはならない。なぜなら、\fBbill\fP としては、
そうしたコマンドを単に名前を変えてコピーすればよいし、
エディタなどのプログラムからシェル・エスケープを利用することもできるからだ。
だから、この種の制限はやった方がまし程度に考えておくべきである
(そして、しっかりした運用方針によって制限の実効力を上げるべきだ)。
.PP
一般に、もし ユーザに許可するコマンドに \fBALL\fP が入っているならば、
ユーザが自分でプログラムを作って
(あるいは、シェルを自分専用に別の名前でコピーして)、
ルート・シェルを獲得するのを防ぐことはできない。
ユーザ設定でどんな項目に '!\&'  を付けようとも防止不可能である。
.SS "\fIfast_glob\fP の持つセキュリティ上の問題"
\fIfast_glob\fP オプションが使われている場合、
パス名に glob 文字 (ワイルドカードとも言う)
が含まれるコマンドを確実に無効にすることは不可能である。その理由は、
C ライブラリの fnmatch(3) 関数は、相対パスのパス名展開ができないからだ。
このことは、権限を許可するルールにとっては、
たいていの場合不便なだけにすぎないが、権限を減らしたり、
取り消したりするルールにとっては、セキュリティ上の問題をもたらしかねない。
.PP
たとえば、\fIsudoers\fP ファイルに次のエントリがあったとしよう。
.nf
.sp
.RS 0n
john	ALL = /usr/bin/passwd [a\-zA\-Z0\-9]*, /usr/bin/chsh [a\-zA\-Z0\-9]*,\e
              /usr/bin/chfn [a\-zA\-Z0\-9]*, !/usr/bin/* root
.RE
.fi
.PP
それでも、\fIfast_glob\fP が有効になっていれば、\fBjohn\fP は
"/usr/bin/passwd root" を実行できてしまう。
\fI/usr/bin\fP に移動して、"./passwd root" を実行すればよいのだ。
.SS シェル・エスケープの防止
\fBsudo\fP があるプログラムを実行した場合、そのプログラムは、
ほかのプログラムの実行も含めて、何でも自由に好きなことができる。
このことがセキュリティ上の問題になりかねないのは、
プログラムがシェル・エスケープを許しているのは珍しいことではなく、
そのために、ユーザが \fBsudo\fP
のアクセス制御やロギングをすり抜けることが可能になるからだ。
よく使うプログラムでシェル・エスケープを許しているものには、
(当然ながら) シェル、エディタ、
ページャ、メーラ、ターミナルなどがある。
.PP
この問題に対処するには、基本的に二つの方法がある。
.TP  10n
制限
ユーザに任意のコマンドの実行を許すようなコマンドに対して、
ユーザがアクセスできないようにする。
エディタの場合は、制限モード (restricted mode) と称して、
シェル・エスケープが使えないモードを持っているものも多い。
とは言え、\fBsudo\fP 経由でエディタを使うのなら、
\fBsudoedit\fP を使用する方がより優れた対策である。
シェル・エスケープを提供するプログラムはたくさんあるので、
それを提供しないプログラムのみを使用するようにユーザを制限するのは、
たいてい実現不可能である。
.TP  10n
noexec
共有ライブラリをサポートしているシステムには、
環境変数 (たいていは LD_PRELOAD) で別の共有ライブラリを指定することによって、
デフォルトのライブラリ関数を置き換えることができるものが多い。
そういったシステムでは、\fBsudo\fP の \fInoexec\fP 機能を使えば、
\fBsudo\fP から実行されるプログラムが、
何かほかのプログラムを実行するのを防ぐことができる。
とは言え、これが当てはまるのは、
動的にリンクされたネイティブなプログラムだけだということに留意してほしい。
静的にリンクされたプログラムや、
バイナリ・エミュレーションのもとで動くほかの OS のプログラムには効果がない。
.sp
\fInoexec\fP 機能は SunOS, Solaris, *BSD, Linux, IRIX, Tru64 UNIX,
MacOS X, HP\-UX 11.x、それに 5.3 以上の AIX で使えることがわかっている。
環境変数 LD_PRELOAD をサポートしているたいていのオペレーティングシステムが、
この機能に対応しているはずだ。
使用しているオペレーティングシステムのマニュアルページを調べて、
ダイナミック・リンカについて (通例 ld.so, ld.so.1, dyld, dld.sl, rld,
loader といった名前になっている) LD_PRELOAD
がサポートされているかどうか確認していただきたい。
.sp
あるコマンドに対して \fInoexec\fP を有効にするには、
上述の「ユーザ設定」セクションで解説したように、NOEXEC タグを使用する。
そのときの例を再掲しよう。
.nf
.sp
.RS 10n
aaron	shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
.RE
.fi
.RS 10n
.sp
この例では、ユーザ \fBaaron\fP 対して、\fInoexec\fP を有効にした上で、
\fI/usr/bin/more\fP と \fI/usr/bin/vi\fP の実行を許可している。
このようにすれば、この二つのコマンドから (シェルのような)
ほかのコマンドを実行することができなくなるわけだ。使用しているシステムが
\fInoexec\fP に対応する能力があるかどうかよくわからない場合でも、
取りあえず試してみることなら、いつだってできる。\fInoexec\fP を有効にして、
シェル・エスケープが可能かどうか確かめてみればよいのだ。
.RE
.PP
注意してほしいが、シェル・エスケープの禁止は万能薬ではない。
root の権限で動いているプログラムには、ほかにも、危険性のあるさまざまな作業
(ファイルの属性を変更するとか、上書きしてしまうとか) が可能であり、
思いがけずに権限を拡大してしまうこともありえるのだ。特にエディタについて言うと、
ユーザには \fBsudoedit\fP を実行する許可を与えるのが、より安全な方法である
(下記参照)。
.SS 安全な編集作業
\fBsudoers\fP プラグインでは \fBsudoedit\fP が使用できるようになっており、
ユーザは好みのエディタを使って、安全にファイルを編集することができる。
\fBsudoedit\fP は \fBsudo\fP の組み込みコマンドなので、
\fIsudoers\fP ファイル中で指定するときは、
頭にパスを付けてはいけない。ただし、コマンドライン引き数については、
通常のコマンドと全く同じように指定することができる。
\fBsudoedit\fP のコマンドライン引き数にワイルドカードを使用した場合は、
\fBsudoedit\fP の引き数にはパス名が来るはずなので、
ワイルドカードはフォワードスラッシュ ('/') にマッチしないようになっている。
.PP
\fBsudo\fP 経由で実行される他のコマンドとは違って、エディターは
\fBsudo\fP を起動するユーザの資格で、環境を変更せずに実行される。
詳しくは、sudo(8) のマニュアルの \fB\-e\fP オプションの説明をご覧になるとよい。
.PP
たとえば、ユーザ operator が "message of the day" ファイルを編集できるようにするには、\fIsudoers\fP
で次のように指定する。
.nf
.sp
.RS 6n
operator	ALL = sudoedit /etc/motd
.RE
.fi
.PP
そして、ユーザ operator は、\fBsudoedit\fP を次のように実行する。
.nf
.sp
.RS 6n
$ sudoedit /etc/motd
.RE
.fi
.PP
エディタは、root ではなく、ユーザ operator の資格で、\fI/etc/motd\fP
の作業用コピーに対して実行される。ファイルの編集が済むと、
\fI/etc/motd\fP は作業用コピーの内容で更新されることになる。
.PP
ユーザが書き込み権限を持っているディレクトリに存在するファイルに対して、
ファイル名を直接指定してであれ、ワイルドカードによって指定してであれ、
\fBsudoedit\fP を使って編集する許可をそのユーザに与えてはいけない。
もし、ユーザがディレクトリに対して書き込み権限を持っているならば、編集を許可されたファイルを、
別のファイルに対するリンクで置き換えることができるわけで、そうすることによって、
任意のどんなファイルでも編集できるようになってしまうからだ。
そうした事態を防ぐために、バージョン 1.8.16 以降の \fBsudoedit\fP では、
\fIsudoedit_checkdir\fP オプションが無効になっている場合や、
\fBsudoedit\fP を実行するユーザが root である場合を除いて、
ユーザが書き込み権限を持っているディレクトリに存在するいかなるシンボリックリンクも、
たどらないようになっている。
また、書き込み権限があるディレクトリに存在するファイルの編集を行うことも拒否する。
さらに、バージョン 1.8.15 以降の \fBsudoedit\fP では、
\fIsudoers\fP ファイルで \fIsudoedit_follow\fP オプションが有効になっているか、
\fIsudoedit\fP コマンドの前に FOLLOW タグが指定してあるかのどちらかでないかぎり、
シンボリックリンクをオープンしないようになっている。
.SS タイムスタンプ・ファイルのチェック
\fBsudoers\fP は、タイムスタンプ・ディレクトリ (デフォルトでは
\fI/var/run/sudo/ts\fP) の所有者を調べて、所有者が root でなかったり、
root 以外のユーザにも書き込み可能であったりすると、
そのディレクトリの中身を無視する。古いバージョンの \fBsudo\fP は、
タイムスタンプ・ファイルを \fI/tmp\fP に置いていたが、
そうしたことは今では推奨できない。
特権を持たないユーザが自分の作ったファイルの所有者を変更できるシステムでは、
ユーザがタイムスタンプを自分で作成することが可能になるかもしれないからだ。
.PP
タイムスタンプ・ディレクトリは、
リブートしたときにその中身を\fI消去されるべき\fPだが、
すべてのシステムに \fI/var/run\fP ディレクトリが存在するとはかぎらない。
問題が起きるのを避けるために、\fBsudoers\fP は、
ブートタイムを参照できるシステムでは、
マシンがブートした時刻よりも古い日時を持つタイムスタンプ・ファイルを無視する。
.PP
グラフィカルなデスクトップ環境を持っているシステムの中には、
特権を持たないユーザにシステム・クロックの変更を許しているものがある。
\fBsudoers\fP は、タイムスタンプが有効か否を確認するのに、
システム・クロックを拠り所にしている。そこで、そうしたシステムでは、
ユーザがクロックを後戻りさせることで、\fItimestamp_timeout\fP よりも長い時間
\fBsudo\fP を実行することが可能になるかもしれない。そうした事態に対抗するため、
\fBsudoers\fP は、システムがサポートしているならば、
タイムスタンプに単調増加時計 (monotonic clock) を使用する
(単調増加時計は後戻りすることがないからだ)。
.PP
\fBsudoers\fP はあまりにも未来に設定されたタイムスタンプを認めない。
タイムスタンプが「現在時 + 2 * TIMEOUT」より新しい日時だった場合、
そのタイムスタンプは無視され、\fBsudoers\fP はログに記録して、警告を発する。
.PP
タイムスタンプ・ファイルはファイルシステム中に作られるものだから、
ユーザのログイン・セッションが終わっても残っている。
そのため、ユーザがログインし、認証を行ってから
\fBsudo\fP を使ってコマンドを実行し、一旦ログアウトして、再度ログインしたとき、
認証なしで \fBsudo\fP を実行することが可能になってしまうかもしれない。
タイムスタンプ・ファイルに記録されているタイムスタンプが 5 分以内のものであれば
(あるいは、\fIsudoers\fP ファイルで設定されているタイムアウト時間以内のものであれば)、
そういうことが可能かもしれないのだ。
\fItty_tickets\fP オプションが有効な場合は、タイムスタンプの記録に、
ユーザが認証するときに使った端末のデバイス番号が含まれる。それよって、
tty ごとのきめ細かな管理が可能になるが、それでもタイムスタンプの記録が、
ユーザのセッションが終わった後まで有効である可能性もある。また、
タイムスタンプの記録には、最後に認証を行ったプロセスのセッション ID も含まれている。
別の端末セッションのプロセスが、同じタイムスタンプの記録を使えないようにしているのだ。
それはまた、ユーザがログアウトし、再度同じ端末にログインしたときに、
パスワードを入力することなしに \fBsudo\fP を実行できる可能性を減少させる役にも立っている。
.SH デバッギング
バージョン 1.8.4 以上の \fBsudoers\fP プラグインは、
デバッグのための柔軟な枠組みをサポートしており、問題が発生したときに、
プラグインの内部で何が起きているかを突き止めるために、
それを利用することができる。設定は sudo.conf(5) ファイルで行うことが可能だ。
.PP
\fBsudoers\fP プラグインは、
フロントエンドである \fBsudo\fP と同じデバッグ・フラグの書式を使用する。
すなわち、\fIsubsystem\fP@\fIpriority\fP である。
.PP
\fBsudoers\fP が使用する priority (重大度) を深刻なものから挙げると、
\fIcrit\fP, \fIerr\fP, \fIwarn\fP, \fInotice\fP, \fIdiag\fP, \fIinfo\fP, \fItrace\fP,
\fIdebug\fP である。ある priority を指定すると、
それより深刻なすべての priority も併せて指定したことになる。
たとえば、\fInotice\fP という priority を指定すれば、
\fInotice\fP レベル以上のデバッグメッセージがログに記録される。
.PP
\fBsudoers\fP では以下のサブシステムが使用できる。
.TP  10n
\fIalias\fP
User_Alias, Runas_Alias, Host_Alias and Cmnd_Alias の処理
.TP  10n
\fIall\fP
すべてのサブシステムにマッチする
.TP  10n
\fIaudit\fP
Solaris BSM (Basic Security Module) と Linux の監査コード
.TP  10n
\fIauth\fP
ユーザの認証
.TP  10n
\fIdefaults\fP
\fIsudoers\fP ファイルの \fIDefaults\fP 設定
.TP  10n
\fIenv\fP
環境の取扱い
.TP  10n
\fIldap\fP
LDAP を使用する sudoers
.TP  10n
\fIlogging\fP
ロギングのサポート
.TP  10n
\fImatch\fP
\fIsudoers\fP ファイルにおけるユーザ、グループ、ホスト、ネットグループのマッチング
.TP  10n
\fInetif\fP
ネットワークインターフェースの取扱い
.TP  10n
\fInss\fP
\fBsudoers\fP におけるネームサービス・スイッチの取扱い
.TP  10n
\fIparser\fP
\fIsudoers\fP ファイルの解析
.TP  10n
\fIperms\fP
パーミッションの設定
.TP  10n
\fIplugin\fP
プラグインにとって \fImain\fP に相当する
.TP  10n
\fIpty\fP
擬似 tty 関連コード
.TP  10n
\fIrbtree\fP
赤黒木 (redblack tree) の内部情報
.TP  10n
\fIsssd\fP
SSSD を使用する sudoers
.TP  10n
\fIutil\fP
ユーティリティ関数群
.PD 0
.PP
一例を挙げておく。
.nf
.sp
.RS 0n
Debug sudoers.so /var/log/sudo_debug match@info,nss@info
.RE
.fi
.PD
.PP
より詳しい情報については、sudo.conf(5) マニュアルをご覧いただきたい。
.SH 関連項目
ssh(1), su(1), fnmatch(3), glob(3), mktemp(3), strftime(3), sudo.conf(5),
sudoers.ldap(5), sudo(8), sudo_plugin(5), visudo(8)
.SH 作者
多数の人々が長年に渡って \fBsudo\fP の開発に携わってきた。
当バージョンは主として次の者が書いたコードからできている。
.sp
.RS 6n
Todd C. Miller
.RE
.PP
\fBsudo\fP の開発に貢献してくださった方々の詳細なリストについては、
配布物中の CONTRIBUTORS ファイルをご覧になっていただきたい。
(https://www.sudo.ws/contributors.html)
.SH 警告
\fIsudoers\fP ファイルの編集には、\fB必ず\fP \fBvisudo\fP コマンドを使うべきである。
そうすれば、\fBvisudo\fP がファイルをロックし、文法のチェックをやってくれる。
\fIsudoers\fP ファイルに文法的な間違いがあると、\fBsudo\fP が動かなくなるので、
\fIsudoers\fP ファイルには文法エラーが絶対にあってはならないのだ。
.PP
ネットグループを (ユーザについてではなく) マシンについて使用し、
\fInetgroup\fP ファイルに完全修飾ホスト名を記載する場合は
(たいていそうするものだが)、そのマシンのホスト名を
hostname コマンドが出力する通りの完全修飾名で書くか、さもなければ、
\fIsudoers\fP ファイルで \fIfqdn\fP オプションを使うかしなければならない。
.SH バグ
\fBsudo\fP にバグを発見したと思ったら、https://bugzilla.sudo.ws/
にアクセスして、バグレポートを提出していただきたい。
.SH サポート
ある程度の無料サポートが sudo\-users メーリングリストを通して利用できる。
購読やアーカイブの検索には、次の URL をご覧になるとよい。
https://www.sudo.ws/mailman/listinfo/sudo\-users
.SH 免責
\fBsudo\fP は「現状のまま」提供される。 明示的な、あるいは黙示的ないかなる保証も、
商品性や特定目的への適合性についての黙示的な保証を含め、
またそれのみに止まらず、これを否認する。詳細な全文については、
\fBsudo\fP と一緒に配布されている LICENSE ファイルや、
次の Web ページをご覧いただきたい。
https://www.sudo.ws/license.html