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
|
.\" Copyright (c) 1994-1996, 1998-2005, 2007-2012
.\" 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.
.\"
.\" 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
.\"
.nr SL 0
.nr BA 0
.nr LC 0
.\"
.\" Automatically generated by Pod::Man 2.23 (Pod::Simple 3.14)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C`
. ds C'
'br\}
.el\{\
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. nr % 0
. rr F
.\}
.el \{\
. de IX
..
.\}
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
. ds #V .8m
. ds #F .3m
. ds #[ \f1
. ds #] \fP
.\}
.if t \{\
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. ds #V .6m
. ds #F 0
. ds #[ \&
. ds #] \&
.\}
. \" simple accents for nroff and troff
.if n \{\
. ds ' \&
. ds ` \&
. ds ^ \&
. ds , \&
. ds ~ ~
. ds /
.\}
.if t \{\
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
. ds : e
. ds 8 ss
. ds o a
. ds d- d\h'-1'\(ga
. ds D- D\h'-1'\(hy
. ds th \o'bp'
. ds Th \o'LP'
. ds ae ae
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "SUDOERS 5"
.TH SUDOERS 5 "February 5, 2012" "1.8.4" "MAINTENANCE COMMANDS"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "名前"
sudoers \- デフォルトの sudo 用セキュリティ・ポリシー・モジュール
.SH "説明"
.IX Header "DESCRIPTION"
\&\fIsudoers\fR ポリシー・モジュールは、デフォルトの \fBsudo\fR
用ポリシー・プラグインであり、このモジュールによってユーザがどんな
\&\fBsudo\fR 権限を持っているかの判定が行われる。ポリシーの運用は
\&\fI/etc/sudoers\fR ファイルによって行われるが、
\&\s-1LDAP\s0 を使用することも可能である。ポリシーを設定するときの書式は、
「SUDOERS ファイルの書式」セクションで詳しく説明している。
\&\fIsudoers\fR ポリシーの情報を \s-1LDAP\s0 に格納することについては、
\&\fIsudoers.ldap\fR\|(5) をご覧になるとよい。
.SS "認証とロギング"
.IX Subsection "Authentication and Logging"
\&\fIsudoers\fR セキュリティ・ポリシーでは、ユーザはたいていの場合、
\&\fBsudo\fR を使用できるようになる前に、本人であることを証明する必要がある。ただし、
\&\fBsudo\fR を実行するユーザが root だったり、変身対象ユーザが
\&\fBsudo\fR を実行するユーザと同一であったり、
ポリシーによってそのユーザやコマンドに対する認証が免除されている場合は、
パスワードは要求されない。\fIsu\fR\|(1) とは違って、
\&\fIsudoers\fR ポリシーによる認証でチェックされるのは、
\&\fBsudo\fR を実行するユーザの認証情報 (訳注: 通常はパスワード)
であって、変身対象ユーザの (あるいは、root の) 認証情報ではない。
この動作は、後述する \fIrootpw\fR, \fItargetpw\fR, \fIrunaspw\fR
フラグによって変更することができる。
.PP
ポリシーに登録されていないユーザが \fBsudo\fR
を使ってコマンドを実行しようとすると、しかるべき権威者にメールが送付される。
そうしたメールの宛先は、
後述する「デフォルト設定」の \fImailto\fR によって設定できるが、
デフォルトでは \f(CW\*(C`root\*(C'\fR になっている。
.PP
\&\fBsudo\fR を使用する権限のないユーザが、\fB\-l\fR や \fB\-v\fR
オプションを付けて \fBsudo\fR の実行を試みても、
メールは送付されないことに注意してほしい。これによって、
自分が \fBsudo\fR を使用できるかどうか、
ユーザが自分で判断できるようになっているのである。
.PP
\&\fBsudo\fR が root によって実行されたとき、環境変数
\&\f(CW\*(C`SUDO_USER\*(C'\fR が設定されていると、
\&\fIsudoers\fR ポリシーは実際のユーザが誰かを判定するのに、
その値を使用する。ユーザとしては、この動作を利用することで、
すでに root シェルが起動されている場合でも、
自分が \fBsudo\fR を介して実行したコマンドのログを取ることができる。
また、この動作のおかげで、
\&\fBsudo\fR で実行したスクリプトやプログラムから呼び出される場合でさえ、
\&\fB\-e\fR オプションが役に立つものになっている。とは言え、そうした場合でも、
\&\fIsudoers\fR の参照はやはり root に対してなされるのであって、
\&\f(CW\*(C`SUDO_USER\*(C'\fR が指定しているユーザに対してではないことに気をつけてほしい。
.PP
\&\fIsudoers\fR は認証情報の一時保存 (credential caching) のために
タイムスタンプ・ファイルを使用する。ユーザの認証が済むと、
タイムスタンプが更新され、ユーザはしばらくの間 (\fItimeout\fR
オプションによって変更されていなければ、\f(CW\*(C`5\*(C'\fR 分間)
パスワードなしで \fBsudo\fR を使うことができる。デフォルトでは、
\&\fIsudoers\fR は tty ごとのタイムスタンプを使用する。すなわち、
ユーザの各ログイン・セッションごとに別のタイムスタンプが存在するわけだ。
\&\fItty_tickets\fR オプションを無効にすれば、
あるユーザのすべてのセッションに対して、
単一のタイムスタンプの使用を強制することができる。
.PP
\&\fIsudoers\fR は \fBsudo\fR の実行が成功したときも失敗したときも、
その事実を (エラー内容とともに) \fIsyslog\fR\|(3) や 独自のログファイル、
あるいはその両方に記録することができる。\fIsudoers\fR はデフォルトでは、
\&\fIsyslog\fR\|(3) 経由でログを記録することになっているが、
この動作はデフォルト設定の \fIsyslog\fR と \fIlogfile\fR
を使って変更することが可能だ。
.PP
\&\fIsudoers\fR はコマンドの入出力ストリームのロギングもサポートしている。
入出力ロギングは、デフォルトでは ON になっていないが、デフォルト設定の
\&\fIlog_input\fR や \fIlog_output\fR フラグを使って有効にすることができる。
コマンド・タグの \f(CW\*(C`LOG_INPUT\*(C'\fR や \f(CW\*(C`LOG_OUTPUT\*(C'\fR
を使って有効にすることも可能だ。
.SS "コマンド環境"
.IX Subsection "Command Environment"
環境変数はプログラムの動作に影響を与えることがあるので、\fIsudoers\fR は、
実行されるコマンドがユーザの環境からどんな変数を引き継ぐかについて、
制御する手段を用意している。すなわち、\fIsudoers\fR は二つの異なった方法で、
環境変数を処理することができる。
.PP
デフォルトでは \fIenv_reset\fR オプションが有効になっている。
この場合、コマンドは最小限の環境で実行されることになるが、その環境には、
\&\f(CW\*(C`TERM\*(C'\fR, \f(CW\*(C`PATH\*(C'\fR, \f(CW\*(C`HOME\*(C'\fR,
\&\f(CW\*(C`MAIL\*(C'\fR, \f(CW\*(C`SHELL\*(C'\fR, \f(CW\*(C`LOGNAME\*(C'\fR,
\&\f(CW\*(C`USER\*(C'\fR, \f(CW\*(C`USERNAME\*(C'\fR、
及び \f(CW\*(C`SUDO_*\*(C'\fR という変数、
それに、呼び出し側のプロセスから来た変数で、\fIenv_check\fR や
\&\fIenv_keep\fR オプションによって許可されたものが含まれている。
これは、言わば、環境変数のホワイトリストである。
.PP
これに対して、\fIenv_reset\fR オプションが無効になっている場合は、
\&\fIenv_check\fR や \fIenv_delete\fR オプションによって明示的に拒否されていないかぎり、
いかなる環境変数も呼び出し側のプロセスから継承される。この場合、
\&\fIenv_check\fR や \fIenv_delete\fR はブラックリストのように振舞うわけだ。
危険性のある環境変数のすべてをブラックリストに載せることは不可能なので、
\&\fIenv_reset\fR を有効にしておくデフォルトの動作を採用することをお勧めする。
.PP
どんな場合でも、値が \f(CW\*(C`()\*(C'\fR で始まる変数は除去されるが、
それは \fBbash\fR の関数として解釈される恐れがあるからである。
\&\fBsudo\fR が許可、または拒否する環境変数のリストは、
\&\f(CW\*(C`sudo \-V\*(C'\fR を root の資格で実行したときの出力中に表示される。
.PP
たいていのオペレーティングシステムのダイナミック・リンカは、
ダイナミック・リンキングを制御する働きがある環境変数を、\fBsudo\fR もその一つである
setuid プログラムの環境から除去するようになっていることに注意してほしい。
オペレーティングシステムによって名前は様々だが、
\&\f(CW\*(C`_RLD*\*(C'\fR, \f(CW\*(C`DYLD_*\*(C'\fR, \f(CW\*(C`LD_*\*(C'\fR,
\&\f(CW\*(C`LDR_*\*(C'\fR, \f(CW\*(C`LIBPATH\*(C'\fR,
\&\f(CW\*(C`SHLIB_PATH\*(C'\fR などが、この範疇に含まれるだろう。
こうした変数は、\fBsudo\fR の実行が始まるよりも前に、環境から除去されるので、
\&\fBsudo\fR がそうした変数を保持することは不可能である。
.PP
特例として、\fBsudo\fR に \fB\-i\fR オプション (initial login)
が指定されている場合は、\fIsudoers\fR は \fIenv_reset\fR
の有効・無効にかかわらず、環境を初期化する。
環境変数 \fI\s-1DISPLAY\s0\fR, \fI\s-1PATH\s0\fR,
\&\fI\s-1TERM\s0\fR は変更されないが、\fI\s-1HOME\s0\fR, \fI\s-1MAIL\s0\fR,
\&\fI\s-1SHELL\s0\fR, \fI\s-1USER\s0\fR, \fI\s-1LOGNAME\s0\fR は、
変身対象ユーザのそれにセットされるのである。Linux や \s-1AIX\s0 システムでは、
\&\fI/etc/environment\fR の内容も取り込まれる。
それ以外の環境変数はすべて捨てられる。
.PP
最後に。\fIenv_file\fR が設定されている場合は、
そのファイルに記載されたいかなる変数も、そこで指定されている値にセットされることになる。
.SH "SUDOERS ファイルの書式"
.IX Header "SUDOERS FILE FORMAT"
\&\fIsudoers\fR ファイルは二種類のエントリから構成されている。
(要するに変数である) エイリアスと (誰が何を実行できるかを指定している)
ユーザ設定だ。
.IP "[\fB訳注\fR]:" 8
.IX Item "footnote1"
訳者としては、「エイリアス、デフォルト設定、ユーザ設定の三種類の
エントリから構成されている」と言った方が実態に合っているのではないかと思う。
.PP
一人のユーザに複数のエントリがマッチするときは、順番に適用される。
複数の指定がマッチしている箇所については、最後にマッチしたものが使用される
(それが一番明示的なマッチだとはかぎらないが)。
.PP
以下では \fIsudoers\fR の文法を拡張 Backus-Naur 記法 (\s-1EBNF\s0)
を用いて記述する。\s-1EBNF\s0 がどんなものか御存じないからといって、
あきらめないでいただきたい。わりと簡単なものだし、
以下に出てくる定義には詳しい説明を付けておきますから。
.SS "\s-1EBNF\s0 の基礎の基礎"
.IX Subsection "Quick guide to EBNF"
\&\s-1EBNF\s0 は言語の文法を記述する簡潔で厳密な方法である。
\&\s-1EBNF\s0 の個々の定義は生成規則からできている。たとえば、
.PP
.Vb 1
\& シンボル ::= 定義 | 別の定義 1 | 別の定義 2 ...
.Ve
.PP
個々の生成規則は、ほかの生成規則を参照し、そのようにして言語の文法を作り上げている。
また \s-1EBNF\s0 には以下の演算子が含まれるが、
正規表現で御存じの読者も多いだろう。
だが、いわゆる「ワイルドカード」文字と混同しないでいただきたい。
あれは別の意味を持っている。
.ie n .IP "\*(C`?\*(C'" 4
.el .IP "\f(CW\*(C`?\*(C'\fR" 4
.IX Item "?"
直前のシンボル (または、シンボルのグループ) が、あってもなくてもよいことを意味する。
すなわちそのシンボルは、1 回現れてもよいし、1 回も現れないでもよい。
.ie n .IP "\*(C`*\*(C'" 4
.el .IP "\f(CW\*(C`*\*(C'\fR" 4
.IX Item "*"
直前のシンボル (または、シンボルのグループ) が 0 回以上現れる。
.ie n .IP "\*(C`+\*(C'" 4
.el .IP "\f(CW\*(C`+\*(C'\fR" 4
.IX Item "+"
直前のシンボル (または、シンボルのグループ) が 1 回以上現れる。
.PP
丸カッコを使うと、複数のシンボルをグループにまとめることができる。
なお混乱を避けるため、以下の定義で (シンボル名ではなく)
文字どおりの文字列や記号を示す場合は、それをシングルクォート ('')
で囲むことにする。
.SS "エイリアス"
.IX Subsection "Aliases"
エイリアスには四種類ある。\f(CW\*(C`User_Alias\*(C'\fR,
\&\f(CW\*(C`Runas_Alias\*(C'\fR, \f(CW\*(C`Host_Alias\*(C'\fR,
\&\f(CW\*(C`Cmnd_Alias\*(C'\fR である。
.PP
.Vb 4
\& Alias ::= \*(AqUser_Alias\*(Aq User_Alias (\*(Aq:\*(Aq User_Alias)* |
\& \*(AqRunas_Alias\*(Aq Runas_Alias (\*(Aq:\*(Aq Runas_Alias)* |
\& \*(AqHost_Alias\*(Aq Host_Alias (\*(Aq:\*(Aq Host_Alias)* |
\& \*(AqCmnd_Alias\*(Aq Cmnd_Alias (\*(Aq:\*(Aq Cmnd_Alias)*
\&
\& User_Alias ::= NAME \*(Aq=\*(Aq User_List
\&
\& Runas_Alias ::= NAME \*(Aq=\*(Aq Runas_List
\&
\& Host_Alias ::= NAME \*(Aq=\*(Aq Host_List
\&
\& Cmnd_Alias ::= NAME \*(Aq=\*(Aq Cmnd_List
\&
\& NAME ::= [A\-Z]([A\-Z][0\-9]_)*
.Ve
.PP
個々のエイリアスの定義は、次の形をとる。
.PP
.Vb 1
\& Alias_Type NAME = item1, item2, ...
.Ve
.PP
上記において、\fIAlias_Type\fR は \f(CW\*(C`User_Alias\*(C'\fR,
\&\f(CW\*(C`Runas_Alias\*(C'\fR, \f(CW\*(C`Host_Alias\*(C'\fR,
\&\f(CW\*(C`Cmnd_Alias\*(C'\fR のうちの一つである。
\&\f(CW\*(C`NAME\*(C'\fR はアルファベットの大文字、数字、
アンダースコア ('_') からなる文字列であるが、
\&\fB先頭の文字は大文字\fRでなければならない。同じタイプのエイリアス定義を、
コロンで (':') つないで、
一行に複数書くこともできる。たとえば、
.PP
.Vb 1
\& Alias_Type NAME = item1, item2, item3 : NAME = item4, item5
.Ve
.PP
以下では、エイリアスの有効な要素となるものを定義する。
.PP
.Vb 2
\& User_List ::= User |
\& User \*(Aq,\*(Aq User_List
\&
\& User ::= \*(Aq!\*(Aq* user name |
\& \*(Aq!\*(Aq* #uid |
\& \*(Aq!\*(Aq* %group |
\& \*(Aq!\*(Aq* %#gid |
\& \*(Aq!\*(Aq* +netgroup |
\& \*(Aq!\*(Aq* %:nonunix_group |
\& \*(Aq!\*(Aq* %:#nonunix_gid |
\& \*(Aq!\*(Aq* User_Alias
.Ve
.PP
\&\f(CW\*(C`User_List\*(C'\fR を構成するのは、一個以上の次のものである。
ユーザ名、ユーザ ID (接頭辞 '#' が付く)、システムグループ名やその ID
(それぞれ、接頭辞 '%' と '%#' が付く)、ネットグループ名 (接頭辞 '+' が付く)、
非 Unix グループ名やその ID (それぞれ、接頭辞 '%:' と '%:#' が付く)、
それに \f(CW\*(C`User_Alias\*(C'\fR。
リストの各項目の前には一個以上の '!' 演算子を付けてもよい。
奇数個の '!' はその項目の値を否定する。偶数個の場合は互い相殺されるだけだ。
.PP
ユーザ名、\f(CW\*(C`uid\*(C'\fR、グループ名、\f(CW\*(C`gid\*(C'\fR、
ネットグループ名、非 Unix グループ名、非 Unix グループ の
\&\f(CW\*(C`gid\*(C'\fR は、ダブルクォートで囲めば、
特殊文字をエスケープしないですむ。
ダブルクォートで囲まずに特殊文字を使いたいなら、
エスケープした 16 進数を指定してやればよい。たとえば、
スペースなら \ex20 という具合だ。ダブルクォートを使用する場合は、
接頭辞があれば、それをダブルクォートの内側に入れなければならない。
.PP
非 Unix グループやその \f(CW\*(C`gid\*(C'\fR の書式が、
実際にどんなものになるかは、利用するグループ・プロバイダ・プラグイン
(group provider plugin) 次第である (後述する \fIgroup_plugin\fR
オプションの説明も見てほしい)。たとえば、
\&\s-1QAS\s0 (\s-1Quest Authentication Services\s0) の \s-1AD\s0 プラグインは、
以下の書式をサポートしている。
.IP "\(bu" 4
同じドメインのグループ: \*(L"Group Name\*(R"
.IP "\(bu" 4
任意のドメインのグループ: \*(L"Group Name@FULLY.QUALIFIED.DOMAIN\*(R"
.IP "\(bu" 4
グループ \s-1SID:\s0 \*(L"S\-1\-2\-34\-5678901234\-5678901234\-5678901234\-567\*(R"
.PP
グループ名を囲む引用符は任意であることに注意してほしい。
文字列を引用符で囲まない場合は、スペースや特殊文字をエスケープするために、
バックスラッシュ (\e) を使わなければならない。
エスケープする必要がある文字のリストについては、
「ほかの特殊文字と予約語」のセクションをご覧になってほしい。
.PP
.Vb 2
\& Runas_List ::= Runas_Member |
\& Runas_Member \*(Aq,\*(Aq Runas_List
\&
\& Runas_Member ::= \*(Aq!\*(Aq* user name |
\& \*(Aq!\*(Aq* #uid |
\& \*(Aq!\*(Aq* %group |
\& \*(Aq!\*(Aq* %#gid |
\& \*(Aq!\*(Aq* %:nonunix_group |
\& \*(Aq!\*(Aq* %:#nonunix_gid |
\& \*(Aq!\*(Aq* +netgroup |
\& \*(Aq!\*(Aq* Runas_Alias
.Ve
.PP
\&\f(CW\*(C`Runas_List\*(C'\fR は \f(CW\*(C`User_List\*(C'\fR に似ている。
違うのは、\f(CW\*(C`User_Alias\*(C'\fR ではなく、
\&\f(CW\*(C`Runas_Alias\*(C'\fR が使えることだ。
ユーザ名やグループ名のマッチは文字列として行われることに気を付けてほしい。
言い換えると、二つのユーザ名 (あるいはグループ名) は、かりに同じ uid (gid)
を持っていても、別個のものと見なされるのである。
だから、もし同じ uid を持ったすべてのユーザ名にマッチさせたかったら
(たとえば、root と toor がそうだとしよう)、ユーザ名の代わりに
uid を使えばよい (この例なら、#0 である)。
.PP
.Vb 2
\& Host_List ::= Host |
\& Host \*(Aq,\*(Aq Host_List
\&
\& Host ::= \*(Aq!\*(Aq* host name |
\& \*(Aq!\*(Aq* ip_addr |
\& \*(Aq!\*(Aq* network(/netmask)? |
\& \*(Aq!\*(Aq* +netgroup |
\& \*(Aq!\*(Aq* Host_Alias
.Ve
.PP
\&\f(CW\*(C`Host_List\*(C'\fR は一個以上の、ホスト名、\s-1IP\s0 アドレス、
ネットワークアドレス、ネットグループ名 (接頭辞 '+' が付く)、
および他のエイリアスからなる。ここでもまた、'!' 演算子を付けて、
項目の値を否定することができる。
ネットワークアドレスにネットマスクを指定しなかった場合は、
\&\fBsudo\fR がローカルホストのネットワークインターフェースを一つ一つ参照し、
指定されたネットワークアドレスと同じアドレスを持つインターフェースがあれば、
そのネットマスクを使用することになる。ネットマスクの指定は、
標準の \s-1IP\s0 アドレス表記 (たとえば 255.255.255.0 とか
ffff:ffff:ffff:ffff:: とか) でもよく、\&\s-1CIDR\s0 表記 (ビット数、
たとえば 24 とか 64 とか) でもよい。
ホスト名の一部にシェル風のワイルドカードを使用することができるが
(下記の「ワイルドカード」セクションを参照)、使用マシンの
\&\f(CW\*(C`hostname\*(C'\fR コマンドが完全修飾ドメイン名 (FQDN) を返さない場合、
ワイルドカードを利用するには \fIfqdn\fR オプションを使う必要がある。
なお、\fBsudo\fR がチェックするのは、
実在のネットワークインターフェースだけだということに留意してほしい。
すなわち、\s-1IP\s0 アドレス 127.0.0.1 (localhost)
がマッチすることは、絶対にないのである。
また、\*(L"localhost\*(R" というホスト名がマッチするのは、
それが実際のホスト名であるときだけであり、
それは通常、ネットワークにつながっていないシステムの場合にしか当てはまらない。
.PP
.Vb 2
\& Cmnd_List ::= Cmnd |
\& Cmnd \*(Aq,\*(Aq Cmnd_List
\&
\& commandname ::= file name |
\& file name args |
\& file name \*(Aq""\*(Aq
\&
\& Cmnd ::= \*(Aq!\*(Aq* commandname |
\& \*(Aq!\*(Aq* directory |
\& \*(Aq!\*(Aq* "sudoedit" |
\& \*(Aq!\*(Aq* Cmnd_Alias
.Ve
.PP
\&\f(CW\*(C`Cmnd_List\*(C'\fR は一個以上の、コマンド名、ディレクトリ、
他のエイリアスからなるリストである。コマンド名は絶対パスのファイル名であり、
シェル風のワイルドカードを含んでいても構わない
(下記の「ワイルドカード」セクションを参照)。単にファイル名だけ指定した場合、
ユーザはお望みのどんな引き数でも付けてそのコマンドを実行することができる。
とは言え、コマンドライン引き数を (ワイルドカードを含めて)
指定しても構わないし、また、引き数に \f(CW""\fR を指定して、そのコマンドは
\&\fBコマンドライン引き数なし\fRの実行のみが可能だと指示することもできる。
ディレクトリは '/' で終わる絶対パス名である。
\&\f(CW\*(C`Cmnd_List\*(C'\fR にディレクトリを指定すると、
ユーザーはそのディレクトリ内の任意のファイルを実行できるようになる
(だが、そのサブディレクトリにあるファイルは実行できない)。
.PP
\&\f(CW\*(C`Cmnd\*(C'\fR がコマンドライン引き数を伴っている場合は、
\&\f(CW\*(C`Cmnd\*(C'\fR 中の引き数は、
ユーザがコマンドラインに打ち込む引き数と正確に一致しなければならない
(Cmnd 中の引き数にワイルドカードがあるならば、
それがコマンドラインの引き数とマッチしなければならない)。
以下に挙げる文字をコマンド引き数の中で用いるときは、
\&'\e' によってエスケープしなければならないことに注意してほしい。
\&',', ':', '=', '\e' がそれである。
\&\f(CW"sudoedit"\fR という特別なコマンド名は、ユーザが \fBsudo\fR を
\&\fB-e\fR オプション付きで (あるいは、\fBsudoedit\fR というコマンド名で)
実行することを許可するために使用される。この場合、
コマンドライン引き数を取ることができるのは、普通のコマンドとまったく同様である。
.SS "デフォルト設定 (Defaults)"
.IX Subsection "Defaults"
かなりの設定オプションが、一行以上の \f(CW\*(C`Default_Entry\*(C'\fR
行を使うことで実行時にデフォルトの値から変更可能だ。その効果の及ぶ範囲は、
任意のホストのすべてのユーザにすることもできるし、
ある特定のホストのすべてのユーザ、ある特定のユーザ、ある特定のコマンド、
ある特定のユーザとして実行するコマンドなどに限定することもできる。
気を付けてほしいのは、コマンドに限定した
Defaults 行にコマンドライン引き数まで書くことができないことだ。
引き数を指定する必要がある場合は、\f(CW\*(C`Cmnd_Alias\*(C'\fR を定義して、
代わりにそれを参照すればよい。
.PP
.Vb 5
\& Default_Type ::= \*(AqDefaults\*(Aq |
\& \*(AqDefaults\*(Aq \*(Aq@\*(Aq Host_List |
\& \*(AqDefaults\*(Aq \*(Aq:\*(Aq User_List |
\& \*(AqDefaults\*(Aq \*(Aq!\*(Aq Cmnd_List |
\& \*(AqDefaults\*(Aq \*(Aq>\*(Aq Runas_List
\&
\& Default_Entry ::= Default_Type Parameter_List
\&
\& Parameter_List ::= Parameter |
\& Parameter \*(Aq,\*(Aq Parameter_List
\&
\& Parameter ::= Parameter \*(Aq=\*(Aq Value |
\& Parameter \*(Aq+=\*(Aq Value |
\& Parameter \*(Aq\-=\*(Aq Value |
\& \*(Aq!\*(Aq* Parameter
.Ve
.PP
パラメータは\fBフラグ\fR、\fB整数値\fR、\fB文字列\fR、
\&\fBリスト\fRのどれでもよい。フラグは要するにブーリアン (真偽値) であり、
\&'!' 演算子で off にできる。整数値、文字列、リストのパラメータにも、
真偽値として使用して、それを無効にできるものがいくつか存在する。
パラメータの値が複数の単語を含むときは、値をダブルクオート
(\f(CW\*(C`"\*(C'\fR) で囲むとよい。特殊文字はバックスラッシュ
(\f(CW\*(C`\e\*(C'\fR) でエスケープすることができる。
.PP
リストには代入演算子が \f(CW\*(C`\=\*(C'\fR のほかにもう二つある。
\&\f(CW\*(C`+=\*(C'\fR と \f(CW\*(C`\-=\*(C'\fR である。こうした演算子は、
それぞれ、リストに付け加えたり、リストから削除したりするのに使用する。
\&\f(CW\*(C`\-=\*(C'\fR 演算子を使って、
リストに存在しない要素を消去しようとしても、エラーにはならない。
.PP
Defaults 行の解析は、次の順序で行われる。最初に汎用、Host、
User の Defaults が解析され、それから Runas の Defaults、最後にコマンドの
Defaults の順番になる。
.PP
Defaults 行で使用できるパラメータのリストについては、
「SUDOERS のオプション」を御覧いただきたい。
.SS "ユーザ設定 (User Specification)"
.IX Subsection "User Specification"
.Vb 2
\& User_Spec ::= User_List Host_List \*(Aq=\*(Aq Cmnd_Spec_List \e
\& (\*(Aq:\*(Aq Host_List \*(Aq=\*(Aq Cmnd_Spec_List)*
\&
\& Cmnd_Spec_List ::= Cmnd_Spec |
\& Cmnd_Spec \*(Aq,\*(Aq Cmnd_Spec_List
\&
.ie \n(SL \& Cmnd_Spec ::= Runas_Spec? SELinux_Spec? Tag_Spec* Cmnd
.el \& Cmnd_Spec ::= Runas_Spec? Tag_Spec* Cmnd
\&
\& Runas_Spec ::= \*(Aq(\*(Aq Runas_List? (\*(Aq:\*(Aq Runas_List)? \*(Aq)\*(Aq
\&
.if \n(SL \{\
\& SELinux_Spec ::= (\*(AqROLE=role\*(Aq | \*(AqTYPE=type\*(Aq)
\&
\}
\& Tag_Spec ::= (\*(AqNOPASSWD:\*(Aq | \*(AqPASSWD:\*(Aq | \*(AqNOEXEC:\*(Aq | \*(AqEXEC:\*(Aq |
\& \*(AqSETENV:\*(Aq | \*(AqNOSETENV:\*(Aq | \*(AqLOG_INPUT:\*(Aq | \*(AqNOLOG_INPUT:\*(Aq |
\& \*(AqLOG_OUTPUT:\*(Aq | \*(AqNOLOG_OUTPUT:\*(Aq)
.Ve
.PP
\&\fBユーザ設定\fRは、あるユーザが、指定されたホストで (どのユーザに変身して)
どのコマンドを実行できるかを決定する。デフォルトでは、コマンドは \fBroot\fR
に変身して実行されるが、これはコマンドごとに変更することができる。
.PP
ユーザ設定の基本構造は、
.PP
.Vb 2
\& who where = (as_whom) what
\& [誰が どのホストで = (誰に変身して) 何を]
.Ve
.PP
である。構成部分に分けて説明しよう。
.SS "Runas_Spec (どのユーザやグループに変身できるか)"
.IX Subsection "Runas_Spec"
\&\f(CW\*(C`Runas_Spec\*(C'\fR は変身の対象となるユーザやグループを規定している。
完全な形の \f(CW\*(C`Runas_Spec\*(C'\fR は、(上で定義しているように)
コロン (':') で区切られ、
カッコで囲まれた、二つの \f(CW\*(C`Runas_List\*(C'\fR からなっている。
一つ目の \f(CW\*(C`Runas_List\*(C'\fR は、\fBsudo\fR で
\&\fB\-u\fR オプションを使ったときに変身できるユーザを指している。
二番目の方が規定しているのは、\fBsudo\fR の \fB\-g\fR
オプションによって指定できるグループのリストだ。
両方の \f(CW\*(C`Runas_List\*(C'\fR が指定されている場合は、
それぞれの \f(CW\*(C`Runas_List\*(C'\fR
にリストされているユーザとグループの任意の組み合わせで、
コマンドを実行することができる。
一つ目の \f(CW\*(C`Runas_List\*(C'\fR だけが指定されているときは、
リスト中のいかなるユーザにでも変身してコマンドを実行できるが、
\&\fB\-g\fR オプションを指定することはできない。
一つ目の \f(CW\*(C`Runas_List\*(C'\fR が空で、二番目だけ指定されている場合は、
\&\fBsudo\fR を実行するユーザの資格で、グループを
\&\f(CW\*(C`Runas_List\*(C'\fR にリストされている任意のグループに設定して、
コマンドを実行することができる。
\&\f(CW\*(C`Runas_Spec\*(C'\fR がまったく指定されていないときは、
\&\fBroot\fR としてコマンドを実行できるが、グループを指定することはできない。
.PP
\&\f(CW\*(C`Runas_Spec\*(C'\fR は、
それに続くコマンドに対してデフォルトを定める。それはどういうことかと言うと、
次のようなエントリがあったとしよう。
.PP
.Vb 1
\& dgb boulder = (operator) /bin/ls, /bin/kill, /usr/bin/lprm
.Ve
.PP
ユーザ \fBdgb\fR は \fI/bin/ls\fR, \fI/bin/kill\fR,
\&\fI/usr/bin/lprm\fR を実行することができる。ただし、\fBoperator\fR
として実行できるだけだ。たとえば、次のようにである。
.PP
.Vb 1
\& $ sudo \-u operator /bin/ls
.Ve
.PP
エントリの後ろの方の \f(CW\*(C`Runas_Spec\*(C'\fR を変更することも可能だ。
上のエントリをこんなふうに書き変えたとしよう。
.PP
.Vb 1
\& dgb boulder = (operator) /bin/ls, (root) /bin/kill, /usr/bin/lprm
.Ve
.PP
すると、ユーザ \fBdgb\fR は、\fI/bin/ls\fR こそ \fBoperator\fR としてだが、
\&\fI/bin/kill\fR や \fI/usr/bin/lprm\fR は
\&\fBroot\fR の資格で実行できるようになる。
.PP
\&\fBdgb\fR が \f(CW\*(C`/bin/ls\*(C'\fR を実行するとき、
変身対象ユーザとグループのどちらでも \fBoperator\fR にできるように、
この記述を拡張することもできる。
.PP
.Vb 2
\& dgb boulder = (operator : operator) /bin/ls, (root) /bin/kill, \e
\& /usr/bin/lprm
.Ve
.PP
注意してほしいが、\f(CW\*(C`Runas_Spec\*(C'\fR のグループの部分は、
コマンドをそのグループとして実行することをユーザに許可しているのであって、
そうすることをユーザに強制しているのではない。コマンドラインで
グループを指定しない場合は、コマンドは、パスワード・データベースにある
変身対象ユーザのエントリに登録されているグループとして
実行されることになるのだ。以下のコマンドはすべて、上記の sudoers
エントリによって許可されることになるだろう。
.PP
.Vb 3
\& $ sudo \-u operator /bin/ls
\& $ sudo \-u operator \-g operator /bin/ls
\& $ sudo \-g operator /bin/ls
.Ve
.PP
次の例では、ユーザ \fBtcm\fR が
モデムのデバイスファイルにアクセスするコマンドを
dialer グループとして実行できるようにしている。
.PP
.Vb 2
\& tcm boulder = (:dialer) /usr/bin/tip, /usr/bin/cu, \e
\& /usr/local/bin/minicom
.Ve
.PP
この例では、グループしか指定できないことに注意してほしい。コマンドは
ユーザ \fBtcm\fR の資格のまま実行されるのである。たとえば、次のように。
.PP
.Vb 1
\& $ sudo \-g dialer /usr/bin/cu
.Ve
.PP
\&\f(CW\*(C`Runas_Spec\*(C'\fR には複数のユーザやグループが存在してもよい。
その場合、ユーザは \fB\-u\fR や \fB\-g\fR オプションを使って、
ユーザとグループのどんな組み合わせでも選択することができる。
.PP
.Vb 1
\& alan ALL = (root, bin : operator, system) ALL
.Ve
.PP
この例では、ユーザ \fBalan\fR は root と bin ユーザのどちらに変身して、
任意のコマンドを実行することもできる。また、グループを
operator や system に設定することも自由である。
.if \n(SL \{\
.SS "SELinux_Spec"
.IX Subsection "SELinux_Spec"
SELinux をサポートするシステムでは、\fIsudoers\fR のエントリで
SELinux の role や type をコマンドに関連付けることも可能である。
コマンドについて指定した role や type は、\fIsudoers\fR 中で
role や type にデフォルトの値が設定されていても、それよりも優先される。
もっとも、role や type をコマンドラインで指定すれば、
そちらが \fIsudoers\fR 中の値よりさらに優先されることになる。
\}
.SS "Tag_Spec"
.IX Subsection "Tag_Spec"
コマンドは 0 個以上のタグを伴うことができる。使用できるタグの値は 10 個あり、
\&\f(CW\*(C`NOPASSWD\*(C'\fR, \f(CW\*(C`PASSWD\*(C'\fR,
\&\f(CW\*(C`NOEXEC\*(C'\fR, \f(CW\*(C`EXEC\*(C'\fR,
\&\f(CW\*(C`SETENV\*(C'\fR, \f(CW\*(C`NOSETENV\*(C'\fR,
\&\f(CW\*(C`LOG_INPUT\*(C'\fR, \f(CW\*(C`NOLOG_INPUT\*(C'\fR,
\&\f(CW\*(C`LOG_OUTPUT\*(C'\fR, \f(CW\*(C`NOLOG_OUTPUT\*(C'\fR
が、それである。ある \f(CW\*(C`Cmnd\*(C'\fR にタグをセットすると、
\&\f(CW\*(C`Cmnd_Spec_List\*(C'\fR 中のそれ以後の
\&\f(CW\*(C`Cmnd\*(C'\fR は、反対の意味を持つタグによって変更されないかぎり、
そのタグを継承することになる (すなわち、\f(CW\*(C`PASSWD\*(C'\fR は
\&\f(CW\*(C`NOPASSWD\*(C'\fR を上書きし、\f(CW\*(C`NOEXEC\*(C'\fR は
\&\f(CW\*(C`EXEC\*(C'\fR を上書きする)。
.PP
\fI\s-1NOPASSWD\s0 と \s-1PASSWD\s0\fR
.IX Subsection "NOPASSWD and PASSWD"
.PP
デフォルトでは、\fBsudo\fR はコマンドを実行する前に、
ユーザが本人であることを証明するように求める。この振舞いは
\&\f(CW\*(C`NOPASSWD\*(C'\fR タグによって変更することができる。
\&\f(CW\*(C`Runas_Spec\*(C'\fR と同様、\f(CW\*(C`NOPASSWD\*(C'\fR タグも
\&\f(CW\*(C`Cmnd_Spec_List\*(C'\fR 中のそれに続くコマンドに対して
デフォルトを定める。
\&\f(CW\*(C`PASSWD\*(C'\fR の働きは反対であり、
振舞いを元に戻したいときに使える。たとえば、
.PP
.Vb 1
\& ray rushmore = NOPASSWD: /bin/kill, /bin/ls, /usr/bin/lprm
.Ve
.PP
とすれば、ユーザ \fBray\fR はマシン rushmore 上で認証をしないでも
\&\fBroot\fR として \fI/bin/kill\fR, \fI/bin/ls\fR,
\&\fI/usr/bin/lprm\fR を実行できるようになる。もし \fBray\fR
がパスワードなしで実行できるコマンドを \fI/bin/kill\fR だけに絞りたいのなら、
エントリはこうなるだろう。
.PP
.Vb 1
\& ray rushmore = NOPASSWD: /bin/kill, PASSWD: /bin/ls, /usr/bin/lprm
.Ve
.PP
ただし、ユーザが \fIexempt_group\fR オプションで指定されているグループに属する場合は、
\&\f(CW\*(C`PASSWD\*(C'\fR タグが効果を持たないことに注意してほしい。
.PP
デフォルトでは、現在使用中のホストに関するユーザのエントリのうちに
\&\f(CW\*(C`NOPASSWD\*(C'\fR タグが指定されているものが一つでもあれば、
そのユーザはパスワードなしで \f(CW\*(C`sudo \-l\*(C'\fR を実行できる。
なお、ユーザがパスワードなしで \f(CW\*(C`sudo \-v\*(C'\fR を実行できるのは、
現在使用中のホストに関するそのユーザのエントリのすべてで
\&\f(CW\*(C`NOPASSWD\*(C'\fR タグが生きているときのみである。この動作は、
\&\fIverifypw\fR や \fIlistpw\fR オプションによって変更できる。
.PP
\fI\s-1NOEXEC\s0 と \s-1EXEC\s0\fR
.IX Subsection "NOEXEC and EXEC"
.PP
\&\fBsudo\fR が \fInoexec\fR サポートつきでコンパイルされ、
使用しているオペレーティングシステムがそれに対応している場合、
\&\f(CW\*(C`NOEXEC\*(C'\fR タグを利用すれば、動的にリンクされた実行ファイルが
そこからさらにコマンドを実行するのを防ぐことができる。
.PP
次の例では、ユーザ \fBaaron\fR は \fI/usr/bin/more\fR と
\&\fI/usr/bin/vi\fR を実行できるが、シェル・エスケープは利用できない。
.PP
.Vb 1
\& aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
.Ve
.PP
\&\f(CW\*(C`NOEXEC\*(C'\fR がどんなふうに働くのか、お使いのシステムで利用できるかどうか、
などについてさらに詳しく知りたかったら、
「シェル・エスケープを防止する」のセクションを御覧になるとよい。
.PP
\fI\s-1SETENV\s0 と \s-1NOSETENV\s0\fR
.IX Subsection "SETENV and NOSETENV"
.PP
上記のタグは \fIsetenv\fR オプションの値をコマンドごとに変更する。
あるコマンドに対して \f(CW\*(C`SETENV\*(C'\fR を設定すると、
ユーザがコマンドラインから \fB\-E\fR オプションを使用して、
\fIenv_reset\fR オプションを無効にできるようになることに注意してほしい。
それだけではない。コマンドラインから設定する環境変数が \fIenv_check\fR,
\&\fIenv_delete\fR, \fIenv_keep\fR による規制を受けないようにもなる。
それ故、こうした形で環境変数を設定することを許可するのは、
信用できるユーザだけに限るべきである。なお、マッチするコマンドが
\&\fB\s-1ALL\s0\fR だった場合は、暗黙のうちに \f(CW\*(C`SETENV\*(C'\fR
タグがそのコマンドに付けられるが、このデフォルトの動作は
\&\f(CW\*(C`UNSETENV\*(C'\fR タグを使えば打ち消すことができる。
.PP
\fI\s-1LOG_INPUT\s0 と \s-1NOLOG_INPUT\s0\fR
.IX Subsection "LOG_INPUT and NOLOG_INPUT"
.PP
この二つのタグは \fIlog_input\fR オプションの値をコマンドごとに変更する。
詳しい情報については、後述する「SUDOERS のオプション」セクションの
\&\fIlog_input\fR の説明をご覧になっていただきたい。
.PP
\fI\s-1LOG_OUTPUT\s0 と \s-1NOLOG_OUTPUT\s0\fR
.IX Subsection "LOG_OUTPUT and NOLOG_OUTPUT"
.PP
この二つのタグは \fIlog_output\fR オプションの値をコマンドごとに変更する。
詳しい情報については、後述する「SUDOERS のオプション」セクションの
\&\fIlog_output\fR の説明をご覧になっていただきたい。
.SS "ワイルドカード"
.IX Subsection "Wildcards"
\&\fIsudoers\fR ファイルでは、ホスト名、コマンドラインのパス名、
コマンドラインの引き数にシェル形式のワイルドカード (メタ文字とか
glob キャラクタとも言う) が使用できる。ワイルドカードのマッチングは
\&\fB\s-1POSIX\s0\fR の \fIglob\fR\|(3) と \fIfnmatch\fR\|(3)
ルーティンを用いて行われる。
\&\fB以下のものは正規表現ではない\fRことに注意してほしい。
.ie n .IP "\*(C`*\*(C'" 8
.el .IP "\f(CW\*(C`*\*(C'\fR" 8
.IX Item "*"
ゼロ個以上の任意の文字にマッチする。
.ie n .IP "\*(C`?\*(C'" 8
.el .IP "\f(CW\*(C`?\*(C'\fR" 8
.IX Item "?"
任意の一文字にマッチする。
.ie n .IP "\*(C`[...]\*(C'" 8
.el .IP "\f(CW\*(C`[...]\*(C'\fR" 8
.IX Item "[...]"
指定された範囲の任意の一文字にマッチする。
.ie n .IP "\*(C`[!...]\*(C'" 8
.el .IP "\f(CW\*(C`[!...]\*(C'\fR" 8
.IX Item "[!...]"
指定された範囲\fB以外\fRの任意の一文字にマッチする。
.ie n .IP "\*(C`\ex\*(C'" 8
.el .IP "\f(CW\*(C`\ex\*(C'\fR" 8
.IX Item "x"
\&\*(L"x\*(R" がどんな文字であっても、\*(L"x\*(R" そのものとして評価する。
この表記法は \*(L"*\*(R", \*(L"?\*(R", \*(L"[\*(R", \*(L"}\*(R"
といった特殊文字をエスケープするために使用される。
.PP
使用システムの \fIglob\fR\|(3) や \fIfnmatch\fR\|(3) 関数が
\&\s-1POSIX\s0 の文字クラスに対応しているなら、文字クラスも使用できる。
ただし、\f(CW\*(Aq:\*(Aq\fR 文字は、
\&\fIsudoers\fR で特別な意味を持っているので、エスケープしなければならない。
一例を上げると、
.PP
.Vb 1
\& /bin/ls [[\e:alpha\e:]]*
.Ve
.PP
上記は、文字で始まるどんなファイル名にもマッチするだろう。
.PP
コマンドのパス名に使われたワイルドカードはフォワードスラッシュ ('/')
に\fBマッチしない\fRことに注意してほしい。
だが、コマンドライン引き数とのマッチングでは、
ワイルドカードはスラッシュと\fBしっかりマッチする\fR。そこで、
.PP
.Vb 1
\& /usr/bin/*
.Ve
.PP
というコマンドパスは、\fI/usr/bin/who\fR とマッチするが、
\&\fI/usr/bin/X11/xterm\fR とはマッチしないことになる。
.SS "ワイルドカード・ルールの例外"
.IX Subsection "Exceptions to wildcard rules"
上記ルールには次の例外がある。
.ie n .IP """""" 8
.el .IP "\f(CW``''\fR" 8
.IX Item """"""
\&\fIsudoers\fR ファイルのエントリにおいて、空文字列 \f(CW""\fR
が唯一のコマンドライン引き数だった場合は、
そのコマンドは引数を\fB付けずに\fR実行しなければならないことを意味する。
.SS "sudoers に他のファイルをインクルードする"
.IX Subsection "Including other files from within sudoers"
\&\f(CW\*(C`#include\*(C'\fR 命令や \f(CW\*(C`#includedir\*(C'\fR
命令を使えば、現在解析中の \fIsudoers\fR ファイルに、外部にあるほかの
\&\fIsudoers\fR ファイルをインクルードすることができる。
.PP
この方法を使えば、たとえば、
サイト全体で使用する \fIsudoers\fR ファイルのほかに、
マシンごとのローカルな \fIsudoers\fR ファイルを持つことができる。
ここでは、サイト全体の \fIsudoers\fR を \fI/etc/sudoers\fR とし、
マシンごとの方は \fI/etc/sudoers.local\fR とすることにしよう。
\&\fI/etc/sudoers\fR に \fI/etc/sudoers.local\fR をインクルードするには、
\&\fI/etc/sudoers\fR 中に次の行を書き込む。
.Sp
.RS 4
\&\f(CW\*(C`#include /etc/sudoers.local\*(C'\fR
.RE
.PP
\&\fBsudo\fR は解析中この行に出会うと、カレントファイル
(\fI/etc/sudoers\fR だ) の処理を一時中止し、処理の対象を
\&\fI/etc/sudoers.local\fR に切り替える。そして、
\&\fI/etc/sudoers.local\fR の末尾まで達したら、\fI/etc/sudoers\fR
の残りを処理するのだ。
インクルードされたファイルがさらに他のファイルをインクルードしてもよい。
インクルートのネストには 128 ファイルまでというハード・リミットがあって、
インクルードファイルのループが起きないようになっている。
.PP
インクルードファイルのパスが絶対パスでない場合は (すなわち、パスが
\&\fI/\fR で始まっていない場合は)、インクルードする側の sudoers
ファイルと同じディレクトリに、インクルードされるファイルも存在しなければならない。
たとえば、
\&\fI/etc/sudoers\fR に次のような行があったら、
.Sp
.RS 4
\&\f(CW\*(C`#include sudoers.local\*(C'\fR
.RE
.PP
インクルードされるファイルは、\fI/etc/sudoers.local\fR である。
(訳注: インクルードファイルのディレクトリ部分を省略できるのは、
sudo-1.8.4 以上である。sudo-1.8.3 以前では、絶対パスで指定しなければならない。)
.PP
なお、ファイル名には \f(CW%h\fR エスケープが使える。
これはホスト名の短縮形を示している。
たとえば、マシンのホスト名が \*(L"xerxes\*(R" のとき、
.Sp
.RS 4
\&\f(CW\*(C`#include /etc/sudoers.%h\*(C'\fR
.RE
.PP
と書けば、\fBsudo\fR はファイル \fI/etc/sudoers.xerxes\fR
をインクルードすることになる。
.PP
\&\f(CW\*(C`#includedir\*(C'\fR 命令を使えば、
\&\fIsudo.d\fR ディレクトリを作っておいて、
システムのパッケージ管理者がパッケージをインストールする際に
\&\fIsudoers\fR のルールを記したファイルをそこに入れてやる、
といったことが可能になる。たとえば、
次のように書くと、
.Sp
.RS 4
\&\f(CW\*(C`#includedir /etc/sudoers.d\*(C'\fR
.RE
.PP
\&\fBsudo\fR は \fI/etc/sudoers.d\fR にあるファイルを一つづつ読み込む。
ただし、末尾が \f(CW\*(C`~\*(C'\fR だったり、
\&\f(CW\*(C`.\*(C'\fR 文字を含んでいたりするファイル名はスキップするが、
これは、パッケージマネージャやエディタが作った、
テンポラリファイルやバックアップファイルを読み込むような問題を起こさないためである。
ファイルは辞書順にソートされて、解析される。
すなわち、\fI/etc/sudoers.d/01_first\fR は \fI/etc/sudoers.d/10_second\fR
より前に解析されるということだ。ソートは辞書順であって、数値の順ではないので、
\&\fI/etc/sudoers.d/1_whoops\fR というファイルがあっても、
\&\fI/etc/sudoers.d/10_second\fR
\&\fBより後で\fRロードされることに注意してほしい。
ファイル名の先頭を 0 で埋めて数字の桁を揃えれば、
こうした問題を回避することができる。
.PP
気を付けてほしいが、
\&\f(CW\*(C`#include\*(C'\fR でインクルードされたファイルとは違って
(訳注: \fBvisudo\fR は \fI/etc/sudoers\fR を編集するとき、
\&\f(CW\*(C`#include\*(C'\fR で指定したファイルがあれば、続けてそれも編集する)、
\&\fBvisudo\fR が \f(CW\*(C`#includedir\*(C'\fR
で指定したディレクトリのファイルまで編集するのは、
シンタクスエラーを含むものがあるときだけである。
とは言え、\fBvisudo\fR を \f(CW\*(C`\-f\*(C'\fR オプション付きで実行して、
ディレクトリ中のファイルを直接編集することは可能だ。
.SS "ほかの特殊文字と予約語"
.IX Subsection "Other special characters and reserved words"
パウンド記号 ('#') はコメントを示すのに使用される
(例外は、#include 命令の一部であるときや、ユーザ名に関連して現れ、
その後に一個以上の数字が続くときであり、後者の場合は uid と見なされる)。
コメント記号とそれに続くテキストは、行末にいたるまで無視される。
.PP
予約語 \fB\s-1ALL\s0\fR は組込みのエイリアスであり、何に対してでもマッチする。
\&\fB\s-1ALL\s0\fR は、\f(CW\*(C`Cmnd_Alias\*(C'\fR,
\&\f(CW\*(C`User_Alias\*(C'\fR, \f(CW\*(C`Runas_Alias\*(C'\fR,
\&\f(CW\*(C`Host_Alias\*(C'\fR を代わりに使えるところなら、
どこでも使用できる。\fB\s-1ALL\s0\fR
という名前のエイリアスを自分で定義しようとしてはいけない。
組込みのエイリアスの方が、自分で作ったエイリアスより優先して使われるからだ。
\&\fB\s-1ALL\s0\fR の使用には危険が伴うことがあるのを忘れないでいただきたい。
なぜなら、\fB\s-1ALL\s0\fR をコマンドに関して使うと、
ユーザにシステム上の\fBどんな\fRコマンドでも実行することを許してしまうからである。
.PP
エクスクラメーションマーク ('!') は、エイリアスでも
\&\f(CW\*(C`Cmnd\*(C'\fR の前でも論理 \fInot\fR 演算子として使用できる。
これによってある値を除外することが可能だ。しかしながら、
組込みエイリアス \f(CW\*(C`ALL\*(C'\fR と \f(CW\*(C`!\*(C'\fR
を組み合わせて、「二三のコマンド以外のすべての」コマンドの実行を
あるユーザに許可しようとしても、
思いどおりの動きになることはめったにないことに気を付けてほしい
(下記の「セキュリティに関する注意点」を参照)。
.PP
長い行は、行末にバックスラッシュ ('\e') を置けば、継続することができる。
.PP
リストにおける要素間やユーザ設定における構文用特殊文字
('=', ':', '(', ')') の前後に空白文字 (whitespace)を入れることは、
任意である。
.PP
次の文字を単語 (ユーザ名とかホスト名とか) の一部として使うときは、
バックスラッシュ ('\e') でエスケープしなければならない。
\&'!', '=', ':', ',', '(', ')', '\e' がそれである。
.SH "SUDOERS のオプション"
.IX Header "SUDOERS OPTIONS"
すでに説明したように、\fBsudo\fR の動作は
\&\f(CW\*(C`Default_Entry\*(C'\fR 行によって変更することができる。
Defaults に与えることのできるパラメータについて、
サポートされているもののすべてを、タイプ別にまとめて以下に列挙する。
.PP
\&\fBフラグ (真偽値)\fR:
.IP "always_set_home" 16
.IX Item "always_set_home"
これを有効にすると、\fBsudo\fR は環境変数 \f(CW\*(C`HOME\*(C'\fR
を変身対象ユーザの (\fB\-u\fR オプションが使用されないかぎり、root である)
ホームディレクトリに設定する。事実上、暗黙のうちに
\&\fBsudo\fR に \fB\-H\fR オプションが常に指定されることになるわけだ。
気をつけてほしいのは、\fIenv_reset\fR オプションが有効になっている場合、
\&\f(CW\*(C`HOME\*(C'\fR の値は (訳注: 変身対象ユーザのホームディレクトリに)
すでに設定済みだということだ。だから、
\&\fIalways_set_home\fR の指定に効果があるのは、
\&\fIenv_reset\fR を無効に設定している場合か、
\&\fIenv_keep\fR のリストに \f(CW\*(C`HOME\*(C'\fR が存在する場合のみである。
このフラグはデフォルトでは \fIoff\fR である。
.IP "authenticate" 16
.IX Item "authenticate"
これをセットすると、ユーザはコマンドの実行を許可される前に、パスワードで
(あるいは、ほかの認証方法で) 自分が本人であることを証明しなければならなくなる。
このデフォルト値は
\&\f(CW\*(C`PASSWD\*(C'\fR や \f(CW\*(C`NOPASSWD\*(C'\fR タグで変更できる。
このフラグはデフォルトでは \fIon\fR である。
.IP "closefrom_override" 16
.IX Item "closefrom_override"
これをセットすると、ユーザが \fBsudo\fR の \fB\-C\fR
オプションを使用できるようになる。\fB\-C\fR オプションというのは、
\&\fBsudo\fR が開いているファイルを閉じていくとき、
どのファイル・ディスクリプタから閉じていくかという、
デフォルトの始点を変更するものだ。このフラグはデフォルトでは \fIoff\fR である。
.IP "compress_io" 16
.IX Item "compress_io"
これをセットすると、
\&\fBsudo\fR がコマンドの入出力のログを取るように設定されている場合に、
入出力のログを \fBzlib\fR を使って、圧縮することになる。
\&\fBsudo\fR が \fBzlib\fR をサポートするようにコンパイルされている場合、
このフラグはデフォルトで \fIon\fR である。
.IP "env_editor" 16
.IX Item "env_editor"
これをセットすると、
\&\fBvisudo\fR はデフォルトのエディタ・リストを利用する前に、
環境変数 \s-1EDITOR\s0 や \s-1VISUAL\s0 の値を使用するようになる。
これがセキュリティホールになりかねないことに注意してほしい。
ユーザが root として任意のコマンドを、
ログに記録されることなく実行できるようになるからだ。
こうした環境変数を利用するときの、
\&\fIenv_editor\fR を有効にするよりも安全な方法は、
\&\fIsudoers\fR ファイルの \f(CW\*(C`editor\*(C'\fR オプションに
コロンで区切ったエディタのリストを書いておくことだ。そうすれば、
\&\fBvisudo\fR が \s-1EDITOR\s0 や \s-1VISUAL\s0 を使うのは、それが
\&\f(CW\*(C`editor\*(C'\fR オプションに指定した値とマッチしたときだけになる。
このフラグはデフォルトでは \fIoff\fR である。
.IP "env_reset" 16
.IX Item "env_reset"
これをセットすると、\fBsudo\fR は最小限の環境でコマンドを実行することになる。
その環境には、以下の変数が含まれる。すなわち、
\&\f(CW\*(C`TERM\*(C'\fR, \f(CW\*(C`PATH\*(C'\fR, \f(CW\*(C`HOME\*(C'\fR,
\&\f(CW\*(C`MAIL\*(C'\fR, \f(CW\*(C`SHELL\*(C'\fR, \f(CW\*(C`LOGNAME\*(C'\fR,
\&\f(CW\*(C`USER\*(C'\fR, \f(CW\*(C`USERNAME\*(C'\fR、
及び \f(CW\*(C`SUDO_*\*(C'\fR という変数。
これに、\fBsudo\fR を起動するユーザの環境にある変数のうち、
\&\f(CW\*(C`env_keep\*(C'\fR や \f(CW\*(C`env_check\*(C'\fR
のリストにマッチするものが加わり、さらに、
\&\fIenv_file\fR オプションによって指定されたファイルがあれば、
そのファイルに記載されたすべての変数が追加される。
\&\f(CW\*(C`env_keep\*(C'\fR や \f(CW\*(C`env_check\*(C'\fR
のリストにデフォルトでどんな変数が存在するかは、root ユーザが
\&\fBsudo\fR に \fI\-V\fR オプションを付けて実行すれば、見ることができる。
なお、\fIsecure_path\fR オプションが設定されているときは、
その値が環境変数 \f(CW\*(C`PATH\*(C'\fR として使用される。
このフラグはデフォルトで \fIon\fR である。
.IP "fast_glob" 16
.IX Item "fast_glob"
通常 \fBsudo\fR はパス名のマッチングをするとき、\fIglob\fR\|(3)
関数を使用して、シェル・スタイルのワイルドカード展開 (glob) を行う。
しかし、\fIglob\fR\|(3) はファイルシステムにアクセスするので、
指定パターンによっては、作業を完了するまでに時間がかかることがある。
必要な時にマウントするようになっている (つまりオートマウントの)
ネットワーク・ファイル・システムを参照するときは、とりわけ時間がかかる。
\&\fIfast_glob\fR オプションを指定すると、
\&\fBsudo\fR が \fIfnmatch\fR\|(3) 関数を使うようになるが、
こちらの関数はマッチングの際にファイルシステムにアクセスしない。
\&\fIfast_glob\fR の欠点は、\fI./ls\fR や \fI../bin/ls\fR
のような相対パスに対するマッチができないことである。
そのため、ワイルドカードを含むパス名が、否定演算子 \f(CW\*(Aq!\*(Aq\fR
と一緒に使われている場合に、セキュリティ上の問題が生じるおそれがある。
そうしたルールは簡単に迂回できるからだ。それ故、\fIsudoers\fR
にワイルドカードを含むパス名を否定するルールが存在する場合は、
このオプションを使ってはいけない。このフラグはデフォルトでは \fIoff\fR である。
.IP "fqdn" 16
.IX Item "fqdn"
\&\fIsudoers\fR ファイルで完全修飾ホスト名を使用したかったら、
このフラグをセットするとよい。すなわち、myhost ではなく、
myhost.mydomain.edu を使いたい場合だ。そのときでも、そうしたければ、
短縮形も使える (両方を混ぜて使うこともできる)。気を付けてほしいのは、
\&\fIfqdn\fR を 有効にすると、
\&\fBsudo\fR は \s-1DNS\s0 へ問い合わせをしなければならないので、
\&\s-1DNS\s0 サービスが稼働していない場合、
\&\fBsudo\fR が使えなくなるかもしれないということだ
(たとえば、マシンがネットワークに接続していない場合)。
もう一つ気を付けるべきことがある。
\&\s-1DNS\s0 が知っているホストの正式名を使わなければならないということだ。
言い換えれば、ホストのエイリアス (\f(CW\*(C`CNAME\*(C'\fR のエントリ)
を使ってはいけない。パフォーマンスの問題もあるし、
\&\s-1DNS\s0 からエイリアスをすべて取得する方法はないからでもある。
マシンのホスト名が (\f(CW\*(C`hostname\*(C'\fR コマンドで返ってくるものが)
すでに完全修飾名になっているならば、\fIfqdn\fR をセットする必要はないだろう。
このフラグはデフォルトでは \fIoff\fR である。
.IP "ignore_dot" 16
.IX Item "ignore_dot"
これをセットすると、環境変数 \f(CW\*(C`PATH\*(C'\fR 中に '.' や ''
(カレントディレクトリを意味する) があっても、\fBsudo\fR はそれを無視する。
\&\f(CW\*(C`PATH\*(C'\fR そのものは変更されない。このフラグは
デフォルトでは \fIoff\fR である。
.IP "ignore_local_sudoers" 16
.IX Item "ignore_local_sudoers"
\&\s-1LDAP\s0 の方でこのフラグをセットすると、
\&\fI/etc/sudoers\fR の解析がスキップされる。
このフラグは、ローカルにある sudoers ファイルの使用を禁じて、
\&\s-1LDAP\s0 のみを使うようにしたい企業のためにある。
たちの悪いオペレータが \fI/etc/sudoers\fR に手を加えて、
自分の権限を増やそうとしても、そうした悪だくみは阻止されるわけだ。
このオプションが設定されているときは、
\&\fI/etc/sudoers\fR ファイルは存在する必要すらない。このオプションは、
\&\s-1LDAP\s0 中に、マッチする特定のエントリが存在しなかったときに、
いかに振舞うべきかを \fBsudo\fR に指示するものだから、
これを指定する sudoOption は、
\&\f(CW\*(C`cn=defaults\*(C'\fR のセクションになければ意味がない。
このフラグはデフォルトでは \fIoff\fR である。
.IP "insults" 16
.IX Item "insults"
これをセットすると、不正なパスワードが入力されたとき、
\&\fBsudo\fR がユーザに悪態をつく。このフラグはデフォルトでは \fIoff\fR
である。
.IP "log_host" 16
.IX Item "log_host"
これをセットすると、ホスト名が (syslog 経由ではない) \fBsudo\fR の
ログファイルに記録されることになる。このフラグはデフォルトでは \fIoff\fR
である。
.IP "log_input" 16
.IX Item "log_input"
これをセットすると、\fBsudo\fR は \fI擬似 tty\fR でコマンドを実行し、
ユーザの入力をすべてログに取ることになる。入出力がリダイレクトされているとか、
コマンドがパイプラインの一部だとかいう理由で、標準入力がユーザの tty
に結びつけられていない場合も、その入力がキャプチャーされて、
独立したログファイルに書き込まれることに変わりはない。
.Sp
入力は、\fIiolog_dir\fR オプションで指定したディレクトリに
(デフォルトでは \fI/var/log/sudo-io\fR)、一意なセッション \s-1ID\s0
を使って記録される。このセッション \s-1ID\s0 は \fBsudo\fR
の通常のログのエントリに、\fITSID=\fR に続く値として書き込まれているものだ。
\&\fIiolog_file\fR オプションを使えば、
セッション \s-1ID\s0 の形式を変更することができる。
.Sp
ユーザの入力には、パスワードのような (たとえ、
画面にエコーされることはないにしても) 秘密情報が含まれていることがある。
そういった情報も、暗号化されずに、
ログファイルに記録されることに注意してほしい。
たいていの場合、\fIlog_output\fR を使って、
コマンドの出力をログに記録するだけで十分用が足りる。
.IP "log_output" 16
.IX Item "log_output"
これをセットすると、\fBsudo\fR は \fI擬似 tty\fR でコマンドを実行し、
スクリーンに送られたすべての出力をログに取ることになる。
\&\fIscript\fR\|(1) コマンドと似たことをやるわけだ。
入出力がリダイレクトされているとか、
コマンドがパイプラインの一部だとかいう理由で、標準出力や標準エラーがユーザの
tty に結びつけられていない場合も、その出力がキャプチャーされて、
それぞれ独立したログファイルに書き込まれることに変わりはない。
.Sp
出力は、\fIiolog_dir\fR オプションで指定したディレクトリに
(デフォルトでは \fI/var/log/sudo-io\fR)、一意なセッション \s-1ID\s0
を使って記録される。このセッション \s-1ID\s0 は \fBsudo\fR
の通常のログのエントリに 、\fITSID=\fR に続く値として書き込まれているものだ。
\&\fIiolog_file\fR オプションを使えば、
セッション \s-1ID\s0 の形式を変更することができる。
.Sp
出力のログは \fIsudoreplay\fR\|(8) コマンドを使って、見ることができる。
また、このコマンドは、利用できるログをリストしたり、
検索したりするのにも使用できる。
.IP "log_year" 16
.IX Item "log_year"
これをセットすると、四桁の年が (syslog 経由ではない) \fBsudo\fR
のログファイルに記入されることになる。このフラグはデフォルトでは \fIoff\fR
である。
.IP "long_otp_prompt" 16
.IX Item "long_otp_prompt"
\&\fBS/Key\fR や \fB\s-1OPIE\s0\fR のような One Time Password
(\s-1OTP\s0) スキームを採用しているときにこれを有効にすると、
チャレンジをローカルウィンドウにカット・アンド・ペーストしやすいように、
二行のプロンプトが使用される。デフォルトのプロンプトほど見栄えはよくないが、
こちらの方が便利だと思う人もいる。デフォルトではこのフラグは \fIoff\fR である。
.IP "mail_always" 16
.IX Item "mail_always"
ユーザが \fBsudo\fR を実行するたびに、\fImailto\fR ユーザにメールを送る。
このフラグはデフォルトでは \fIoff\fR である。
.IP "mail_badpass" 16
.IX Item "mail_badpass"
\&\fBsudo\fR を実行するユーザが正しいパスワードを入力しないと、
\&\fImailto\fR ユーザにメールを送る。このフラグはデフォルトでは
\&\fIoff\fR である。
.IP "mail_no_host" 16
.IX Item "mail_no_host"
これをセットすると、\fBsudo\fR を起動したユーザが \fIsudoers\fR
ファイルに記載されているものの、
使用中のホストでコマンドの実行を許可されていない場合、
\&\fImailto\fR ユーザにメールを送付する。このフラグはデフォルトでは
\&\fIoff\fR である。
.IP "mail_no_perms" 16
.IX Item "mail_no_perms"
これをセットすると、\fBsudo\fR を起動したユーザが
\&\fBsudo\fR の使用を許可されているが、
実行しようとしているコマンドが \fIsudoers\fR ファイルの
そのユーザのエントリに登録されていないか、明示的に禁止されている場合、
\&\fImailto\fR ユーザにメールを送付する。このフラグはデフォルトでは
\&\fIoff\fR である。
.IP "mail_no_user" 16
.IX Item "mail_no_user"
これをセットすると、\fBsudo\fR を起動したユーザが \fIsudoers\fR
ファイルに記載されていない場合、\fImailto\fR ユーザにメールを送付する。
このフラグはデフォルトでは \fIon\fR である。
.IP "noexec" 16
.IX Item "noexec"
これをセットすると、\fBsudo\fR を通して実行されるすべてのコマンドが、
\&\f(CW\*(C`EXEC\*(C'\fR タグで無効にされないかぎり、あたかも
\&\f(CW\*(C`NOEXEC\*(C'\fR タグが設定されているかのごとく振舞うようになる。
前述の「\fI\s-1NOEXEC\s0 と \s-1EXEC\s0\fR」の説明、
および、このマニュアルの終わりの方にある「シェル・エスケープを防止する」
というセクションを参照してほしい。
このフラグはデフォルトでは \fIoff\fR である。
.IP "path_info" 16
.IX Item "path_info"
通常 \fBsudo\fR は、環境変数 \f(CW\*(C`PATH\*(C'\fR
中にコマンドが見付からないと、ユーザにそのことを知らせる。これを利用すれば、
一般ユーザにアクセス権のない実行ファイルのありかについて
情報を収集できるという理由から、
この動作を無効にしたいサイトもあるかもしれない。
その場合の欠点は、実行ファイルが単にユーザの \f(CW\*(C`PATH\*(C'\fR
中になかっただけの場合でも、実行の許可がないと \fBsudo\fR
がユーザに告げることになって、実情がわかりにくいかもしれないことである。
このフラグはデフォルトでは \fIon\fR である。
.IP "passprompt_override" 16
.IX Item "passprompt_override"
通常、\fIpassprompt\fR
オプションによって指定されたパスワードプロンプトが使用されるのは、
\&\s-1PAM\s0 のようなシステムが用意しているパスワードプロンプトが、
\&\*(L"Password:\*(R" という文字列にマッチしているときだけである。
\&\fIpassprompt_override\fR をセットすると、
\&\fIpassprompt\fR が無条件で使われることになる。
このフラグはデフォルトでは \fIoff\fR である。
.IP "preserve_groups" 16
.IX Item "preserve_groups"
デフォルトでは、\fBsudo\fR は所属グループの初期値として、
変身対象ユーザが所属しているグループのリストを設定する。
\&\fIpreserve_groups\fR をセットすると、
\&\fBsudo\fR を実行するユーザの所属グループのリストが、
変更されずにそのまま維持される。とは言え、実グループ ID や実効グループ ID
が変身対象ユーザのそれに設定されることに変わりはない。
このフラグはデフォルトでは \fIoff\fR である。
.IP "pwfeedback" 16
.IX Item "pwfeedback"
ほかのたいていの Unix プログラムと同様、
\&\fBsudo\fR はパスワードを読み込むとき、デフォルトでは、ユーザが Return
(または Enter) キーを押すまで、エコーを off にする。
この動作にとまどうユーザが存在する。
彼らには \fBsudo\fR が急に反応しなくなったように見えるのだ。
\&\fIpwfeedback\fR をセットすると、ユーザがキーを押すたびに、
\&\fBsudo\fR が目に見える反応を返すようになる。
これには、セキュリティ上の問題があることに注意してほしい。側で見ている人が、
打ち込まれたパスワードの文字数を特定できてしまうかもしれないのだ。
このフラグはデフォルトでは \fIoff\fR である。
.IP "requiretty" 16
.IX Item "requiretty"
これをセットすると、\fBsudo\fR が実行されるのは、ユーザが実際の tty
にログインしたときだけになる。すなわち、\fBsudo\fR を実行できるのは、
ログイン・セッションからだけであって、
\&\fIcron\fR\|(8) や cgi-bin スクリプトといった、
ほかの方法を介して実行することはできないということだ。このフラグは、
デフォルトでは \fIoff\fR である。
.IP "root_sudo" 16
.IX Item "root_sudo"
これをセットすると、root も \fBsudo\fR を実行できるようになる。
このフラグを無効にすると、ユーザがたとえば \f(CW"sudo sudo /bin/sh"\fR
といったように \fBsudo\fR コマンドを\fB連鎖的に\fR使って、
ルートシェルを獲得することができなくなる。ところで、
\&\fIroot_sudo\fR が off だと、root が \fBsudoedit\fR
まで実行できなくなることに注意してほしい。
\&\fIroot_sudo\fR を無効にしても、セキュリティが実際に向上するわけではない。
このフラグが存在しているのは、もっぱら歴史的な理由からなのだ。
このフラグはデフォルトでは \fIon\fR である。
.IP "rootpw" 16
.IX Item "rootpw"
これをセットすると、\fBsudo\fR はプロンプトで、起動したユーザのパスワードではなく、
root のパスワードを要求するようになる。
このフラグはデフォルトでは \fIoff\fR である。
.IP "runaspw" 16
.IX Item "runaspw"
これをセットすると、\fBsudo\fR はプロンプトで、起動したユーザのパスワードではなく、
\&\fIsudoers\fR ファイルの
\&\fIrunas_default\fR オプションで指定しているユーザーの
(デフォルトでは \f(CW\*(C`root\*(C'\fR である) パスワードを要求する。
このフラグはデフォルトでは \fIoff\fR である。
.IP "set_home" 16
.IX Item "set_home"
これが有効なときに \fBsudo\fR を \fB\-s\fR オプション付きで起動すると、
環境変数 \f(CW\*(C`HOME\*(C'\fR が変身対象ユーザの
(\fB\-u\fR オプションが使用されないかぎり、それは root である)
ホームディレクトリに設定される。すなわち、 \fB\-s\fR オプションが
\&\fB\-H\fR オプションを事実上兼ねることになるわけだ。
気をつけてほしいのは、\fIenv_reset\fR が有効な場合、\f(CW\*(C`HOME\*(C'\fR
はすでに (訳注: 変身対象ユーザのホームディレクトリに) 設定済みだということだ。
だから、\fIset_home\fR の効果があるのは、
\&\fIenv_reset\fR が無効に設定されているか、 \fIenv_keep\fR のリストに
\&\f(CW\*(C`HOME\*(C'\fR が存在する場合のみである。
このフラグはデフォルトでは \fIoff\fR である。
.IP "set_logname" 16
.IX Item "set_logname"
通常 \fBsudo\fR は環境変数 \f(CW\*(C`LOGNAME\*(C'\fR,
\&\f(CW\*(C`USER\*(C'\fR, \f(CW\*(C`USERNAME\*(C'\fR
を変身対象ユーザの名前 (\fB-u\fR オプションが指定されていない場合、
普通は root) にセットする。しかし、プログラムによっては (たとえば、
\&\s-1RCS\s0 リビジョンコントロールシステムがその一つだが)
ユーザが実際には誰であるかを判定するのに \f(CW\*(C`LOGNAME\*(C'\fR
を使用していることがあり、そのために、この振舞いを変更したい場合もある。
set_logname オプションに '!' を付けて否定することで、それができる。
なお \fIenv_reset\fR オプションを無効にしていない場合、
\&\fIenv_keep\fR リストの項目が \fIset_logname\fR
による値を上書きすることになるので、注意してほしい。
このフラグはデフォルトでは \fIon\fR である。
.IP "set_utmp" 16
.IX Item "set_utmp"
これが有効になっていると、\fBsudo\fR は擬似 tty を割り当てるときに、
utmp (または utmpx) ファイルにエントリを作成する。
\&\fBsudo\fR によって擬似 tty の割り当てが行われるのは、
\&\fIlog_input\fR, \fIlog_output\fR, \fIuse_pty\fR
といったフラグが有効になっているときである。
デフォルトでは、新しいエントリは、そのユーザの utmp エントリが存在すれば、
そのコピーであり、tty, time, type, pid フィールドが更新される。
このフラグはデフォルトでは \fIon\fR である。
.IP "setenv" 16
.IX Item "setenv"
これをセットすると、ユーザがコマンドラインで \fB\-E\fR オプションを指定して、
\&\fIenv_reset\fR オプションを無効にできるようになる。
さらに、コマンドラインから設定する環境変数が
\&\fIenv_check\fR, \fIenv_delete\fR, \fIenv_keep\fR による制限を受けなくなる。
それ故、そのようなやり方で変数を設定することを許可するのは、
信用できるユーザのみに限るべきだ。このフラグはデフォルトでは \fIoff\fR である。
.IP "shell_noargs" 16
.IX Item "shell_noargs"
これがセットされているとき、\fBsudo\fR を引き数なしで起動すると、
\&\fBsudo\fR は \fB\-s\fR オプションが指定されたかのように振舞う。
すなわち、root ユーザとしてシェルを実行するわけだ (シェルは、環境変数
\f(CW\*(C`SHELL\*(C'\fR がセットされていれば、それによって決まるし、
セットされていなければ、\fBsudo\fR を起動したユーザの
/etc/passwd エントリに登録されたものになる)。このフラグはデフォルトでは
\&\fIoff\fR である。
.IP "stay_setuid" 16
.IX Item "stay_setuid"
通常 \fBsudo\fR がコマンドを実行するとき、実 UID と実効 UID
は変身対象ユーザ (デフォルトでは root) のものにセットされる。
このオプションは、その振舞いを変更して、\fBsudo\fR を起動したユーザの
\&\s-1UID\s0 が、そのまま実 \s-1UID\s0 として残るようにする。言い換えると、
\&\fBsudo\fR が setuid ラッパーとして動作するようになるわけだ。
プログラムを setuid で動かすと、危険をもたらしかねないという理由から、
ある種の機能を使えないようにしているシステムでは、
このオプションが役に立つかもしれない。このオプションは、\fIsetreuid()\fR
関数や \fIsetresuid()\fR 関数を持っているシステムでのみ有効である。
このフラグはデフォルトでは \fIoff\fR である。
.IP "targetpw" 16
.IX Item "targetpw"
これをセットすると、\fBsudo\fR はプロンプトで、
起動したユーザのパスワードではなく、
\&\fB\-u\fR オプションで指定されたユーザ (デフォルトでは root)
のパスワードを要求することになる。それに加えて、
タイムスタンプ・ファイルの名前に変身対象ユーザの名前が含まれるようになる。
このフラグを設定をすると、\fB\-u\fR オプションの引き数として、
passwd データベースに登録されていない uid が使えなくなることに注意してほしい。
このフラグはデフォルトでは \fIoff\fR である。
.IP "tty_tickets" 16
.IX Item "tty_tickets"
これをセットすると、ユーザは tty ごとに認証をしなければならなくなる。
このフラグが有効な場合、
\&\fBsudo\fR はユーザのタイムスタンプ・ディレクトリにある、
ユーザがログインしている tty
に対応する名前のファイルをタイムスタンプに使用する。
それに対して、このフラグが無効な場合は、
ユーザのタイムスタンプ・ディレクトリそのもののタイムスタンプが使用されるのである。
このフラグはデフォルトでは \fIon\fR である。
.IP "umask_override" 16
.IX Item "umask_override"
これをセットすると、\fBsudo\fR は umask を \fIsudoers\fR の
umask オプションで指定されたとおりの値に、変更を加えることなく設定する。
このことによって、ユーザ自身の umask 値よりもっと緩やかな umask 値を
\&\fIsudoers\fR で指定することが可能になる。
\&\fBsudo\fR の昔の動作と同じになるわけだ。
\&\fIumask_override\fR をセットしない場合、
現在の \fBsudo\fR は umask を、ユーザの umask 値と \fIsudoers\fR で指定した
umask 値とのビット和に設定することになっている。
このフラグはデフォルトでは \fIoff\fR である。
.if \n(LC \{\
.IP "use_loginclass" 16
.IX Item "use_loginclass"
これをセットすると、\fBsudo\fR は、
変身対象ユーザのログインクラスが存在するならば、
それに対して指定されたデフォルトの値を使うことになる。
このフラグは、\fBsudo\fR を \-\-with\-logincap オプションを付けて
configure したときのみ利用することができる。このフラグはデフォルトでは
\&\fIoff\fR である。
\}
.IP "use_pty" 16
.IX Item "use_pty"
これをセットすると、\fBsudo\fR は入出力のロギングが行われていないときでも、
擬似 tty でコマンドを実行することになる。
\&\fBsudo\fR によって実行された悪意のあるプログラムが、
バックグラウンド・プロセスをフォークし、
そのプロセスが、メインプログラムの実行が終了した後でも、
ユーザのターミナルデバイスを握って離さないといったことが考えられる。
このオプションを使えば、そういったことが不可能になる。
このフラグはデフォルトでは \fIoff\fR である。
.IP "utmp_runas" 16
.IX Item "utmp_runas"
これをセットすると、\fBsudo\fR は utmp (または utmpx) ファイルを更新するとき、
変身対象ユーザの名前を記録するようになる。\fBsudo\fR はデフォルトでは、
\&\fBsudo\fR を実行したユーザの名前を記録するのだ。
このフラグはデフォルトでは \fIoff\fR である。
.IP "visiblepw" 16
.IX Item "visiblepw"
デフォルトでは、ユーザがパスワードを入力しなければならないときに、
使用しているターミナルでエコーの抑制ができなかったら、
\&\fBsudo\fR は実行を拒否するようになっている。
これに対し、\fIvisiblepw\fR フラグが設定されていると、
パスワードがスクリーンに表示されてしまう場合でも、
\&\fBsudo\fR はプロンプトを出して、パスワードを求める。この動作によって、
\&\fIrsh\fR\|(1) は tty を割り当てないにもかかわらず、
\&\f(CW"rsh somehost sudo ls"\fR といった操作の実行が可能になるわけだ。
このフラグはデフォルトでは \fIoff\fR である。
.PP
\&\fB整数\fR:
.IP "closefrom" 16
.IX Item "closefrom"
\&\fBsudo\fR はコマンドを実行する前に、標準入力、標準出力、標準エラー
(すなわち、ファイルディスクリプタ 0\-2 である) を除いて、
開いているすべてのファイル・ディスクリプタをクローズする。
\&\fIclosefrom\fR オプションを使用すると、
0\-2 以外のどのファイル・ディスクリプタから閉じて行くかを指定することができる。
デフォルトは \f(CW3\fR である。
.IP "passwd_tries" 16
.IX Item "passwd_tries"
\&\fBsudo\fR が「失敗」をログに記録して終了する前に、
ユーザがパスワードを入力できる回数。デフォルトは \f(CW\*(C`3\*(C'\fR。
.PP
\&\fB真偽値としても使用できる整数\fR:
.IP "loglinelen" 16
.IX Item "loglinelen"
\&\fBsudo\fR 用ログファイルの一行あたりの文字数。
この値は、ログファイルを見やすくするために改行する位置を決めるのに使用される。
この値は、syslog 経由のログファイルには影響せず、
直接ファイルにログを書き出すときのみ効果がある。デフォルトは
\&\f(CW\*(C`80\*(C'\fR である (改行をしないようにするには、値を 0 にするか、
頭に '!' を付けて、このオプションを否定する)。
.IP "passwd_timeout" 16
.IX Item "passwd_timeout"
\&\fBsudo\fR のパスワードプロンプトが時間切れになるまでの分単位の時間。
\&\f(CW0\fR を指定すると、時間切れなしになる。
分よりももっと細かい時間を指定したいときは、(\f(CW2.5\fR のように)
小数点以下を付けることもできる。デフォルトは \f(CW\*(C`5\*(C'\fR である。
.IP "timestamp_timeout" 16
.IX Item "timestamp_timeout"
\&\fBsudo\fR がパスワードを再び要求するようになるまでの時間を
分単位で指定する。分よりももっと細かい時間を指定したいときは、
(\f(CW2.5\fR のように) 小数点以下を付けることもできる。
デフォルトでは \f(CW\*(C`5\*(C'\fR である。
これを \f(CW0\fR にセットすると、毎回パスワードを要求するようになる。
\&\f(CW0\fR より小さい値にセットした場合は、
ユーザのタイムスタンプが期限切れになることがない。
ユーザが \f(CW\*(C`sudo \-v\*(C'\fR と \f(CW\*(C`sudo \-k\*(C'\fR
を実行することによって、タイムスタンプを自分で作ったり、
消したりできるようにしたかったら、この手を使えばよい。
.IP "umask" 16
.IX Item "umask"
コマンドを実行するときに使用する umask 値。
ユーザの umask 値をそのまま使いたかったら、'!' を頭に付けて、
このオプションを否定するか、0777 にセットすればよい。
このオプションの値が 0777 以外の場合、実際に使用される umask 値は、
ユーザの umask 値と \fIumask\fR オプションの値とのビット和であり、
後者のデフォルトは \f(CW\*(C`0022\*(C'\fR である。
このことによって、\fBsudo\fR がコマンドを実行するときの umask 値が、
ユーザの umask 値より低くならないようになっているわけだ。
\&\s-1PAM\s0 を使用しているシステムでは、 \s-1PAM\s0 のデフォルト設定で
umask 値を指定することができるが、その場合は、それが \fIsudoers\fR
で指定した値を上書きすることに注意してほしい。
.PP
\&\fB文字列\fR:
.IP "badpass_message" 16
.IX Item "badpass_message"
ユーザが不正なパスワードを入力したときに表示するメッセージ。
\&\fIinsults\fR フラグが有効になっていないかぎり、
デフォルトは「\f(CW\*(C`Sorry, try again.\*(C'\fR」である。
.IP "editor" 16
.IX Item "editor"
\&\fBvisudo\fR で使用できるエディタをコロン (':') で区切ったリスト。
\&\fBvisudo\fR は、可能ならば、
ユーザの \s-1EDITOR\s0 環境変数と一致したエディタを選択する。
それができないときは、このリストにあるエディタで、
実際に存在し、かつ実行可能な最初のエディタを使用する。デフォルトは
\&\f(CW"/usr/bin/vi"\fR である。
.IP "iolog_dir" 16
.IX Item "iolog_dir"
このオプションの値をトップレベル・ディレクトリにして、
入出力ログを格納するディレクトリのパス名が構成される。
この値が使用されるのは、\fIlog_input\fR や
\&\fIlog_output\fR オプションが有効になっているときや、
\&\f(CW\*(C`LOG_INPUT\*(C'\fR や \f(CW\*(C`LOG_OUTPUT\*(C'\fR
タグがコマンドに付いているときだけである。このディレクトリ以下に、
(セッション ID が連番ならば) セッションの連番が格納されることになるわけだ。
デフォルトは \f(CW"/var/log/sudo-io"\fR である。
.Sp
以下のパーセント (`\f(CW\*(C`%\*(C'\fR') エスケープシーケンスが使用できる。
.RS 16
.ie n .IP "\*(C`%{seq}\*(C'" 4
.el .IP "\f(CW\*(C`%{seq}\*(C'\fR" 4
.IX Item "%{seq}"
単純に増加する 36 進数の連続番号に展開される。たとえば、0100A5 といった番号であり、
二桁づつ使って新しいディレクトリを作っていく。この場合なら、
\&\fI01/00/A5\fR といった具合だ。
.ie n .IP "\*(C`%{user}\*(C'" 4
.el .IP "\f(CW\*(C`%{user}\*(C'\fR" 4
.IX Item "%{user}"
\&\fBsudo\fR を実行するユーザーのログイン名に展開される。
.ie n .IP "\*(C`%{group}\*(C'" 4
.el .IP "\f(CW\*(C`%{group}\*(C'\fR" 4
.IX Item "%{group}"
\&\fBsudo\fR を実行するユーザーの実グループ \s-1ID\s0 の名前に展開される。
.ie n .IP "\*(C`%{runas_user}\*(C'" 4
.el .IP "\f(CW\*(C`%{runas_user}\*(C'\fR" 4
.IX Item "%{runas_user}"
変身対象ユーザのログイン名に展開される (たとえば root)。
.ie n .IP "\*(C`%{runas_group}\*(C'" 4
.el .IP "\f(CW\*(C`%{runas_group}\*(C'\fR" 4
.IX Item "%{runas_group}"
変身対象ユーザのグループ名に展開される (たとえば wheel)。
.ie n .IP "\*(C`%{hostname}\*(C'" 4
.el .IP "\f(CW\*(C`%{hostname}\*(C'\fR" 4
.IX Item "%{hostname}"
ドメイン名なしのローカル・ホスト名に展開される。
.ie n .IP "\*(C`%{command}\*(C'" 4
.el .IP "\f(CW\*(C`%{command}\*(C'\fR" 4
.IX Item "%{command}"
実行されるコマンドのベースネームに展開される。
.RE
.RS 16
.Sp
このほか、システムの \fIstrftime()\fR
関数がサポートしているエスケープシーケンスは、
いかなるものでも展開の対象になる。
.Sp
\&`\f(CW\*(C`%\*(C'\fR' 文字そのものを使いたかったら、文字列
\&`\f(CW\*(C`%%\*(C'\fR' を使用すればよい。
.RE
.IP "iolog_file" 16
.IX Item "iolog_file"
\&\fIiolog_dir\fR を基点とする相対パス名であり、\fIlog_input\fR や
\&\fIlog_output\fR オプションが有効になっていたり、
\&\f(CW\*(C`LOG_INPUT\*(C'\fR や \f(CW\*(C`LOG_OUTPUT\*(C'\fR
タグがコマンドに付いている場合に、入出力ログがこの中に格納される。
\&\fIiolog_file\fR の値がディレクトリ構成をなしていることがあるのに注意すること。
デフォルトは \f(CW"%{seq}"\fR である。
.Sp
使用できるパーセント (`\f(CW\*(C`%\*(C'\fR') エスケープシーケンスのリストについては、
上記の \fIiolog_dir\fR オプションを参照してほしい。
.Sp
エスケープシーケンスの展開とは別に、パス名が六個以上の \f(CW\*(C`X\*(C'\fR
で終わっている場合、\f(CW\*(C`X\*(C'\fR の部分が、
他と重複しない英数字の組み合わせに置き換えられる。
\&\fImktemp()\fR 関数の場合と同様である。
.IP "mailsub" 16
.IX Item "mailsub"
\&\fImailto\fR ユーザに送付するメールの件名。エスケープ文字 \f(CW%h\fR
はマシンのホスト名に展開される。デフォルトは「\f(CW\*(C`*** SECURITY
information for %h ***\*(C'\fR」である。
.IP "noexec_file" 16
.IX Item "noexec_file"
このオプションはもうサポートされていない。現在では、
noexec ファイルのパスは \fI/etc/sudo.conf\fR ファイルで設定するべきである。
(訳注: sudo-1.8.3 では、まだこのオプションが有効かもしれない。
しかし、そこでも \fI/etc/sudo.conf\fR を使用することが推奨されている。)
.IP "passprompt" 16
.IX Item "passprompt"
パスワードを要求するときに使用するデフォルトのプロンプト。
\&\fB-p\fR オプションや環境変数 \f(CW\*(C`SUDO_PROMPT\*(C'\fR
によって変更することができる。以下のパーセント (`\f(CW\*(C`%\*(C'\fR')
エスケープシーケンスが使用できる。
.RS 16
.ie n .IP "%H" 4
.el .IP "\f(CW%H\fR" 4
.IX Item "%H"
ドメイン名付きのローカルホスト名に展開 (マシンのホスト名が完全修飾名か、
\&\fIfqdn\fR オプションがセットされている場合のみ)
.ie n .IP "%h" 4
.el .IP "\f(CW%h\fR" 4
.IX Item "%h"
ドメイン名なしのローカルホスト名に展開
.ie n .IP "%p" 4
.el .IP "\f(CW%p\fR" 4
.IX Item "%p"
パスワードを要求されているユーザ名に展開 (\fIsudoers\fR ファイルの
\&\fIrootpw\fR, \fItargetpw\fR, \fIrunaspw\fR フラグを尊重する)
.ie n .IP "%U" 4
.el .IP "\f(CW%U\fR" 4
.IX Item "%U"
変身対象ユーザの (デフォルトでは root) ログイン名に展開
.ie n .IP "%u" 4
.el .IP "\f(CW%u\fR" 4
.IX Item "%u"
\&\fBsudo\fR を起動するユーザのログイン名に展開
.ie n .IP "\*(C`%%\*(C'" 4
.el .IP "\f(CW\*(C`%%\*(C'\fR" 4
.IX Item "%%"
連続した二個の \f(CW\*(C`%\*(C'\fR は、一個の \f(CW\*(C`%\*(C'\fR
文字そのものを意味する
.RE
.RS 16
.Sp
デフォルトの値は「\f(CW\*(C`Password:\*(C'\fR」である。
.RE
.if \n(SL \{\
.IP "role" 16
.IX Item "role"
コマンドを実行するために
SELinux の新しいセキュリティ・コンテキストを構成するときに使用する、
デフォルトのロール。デフォルトのロールは、
\&\fIsudoers\fR ファイルや、コマンドラインオプションを使って、
コマンドごとに変更することができる。このオプションが利用できるのは、
\&\fBsudo\fR が SELinux サポートつきで作成されたときだけである。
\}
.IP "runas_default" 16
.IX Item "runas_default"
コマンドラインで \fB-u\fR オプションが指定されていないときの、
デフォルトの変身対象ユーザ。デフォルトでは \f(CW\*(C`root\*(C'\fR
になっている。
.IP "syslog_badpri" 16
.IX Item "syslog_badpri"
ユーザが認証に失敗したときに使用する syslog の重大度 (priority)。
デフォルトでは \f(CW\*(C`alert\*(C'\fR になっている。
.Sp
syslog の重大度には、次のものが指定できる。\fBalert\fR, \fBcrit\fR,
\&\fBdebug\fR, \fBemerg\fR, \fBerr\fR, \fBinfo\fR, \fBnotice\fR,
\&\fBwarning\fR。
.IP "syslog_goodpri" 16
.IX Item "syslog_goodpri"
ユーザが認証に成功したときに使用する syslog の重大度 (priority)。
デフォルトでは \f(CW\*(C`notice\*(C'\fR になっている。
.Sp
どんな syslog の重大度が指定できるかについては、
syslog_badpri を参照。
.IP "sudoers_locale" 16
.IX Item "sudoers_locale"
sudoers ファイルを解析したり、コマンドのログを記録したり、
email を送付したりするときに使用するロケール。ロケールの変更は、
sudoers の解釈に影響があるかもしれないので、気をつけてほしい。
デフォルトでは \f(CW"C"\fR になっている。
.IP "timestampdir" 16
.IX Item "timestampdir"
\&\fBsudo\fR がタイムスタンプ・ファイルを置くディレクトリ。
デフォルトは \fI/var/lib/sudo\fR である。
.IP "timestampowner" 16
.IX Item "timestampowner"
タイムスタンプ・ディレクトリとそこに置かれるタイムスタンプの所有者。
デフォルトは \f(CW\*(C`root\*(C'\fR である。
.if \n(SL \{\
.IP "type" 16
.IX Item "type"
コマンドを実行するために SELinux の新しいセキュリティ・コンテキストを
構成するとき、使用するデフォルトのタイプ。デフォルトのタイプは、
\&\fIsudoers\fR ファイルや、コマンドラインオプションを使って、コマンド
ごとに変更することができる。このオプションが利用できるのは、\fBsudo\fR
が SELinux サポートつきで作成されたときだけである。
\}
.PP
\&\fB真偽値としても使用できる文字列\fR:
.IP "env_file" 12
.IX Item "env_file"
\&\fIenv_file\fR オプションでファイルの絶対パスを指定すると、
実行するプログラムの環境として設定する変数を、そのファイルに格納しておくことができる。
このファイルのエントリは \f(CW\*(C`VARIABLE=value\*(C'\fR
か \f(CW\*(C`export VARIABLE=value\*(C'\fR の形でなければならない。
変数の値をシングルクォートやダブルクォートで囲んでもよい。
このファイルに含まれる変数は、\fIenv_keep\fR や \fIenv_check\fR のような
\&\fBsudo\fR のほかの環境設定の影響を受ける。
.IP "exempt_group" 12
.IX Item "exempt_group"
このグループのユーザはパスワードの入力や \fIsecure_path\fR による
\&\s-1PATH\s0 の限定を免除されている。
指定するグループ名に接頭辞の \f(CW\*(C`%\*(C'\fR を付けてはいけない。
このオプションはデフォルトではセットされていない。
.IP "group_plugin" 12
.IX Item "group_plugin"
このオプションの値となる文字列には、\fIsudoers\fR
が使用するグループ・プラグインと、必要ならその引き数を指定する。
このオプションを使えば、前述した (訳注: 「エイリアス」セクション参照)
非 Unix グループの書式を使えるようにすることも可能だ。
値となる文字列は、プラグインのパスに続けて、その設定に必要な引き数があれば、
それを付け加えたものだが、パスは絶対パスか、
\&\fI/usr/local/libexec\fR を基点とする相対パスにするべきである。
指定した引き数は (もし存在するなら) プラグインの初期化関数に渡される。
引き数が存在する場合は、
文字列をダブルクォート (\f(CW\*(C`"\*(C'\fR) で囲まなければならない。
.Sp
たとえば、\fI/etc/sudo\-group\fR という
Unix グループの書式で書いたグループファイルがあるとしよう。
次のようにすれば、sample group plugin を使用することができる。
.Sp
.Vb 1
\& Defaults group_plugin="sample_group.so /etc/sudo\-group"
.Ve
.Sp
詳細に付いては、\fIsudo_plugin\fR\|(5) をご覧いただきたい。
.IP "lecture" 12
.IX Item "lecture"
\&\fBsudo\fR はパスワードプロンプトに添えて簡単な訓戒を表示することができる。
このオプションはその訓戒をいつ表示するかを決定する。
以下の値が可能である。
.RS 12
.IP "always" 8
.IX Item "always"
いつでも必ず訓戒を表示する。
.IP "never" 8
.IX Item "never"
訓戒をまったく表示しない。
.IP "once" 8
.IX Item "once"
ユーザがはじめて \fBsudo\fR を実行したときだけ表示する。
.RE
.RS 12
.Sp
値を指定しないと、\fIonce\fR を指定したことになる。頭に '!' を付けて、
このオプションを否定すると、値に \fInever\fR が使用される。
デフォルトの値は \fIonce\fR である。
.RE
.IP "lecture_file" 12
.IX Item "lecture_file"
標準の訓戒の代わりに使用する \fBsudo\fR の訓戒を書き込んだファイルがあるなら、
\&\fIlecture_file\fR でそのパスを指定する。\fBsudo\fR はデフォルトでは、
プログラムに埋め込まれた訓戒を使用する。
.IP "listpw" 12
.IX Item "listpw"
このオプションは、\fBsudo\fB を\fB\ -l\fR オプション付きで実行したとき、
ユーザがパスワードを要求されるのは、どんな場合かを決定する。
以下の値が可能である。
.RS 12
.IP "all" 8
.IX Item "all"
パスワードを入力しないですむためには、
\&\fIsudoers\fR ファイルの使用中のホストに対する当該ユーザのエントリのすべてに
\&\f(CW\*(C`NOPASSWD\*(C'\fR タグが設定されていなければならない。
.IP "always" 8
.IX Item "always"
ユーザは \fB\-l\fR オプションを使用する際に
必ずパスワードを入力しなければならない。
.IP "any" 8
.IX Item "any"
パスワードを入力しないですむためには、\fIsudoers\fR ファイルの
使用中のホストに対する当該ユーザのエントリの少なくとも一つに
\&\f(CW\*(C`NOPASSWD\*(C'\fR タグが設定されていなければならない。
.IP "never" 8
.IX Item "never"
ユーザは \fB\-l\fR オプションを使用する際に
パスワードを入力する必要がまったくない。
.RE
.RS 12
.Sp
値を指定しないと、値は \fIany\fR だと見なされる。'!' を頭に付けて、
このオプションを否定すると、値に \fInever\fR が使われることになる。
デフォルトは \fIany\fR である。
.RE
.IP "logfile" 12
.IX Item "logfile"
\&\fBsudo\fR 独自のログファイルのパス (syslog 経由のログファイルではない)。
パスを指定すると、独自ファイルへのロギングが on になり、 '!' を頭に付けて、
このオプションを否定すると、off になる。デフォルトでは、\fBsudo\fR は
syslog 経由でログを取る。
.IP "mailerflags" 12
.IX Item "mailerflags"
メーラを起動するときに使用するフラグ。デフォルトは \fB\-t\fR になっている。
.IP "mailerpath" 12
.IX Item "mailerpath"
警告メールの送信に使うメール・プログラムのパス。デフォルトは configure
したときに見つかった sendmail のパス。
.IP "mailfrom" 12
.IX Item "mailfrom"
警告メールやエラー・メールを送るとき、差出人として使用するアドレス。
\&\fBsudo\fR が \f(CW\*(C`@\*(C'\fR 記号を解釈しないように、
アドレスはダブルクォート (\f(CW\*(C`"\*(C'\fR) で囲むべきである。デフォルトは、
\&\fBsudo\fR を実行するユーザの名前。
.IP "mailto" 12
.IX Item "mailto"
警告メールやエラー・メールを送付する宛先のアドレス。\fBsudo\fR が
\&\f(CW\*(C`@\*(C'\fR 記号を解釈しないように、
アドレスはダブルクォート (\f(CW\*(C`"\*(C'\fR) で囲むべきである。
デフォルトは root になっている。
.IP "secure_path" 12
.IX Item "secure_path"
\&\fBsudo\fR から実行されるあらゆるコマンドが使用するパス。
\&\fBsudo\fR を実行するユーザが、無難な環境変数 \f(CW\*(C`PATH\*(C'\fR
を使っているかどうか確信が持てないなら、このオプションを使用するとよいだろう。
もう一つの使用法は、「root のパス」と「一般ユーザのパス」を別のものにしておきたい場合だ。
ユーザが \fIexempt_group\fR オプションで指定したグループに属していると、
そのユーザは \fIsecure_path\fR の影響を受けない。
このオプションは、デフォルトではセットされていない。
.IP "syslog" 12
.IX Item "syslog"
syslog を使ってログを取っている場合の syslog のファシリティ
(syslog 経由でログを取らないなら、'!' を頭に付けて、このオプションを否定する)。
デフォルトでは \f(CW\*(C`authpriv\*(C'\fR になっている。
.Sp
syslog のファシリティには、次のものが指定できる。
\&\fBauthpriv\fR (\s-1OS\s0 が対応している場合), \fBauth\fR, \fBdaemon\fR,
\&\fBuser\fR, \fBlocal0\fR, \fBlocal1\fR, \fBlocal2\fR, \fBlocal3\fR,
\&\fBlocal4\fR, \fBlocal5\fR, \fBlocal6\fR, \fBlocal7\fR。
.IP "verifypw" 12
.IX Item "verifypw"
このオプションは、\fBsudo\fR を \fB\-v\fR オプション付きで実行したとき、
ユーザがパスワードを要求されるのは、どんな場合かを決定する。
次のような値が可能である。
.RS 12
.IP "all" 8
.IX Item "all"
パスワードを入力しないですむためには、
\&\fIsudoers\fR ファイルの使用中のホストに対する当該ユーザのエントリのすべてに
\&\f(CW\*(C`NOPASSWD\*(C'\fR タグが設定されていなければならない。
.IP "always" 8
.IX Item "always"
ユーザは \fB\-v\fR オプションを使用する際に
必ずパスワードを入力しなければならない。
.IP "any" 8
.IX Item "any"
パスワードを入力しないですむためには、\fIsudoers\fR ファイルの
使用中のホストに対する当該ユーザのエントリの少なくとも一つに
\f(CW\*(C`NOPASSWD\*(C'\fR タグが設定されていなければならない。
.IP "never" 8
.IX Item "never"
ユーザは \fB\-v\fR オプションを使用する際に
パスワードを入力する必要がまったくない。
.RE
.RS 12
.Sp
値を指定しないと、値は \fIall\fR だと見なされる。'!' を頭に付けて、
このオプションを否定すると、値に \fInever\fR が使われることになる。
デフォルトは \fIall\fR である。
.RE
.PP
\&\fB真偽値としても使用できるリスト\fR:
.IP "env_check" 16
.IX Item "env_check"
変数の値に \f(CW\*(C`%\*(C'\fR や \f(CW\*(C`/\*(C'\fR が含まれる場合に、
ユーザの環境から取り除かれる環境変数。
この機能は、出来のよくないプログラムに見られる
printf 形式のフォーマットの脆弱性に対処するために利用できる。
このオプションの引き数は、ダブルクォートで囲まれ、
スペースで区切られたリストでもよく、
ダブルクォートなしの単一の値でもよい。リストは、\f(CW\*(C`=\*(C'\fR,
\&\f(CW\*(C`+=\*(C'\fR, \f(CW\*(C`\-=\*(C'\fR, \f(CW\*(C`!\*(C'\fR
演算子を使って、それぞれ置き換えたり、追加したり、削除したり、
無効にしたりすることができる。
\&\fIenv_check\fR で指定された変数は、
\&\fIenv_reset\fR オプショの有効・無効にかかわらず、
上記のチェックにパスすれば、環境に保存されることになる。
チェックされる環境変数のデフォルトのリストは、root ユーザが \fBsudo\fR に
\&\fI\-V\fR オプションを付けて実行したときに表示される。
.IP "env_delete" 16
.IX Item "env_delete"
\&\fIenv_reset\fR オプションが無効になっているときに、
ユーザの環境から取り除かれる環境変数。このオプションの引き数は、
ダブルクォートで囲まれ、スペースで区切られたリストでもよく、
ダブルクォートなしの単一の値でもよい。
リストは、\f(CW\*(C`=\*(C'\fR, \f(CW\*(C`+=\*(C'\fR, \f(CW\*(C`\-=\*(C'\fR,
\&\f(CW\*(C`!\*(C'\fR 演算子を使って、それぞれ置き換えたり、追加したり、
削除したり、無効にしたりすることができる。
取り除かれる環境変数のデフォルトのリストは、root ユーザが \fBsudo\fR に
\&\fI\-V\fR オプションを付けて実行したときに表示される。
留意すべきは、オペレーティングシステムには、
危険をもたらしかねない変数をいかなる setuid プロセス (\fBsudo\fR もその一つ)
の環境からも取り除くことにしているものが多いということである。
.IP "env_keep" 16
.IX Item "env_keep"
\&\fIenv_reset\fR オプションが有効になっているときでも、
ユーザの環境にそのまま保存される環境変数。このオプションによって、
\&\fBsudo\fR から生み出されるプロセスが受け取る環境を、
きめ細かく制御することが可能になる。このオプションの引き数は、
ダブルクォートで囲まれ、スペースで区切られたリストでもよく、
ダブルクォートなしの単一の値でもよい。リストは、
\&\f(CW\*(C`=\*(C'\fR, \f(CW\*(C`+=\*(C'\fR, \f(CW\*(C`\-=\*(C'\fR,
\&\f(CW\*(C`!\*(C'\fR 演算子を使って、それぞれ置き換えたり、
追加したり、削除したり、無効にしたりすることができる。
保存される変数のデフォルトのリストは、root ユーザが \fBsudo\fR に
\&\fI\-V\fR オプションを付けて実行したときに表示される。
.SH "ファイル"
.IX Header "FILES"
.ie n .IP "\fI/etc/sudoers\fR" 24
.el .IP "\fI/etc/sudoers\fR" 24
.IX Item "/etc/sudoers"
誰が何を実行できるかのリスト
.IP "\fI/etc/group\fR" 24
.IX Item "/etc/group"
ローカルのグループファイル
.IP "\fI/etc/netgroup\fR" 24
.IX Item "/etc/netgroup"
ネットワークグループのリスト
.ie n .IP "\fI/var/log/sudo-io\fR" 24
.el .IP "\fI/var/log/sudo-io\fR" 24
.IX Item "/var/log/sudo-io"
入出力のログファイル (訳注: 厳密には、
入出力のログを記録するファイル群をその下に格納するトップディレクトリ)
.ie n .IP "\fI/var/lib/sudo\fR" 24
.el .IP "\fI/var/lib/sudo\fR" 24
.IX Item "/var/lib/sudo"
\&\fIsudoers\fR セキュリティ・ポリシーが使用するタイムスタンプを格納するディレクトリ。
.IP "\fI/etc/environment\fR" 24
.IX Item "/etc/environment"
Linux や \s-1AIX\s0 で \fB\-i\fR モードを使用するときの初期環境
.SH "用例"
.IX Header "EXAMPLES"
以下は \fIsudoers\fR エントリの見本である。
正直なところ、いささか凝りすぎの部分もある。
まず最初に継承を許可する環境変数をいくつか指定し、
続いて \fIaliases\fR の定義をする。
.PP
.Vb 4
\& # 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
\& 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
.Ve
.PP
以下では、コンパイル時に埋め込まれたデフォルト値のいくつかを変更している。
\&\fBsudo\fR には \fIsyslog\fR\|(3) 経由でログを記録し、
ファシリティにはすべての場合に \fIauth\fR を使用させたい。
フルタイムのスタッフには \fBsudo\fR の訓戒を出さないようにしたい。
ユーザ \fBmillert\fR はパスワードを入力しないでよい。
コマンドを root として実行するときは、
環境変数 \f(CW\*(C`LOGNAME\*(C'\fR, \f(CW\*(C`USER\*(C'\fR,
\&\f(CW\*(C`USERNAME\*(C'\fR を変更したくない。さらに、
\&\fI\s-1SERVERS\s0\fR という \f(CW\*(C`Host_Alias\*(C'\fR に属するマシンでは、
ローカルなログファイルを副本として作り、
ログの記入事項は数年に渡って保存されるので、
ログの各行に間違いなく年度が入るようにする。
最後に \s-1PAGERS\s0 という \f(CW\*(C`Cmnd_Alias\*(C'\fR に属するコマンド
(\fI/usr/bin/more\fR, \fI/usr/bin/pg\fR, \fI/usr/bin/less\fR) については、
シェル・エスケープを無効にする。
.PP
.Vb 7
\& # 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
.Ve
.PP
ユーザ設定が、誰が何を実行できるかを実際に決めている部分だ。
.PP
.Vb 2
\& root ALL = (ALL) ALL
\& %wheel ALL = (ALL) ALL
.Ve
.PP
\&\fBroot\fR と \fBwheel\fR グループのすべてのユーザには、
どのホストでも任意のユーザとしていかなるコマンドでも実行することを認める。
.PP
.Vb 1
\& FULLTIMERS ALL = NOPASSWD: ALL
.Ve
.PP
フルタイムのシステム管理者 (\fBmillert\fR, \fBmikef\fR, \fBdowdy\fR)
は、どのホストでも任意のコマンドを認証なしで実行できる。
.PP
.Vb 1
\& PARTTIMERS ALL = ALL
.Ve
.PP
パートタイムのシステム管理者 ((\fBbostley\fR, \fBjwfox\fR,
\&\fBcrawl\fR) は、どのホストでも任意のコマンドを実行できるが、
その際に認証をしなければならない (このエントリには
\&\f(CW\*(C`NOPASSWD\*(C'\fR タグが指定されていないので)。
.PP
.Vb 1
\& jack CSNETS = ALL
.Ve
.PP
ユーザ \fBjack\fR は、\fI\s-1CSNETS\s0\fR
というエイリアスに属するマシンで、任意のコマンドを実行できる
(すなわち、ネットワークが \f(CW128.138.243.0\fR, \f(CW128.138.204.0\fR,
\&\f(CW128.138.242.0\fR のマシンだ)。この内、\f(CW128.138.204.0\fR にのみ
class C のネットワークであることを示す明示的な (\s-1CIDR\s0 表記の)
netmask がある。\fI\s-1CSNETS\s0\fR のほかのネットワークについては、
ローカルマシンの netmask がマッチングの際に使われることになる。
.PP
.Vb 1
\& lisa CUNETS = ALL
.Ve
.PP
ユーザ \fBlisa\fR は、エイリアスが \fI\s-1CUNETS\s0\fR のいかなるホストでも、
任意のコマンドを実行することができる (すなわち、
\f(CW128.138.0.0\fR という class B ネットワークのマシンだ)。
.PP
.Vb 2
\& operator ALL = DUMPS, KILL, SHUTDOWN, HALT, REBOOT, PRINTING,\e
\& sudoedit /etc/printcap, /usr/oper/bin/
.Ve
.PP
ユーザ \fBoperator\fR は、
用途が簡単な保守管理に限定されたコマンドを実行できる。この場合それは、
バックアップしたり、プロセスを kill したり、印刷システムを操作したり、
システムをシャットダウンしたりするのに関係するコマンドと、
\&\fI/usr/oper/bin/\fR ディレクトリにある任意のコマンドである。
.PP
.Vb 1
\& joe ALL = /usr/bin/su operator
.Ve
.PP
ユーザ \fBjoe\fR は、\fIsu\fR\|(1) を使って operator になることしかできない。
.PP
.Vb 1
\& %opers ALL = (: ADMINGRP) /usr/sbin/
.Ve
.PP
\&\fBopers\fR グループのユーザは、\fI/usr/sbin/\fR にあるコマンドを、
自分自身の資格で、
\&\f(CW\*(C`Runas_Alias\*(C'\fR \fI\s-1ADMINGRP\s0\fR
に属する任意のグループ (すなわち、\fBadm\fR か \fBoper\fR グループ)
として実行できる。
.PP
.Vb 1
\& pete HPPA = /usr/bin/passwd [A\-Za\-z]*, !/usr/bin/passwd root
.Ve
.PP
ユーザ \fBpete\fR は、\fI\s-1HPPA\s0\fR に属するマシンで
root 以外なら誰のパスワードでも変更することを許されている。
上記の指定は、\fIpasswd\fR\|(1) がコマンドラインで複数のユーザ名を
受け付けないことを前提としている点に注意してほしい。
.PP
.Vb 1
\& bob SPARC = (OP) ALL : SGI = (OP) ALL
.Ve
.PP
ユーザ \fBbob\fR は、\fI\s-1SPARC\s0\fR や \fI\s-1SGI\s0\fR に属するマシンで
\&\f(CW\*(C`Runas_Alias\*(C'\fR \fI\s-1OP\s0\fR
に登録されている任意のユーザとして (\fBroot\fR と \fBoperator\fR である)
どんなコマンドでも実行できる。
.PP
.Vb 1
\& jim +biglab = ALL
.Ve
.PP
ユーザ \fBjim\fR は、\fIbiglab\fR ネットグループに属するマシンで、
どんなコマンドでも実行できる。
\&\fBsudo\fR は、\*(L"biglab\*(R" に '+' の接頭辞が付いているので、
それをネットグループだと認識する。
.PP
.Vb 1
\& +secretaries ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser
.Ve
.PP
\&\fBsecretaries\fR ネットグループのユーザは、ユーザの追加や削除はもちろん、
プリンタの管理にも協力する必要がある。
そこで、すべてのマシンでその種のコマンドの実行を認められている。
.PP
.Vb 1
\& fred ALL = (DB) NOPASSWD: ALL
.Ve
.PP
ユーザ \fBfred\fR は、\f(CW\*(C`Runas_Alias\*(C'\fR \fI\s-1DB\s0\fR
の任意のユーザとして (\fBoracle\fR か \fBsybase\fR だ)
パスワードを入力しないでもコマンドを実行することができる。
.PP
.Vb 1
\& john ALPHA = /usr/bin/su [!\-]*, !/usr/bin/su *root*
.Ve
.PP
ユーザ \fBjohn\fR は、\fI\s-1ALPHA\s0\fR に属するマシンで \fIsu\fR\|(1)
を使って root 以外の誰にでもなることができるが、
su にオプションを指定することは許されていない。
.PP
.Vb 1
\& jen ALL, !SERVERS = ALL
.Ve
.PP
ユーザ \fBjen\fR は、\f(CW\*(C`Host_Alias\*(C'\fR \fI\s-1SERVERS\s0\fR
に属するマシン (master, mail, www, ns) を除くいかなるマシンでも、
任意のコマンドを実行できる。
.PP
.Vb 1
\& jill SERVERS = /usr/bin/, !SU, !SHELLS
.Ve
.PP
\&\fBjill\fR は、\f(CW\*(C`Host_Alias\*(C'\fR \fI\s-1SERVERS\s0\fR のいかなるマシンでも
\&\fI/usr/bin/\fR ディレクトリにある任意のコマンドを実行できるが、
\&\fI\s-1SU\s0\fR や \fI\s-1SHELLS\s0\fR という
\&\f(CW\*(C`Cmnd_Aliases\*(C'\fR に属するコマンドは実行できない。
.PP
.Vb 1
\& steve CSNETS = (operator) /usr/local/op_commands/
.Ve
.PP
ユーザ \fBsteve\fR は、ディレクトリ \fI/usr/local/op_commands/\fR
にある任意のコマンドを実行できるが、
operator というユーザとして実行できるだけだ。
.PP
.Vb 1
\& matt valkyrie = KILL
.Ve
.PP
\&\fBmatt\fR も、自分用のワークステーション valkyrie で、ハングしたプロセスの
kill ぐらいはできる必要がある。
.PP
.Vb 1
\& WEBMASTERS www = (www) ALL, (root) /usr/bin/su www
.Ve
.PP
ホスト www で \f(CW\*(C`User_Alias\*(C'\fR \fI\s-1WEBMASTERS\s0\fR
に属するいかなるユーザも (will, wendy, wim だ)、ユーザ www
(web ページの所有者) として任意のコマンドを実行することができる。
単に \fIsu\fR\|(1) で www になってもよい。
.PP
.Vb 2
\& ALL CDROM = NOPASSWD: /sbin/umount /CDROM,\e
\& /sbin/mount \-o nosuid\e,nodev /dev/cd0a /CDROM
.Ve
.PP
いかなるユーザも、\f(CW\*(C`Host_Alias\*(C'\fR が \s-1CDROM\s0 のマシンで
(orion, perseus, hercules)、パスワードを入力することなく
CD-ROM をマウント、アンマウントできる。
上記のコマンドを打ち込むのはユーザにとっていささか面倒なので、
シェルスクリプトとしてカプセル化してしまうのがよいだろう。
.IP "[\fB訳注\fR]:" 8
.IX Item "footnote2"
当然と言えば当然だが、sudo は自ホストの /etc/sudoers しか読まないし、
制御の及ぶ範囲も自ホストだけである。そこで、こういうことになる。
AAA というホストに aaa というユーザがいるとしよう。
ホスト AAA の /etc/sudoers に「ホスト BBB でユーザ aaa は
sudo を介して /bin/ls を実行できる」という記述があったとしても、
ユーザ aaa がホスト AAA から telnet や ssh でホスト BBB にログインし、
BBB 上で sudo を使って ls を実行できるわけではない。それができるためには、
ホスト BBB の /etc/sudoers に「BBB でユーザ aaa は sudo を介して
/bin/ls を実行できる」という記述がなければならないのだ。
ホスト BBB で実行する sudo は BBB の sudo であり、
BBB の sudo は BBB の /etc/sudoers しか読まないのだから。
.Sp
それでは、何故、上記の「用例」で自ホスト以外の設定が行われているのか?
そもそも、sudoers の書式で自ホスト以外のホストを指定できるのは、
何故なのか? ホストに ALL を指定できるのは、何故なのか?
それは、管理しているサイトのすべてのホストの設定を記した
sudoers ファイルを一つ作って、それをすべてのホストにコピーして使う、
そういった使い方を想定しているからだ。
もし、サイト中のすべてのホストの設定を一ヶ所にまとめて置き、
それをすべてのホストに共有させたいのなら
(すなわち、sudo の設定の集中管理がしたいのなら)、
LDAP の採用を考えるべきである。
.SH "セキュリティに関する注意点"
.IX Header "SECURITY NOTES"
一般的に言って、演算子 '!' を使用して \f(CW\*(C`ALL\*(C'\fR
からコマンドの「引き算」をするのは、あまり有力な方法ではない。
ユーザは実行したいコマンドを名前を変えてコピーし、
それからそれを実行するといった簡単な方法で、裏をかくことができるからだ。
たとえば、
.PP
.Vb 1
\& bill ALL = ALL, !SU, !SHELLS
.Ve
.PP
という行は、\fI\s-1SU\s0\fR や \fI\s-1SHELLS\s0\fR
に列記されているコマンドの \fBbill\fR による実行を、
本当に阻止することにはならない。なぜなら、
\&\fBbill\fR としては、そうしたコマンドを単に名前を変えてコピーすればよいし、
エディタやほかのプログラムからシェル・エスケープを利用することもできるからだ。
だから、この種の制限はやった方がまし程度に考えておくべきである
(そして、しっかりした運用方針によって制限の実効力を上げるべきだ)。
.PP
さらに言うと、\fIfast_glob\fR オプションが使われている場合、
パス名に glob 文字 (ワイルドカードとも言う)
が含まれるコマンドを間違いなく無効にすることは不可能である。
その理由は、C ライブラリの
\&\fIfnmatch\fR\|(3) 関数が相対パスを解決することができないからだ。
このことは、権限を許可するルールにとっては、
たいていの場合不便なだけにすぎないが、権限を減らしたり、
取り消したりするルールにとっては、セキュリティ上の問題をもたらしかねない。
.PP
たとえば、\fIsudoers\fR に以下のエントリがあるとしよう。
.PP
.Vb 2
\& john ALL = /usr/bin/passwd [a\-zA\-Z0\-9]*, /usr/bin/chsh [a\-zA\-Z0\-9]*,
\& /usr/bin/chfn [a\-zA\-Z0\-9]*, !/usr/bin/* root
.Ve
.PP
\&\fIfast_glob\fR が有効になっていると、\fBjohn\fR はこれでも
\&\f(CW\*(C`/usr/bin/passwd root\*(C'\fR を実行できてしまう。
\&\fI/usr/bin\fR にカレント・ディレクトリを移動して、
\&\f(CW\*(C`./passwd root\*(C'\fR と打ち込めばよいのだ。
.SH "シェル・エスケープを防止する"
.IX Header "PREVENTING SHELL ESCAPES"
\&\fBsudo\fR があるプログラムを実行した場合、そのプログラムは、
ほかのプログラムの実行も含めて、何でも自由に好きなことができる。
このことがセキュリティ上の問題になりかねないのは、
プログラムがシェル・エスケープを許しているのは珍しいことではなく、
そのために、ユーザが \fBsudo\fR
のアクセス制御やロギングをすり抜けることが可能になるからだ。
よく使うプログラムでシェル・エスケープを許しているものには、
次のようなものがある。
(当然ながら) シェル、エディタ、ページャ、メーラ、ターミナルなど。
.PP
この問題に対処するには、基本的に二つの方法がある。
.IP "制限" 10
.IX Item "restrict"
ユーザに任意のコマンドの実行を許すようなコマンドに対して、
ユーザがアクセスできないようにする。エディタの場合は、制限モードと称して、
シェル・エスケープが使えないモードを持っているものも多い。
とは言え、\fBsudo\fR 経由でエディタを使うのなら、
\&\fBsudoedit\fR を使用する方がより優れた対策である。
シェル・エスケープを提供するプログラムはたくさんあるので、
それを提供しないプログラムのみを使用するようにユーザを制限するのは、
たいてい実現不可能である。
.IP "noexec" 10
.IX Item "noexec"
共有ライブラリをサポートしている多くのシステムには、環境変数 (たいていは
\&\f(CW\*(C`LD_PRELOAD\*(C'\fR) で別の共有ライブラリを指定することによって、
デフォルトのライブラリ関数を置き換える能力がある。
そういったシステムでは、\fBsudo\fR の \fInoexec\fR 機能を使えば、
\&\fBsudo\fR から実行されるプログラムが、
何かほかのプログラムを実行するのを防ぐことができる。
とは言え、これが当てはまるのは、
動的にリンクされたネイティブなプログラムだけだということに留意してほしい。
静的にリンクされたプログラムや、
バイナリ・エミュレーションのもとで動くほかの OS のプログラムには効果がない。
.Sp
\&\fInoexec\fR 機能は SunOS, Solaris, *BSD, Linux, \s-1IRIX\s0,
Tru64 \s-1UNIX\s0, MacOS X, HP-UX 11.x、それに 5.3 以上の \s-1AIX\s0
で使えることがわかっている。環境変数 \f(CW\*(C`LD_PRELOAD\*(C'\fR
をサポートしているたいていのオペレーティングシステムが、
この機能に対応しているはずだ。
使用しているオペレーティングシステムのマニュアルページを調べて、
ダイナミック・リンカについて (通例 ld.so, ld.so.1, dyld, dld.sl, rld,
loader といった名前になっている) \f(CW\*(C`LD_PRELOAD\*(C'\fR
がサポートされているかどうか確認していただきたい。
.Sp
Solaris 10 以上の場合、\fInoexec\fR は 環境変数 \f(CW\*(C`LD_PRELOAD\*(C'\fR
ではなく、Solaris 特権を使用している。
.Sp
あるコマンドに対して \fInoexec\fR を有効にするには、
上記「ユーザ設定」セクションで述べたように、
\&\f(CW\*(C`NOEXEC\*(C'\fR タグを使用する。そのときの例を再掲しよう。
.Sp
.Vb 1
\& aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
.Ve
.Sp
この例では、ユーザ \fBaaron\fR 対して、\fInoexec\fR を有効にした上で、
\&\fI/usr/bin/more\fR と \fI/usr/bin/vi\fR の実行を許可している。
このようにすれば、この二つのコマンドから
(シェルのような) ほかのコマンドを実行することができなくなるわけだ。
使用しているシステムが \fInoexec\fR に対応する能力があるかどうか
よくわからない場合でも、取りあえず試してみることなら、いつだってできる。
\&\fInoexec\fR を有効にして、
シェル・エスケープが可能かどうか確かめてみればよいのだ。
.PP
注意してほしいが、シェル・エスケープの禁止は万能薬ではない。
ルートの権限で動いているプログラムには、ほかにも、危険性のあるさまざまな作業
(ファイルの中身を変更するとか、上書きしてしまうとか) が可能であり、
思いがけずに権限を拡大してしまうこともありえるのだ。特にエディタについて言うと、
ユーザには \fBsudoedit\fR を実行する許可を与えるのが、より安全な方法である。
.SH "デバッグ・フラグ (sudo-1.8.4 の新機能)"
.IX Header "DEBUG FLAGS"
バージョン 1.8.4 以上の \fIsudoers\fR プラグインは、
デバッグのための枠組みに対応しており、
問題が発生したとき、プラグインの内部で何が起きているかを突き止めるために、
それを利用することができる。
その設定は、\fIsudo\fR\|(8) のマニュアルでも説明したように、
\&\fI/etc/sudo.conf\fR ファイルで行うことが可能だ。
.PP
\&\fIsudoers\fR プラグインは、
\&\fBsudo\fR そのものと同じデバッグ・フラグの書式を使用する。
すなわち、\fIsubsystem\fR@\fIpriority\fR である。
.PP
\&\fIsudoers\fR が使用する priority (重大度) を深刻なものから挙げると、
\fIcrit\fR, \fIerr\fR, \fIwarn\fR, \fInotice\fR, \fIdiag\fR, \fIinfo\fR,
\&\fItrace\fR, \fIdebug\fR である。ある priority を指定すると、
それより深刻なすべての priority も併せて指定したことになる。
たとえば、\fInotice\fR という priority を指定すれば、
\&\fInotice\fR レベル以上のデバッグメッセージがログに記録されるわけである。
.PP
\&\fIsudoers\fR では以下のサブシステムが使用できる。
.IP "\fIalias\fR" 10
.IX Item "alias"
\&\f(CW\*(C`User_Alias\*(C'\fR, \f(CW\*(C`Runas_Alias\*(C'\fR,
\&\f(CW\*(C`Host_Alias\*(C'\fR, \f(CW\*(C`Cmnd_Alias\*(C'\fR の処理
.IP "\fIall\fR" 10
.IX Item "all"
あらゆるサブシステムにマッチする
.IP "\fIaudit\fR" 10
.IX Item "audit"
Solaris \s-1BSM\s0 (Basic Security Module) と Linux の監査コード
.IP "\fIauth\fR" 10
.IX Item "auth"
ユーザの認証
.IP "\fIdefaults\fR" 10
.IX Item "defaults"
\&\fIsudoers\fR の \fIDefaults\fR 設定
.IP "\fIenv\fR" 10
.IX Item "env"
環境の取扱い
.IP "\fIldap\fR" 10
.IX Item "ldap"
LDAP を使用する sudoers
.IP "\fIlogging\fR" 10
.IX Item "logging"
ロギングのサポート
.IP "\fImatch\fR" 10
.IX Item "match"
\&\fIsudoers\fR におけるユーザ、グループ、ホスト、
ネットグループのマッチング
.IP "\fInetif\fR" 10
.IX Item "netif"
ネットワークインターフェースの取扱い
.IP "\fInss\fR" 10
.IX Item "nss"
\&\fIsudoers\fR におけるネームサービス・スイッチの取扱い
.IP "\fIparser\fR" 10
.IX Item "parser"
\&\fIsudoers\fR ファイルの解析
.IP "\fIperms\fR" 10
.IX Item "perms"
パーミッションの設定
.IP "\fIplugin\fR" 10
.IX Item "plugin"
プラグインにとって \fImain\fR に相当する
.IP "\fIpty\fR" 10
.IX Item "pty"
擬似 tty に関連したコード
.IP "\fIrbtree\fR" 10
.IX Item "rbtree"
赤黒木 (redblack tree) の内部情報
.IP "\fIutil\fR" 10
.IX Item "util"
ユーティリティ関数群
.SH "セキュリティに関する注意点"
.IX Header "SECURITY NOTES"
\&\fIsudoers\fR はタイムスタンプ・ディレクトリ (デフォルトでは
\&\fI/var/lib/sudo\fR) の所有者を調べて、所有者が root でなかったり、
root 以外のユーザにも書き込み可能だったりする場合には、
そのディレクトリの内容を無視する。root 以外のユーザでも \fIchown\fR\|(2)
を利用して、ファイルの所有者を変えられるシステムでは、
タイムスタンプ・ディレクトリが (たとえば、\fI/tmp\fR といった)
誰にでも書き込めるディレクトリにあると、一般ユーザが、\fBsudo\fR
を実行する前にタイムスタンプ・ディレクトリを作成することが可能になる。もっとも、
\&\fIsudoers\fR はタイムスタンプ・ディレクトリとその中身の、
所有者とモードをチェックするので、起こりえる唯一の被害は、
ファイルを「隠匿」する目的でそのディレクトリに入れておかれることぐらいだ。
これはあまりありそうにないことである。
なぜなら、タイムスタンプ・ディレクトリが root の所有になり、
ほかのユーザによるアクセスが禁じられてしまうと、
ファイルをそこに置いたユーザは、それを回収できなくなるからだ。
.PP
\&\fIsudoers\fR はあまりにも未来に設定されたタイムスタンプを認めない。
タイムスタンプが「現在時 + 2 * \f(CW\*(C`TIMEOUT\*(C'\fR」
より新しい日時だった場合、そのタイムスタンプは無視され、
\&\fBsudo\fR がログに記録して、警告を発する。このようになっているのは、
一般ユーザがファイルの所有者を変えられるシステムで、
タイムスタンプ・ディレクトリが誰にでも書き込めるディレクトリにある場合に、
ユーザがいい加減な日付を付けて勝手に自分のタイムスタンプを作れないようにするためである。
.PP
ブートタイムを参照できるシステムでは、
タイムスタンプがマシンがブートするよりも前の日時になっている場合、
\&\fIsudoers\fR はそれを無視する。
.PP
タイムスタンプ・ファイルはファイルシステム中に作られるので、
ユーザのログイン・セッションが終わっても、残っている。
そのため、次のようなことが起こりえる。ユーザがログインし、
認証してから \fBsudo\fR を使ってコマンドを実行して、ログアウトする。
再びログインして、認証なしで \fBsudo\fR を実行する。
タイムスタンプ・ファイルの内容更新日時 (modification time) が
\&\f(CW\*(C`5\*(C'\fR 分以内であれば
(あるいは、\fIsudoers\fR で設定されたタイムアウト時間以内であれば)、
そういうことが可能になってしまうのだ。
\&\fItty_tickets\fR オプションが有効になっている場合、
タイムスタンプは tty ごとに別々に作られるが、
それでも、ユーザセッションが終わった後まで生き残ってしまう。devpts
ファイルシステムを使用している Linux や、devices ファイルシステムを持つ Solaris、
それに、デバイスを作成するごとに、その inode 番号をひたすら増やしていく
devfs ファイルシステムを利用しているシステム (たとえば、Mac \s-1OS\s0 X) では、
tty ごとのタイムスタンプ・ファイルがいつ用済みになるかを判定することができるので、
\&\fIsudoers\fR はそうしたタイムスタンプ・ファイルを無視することになる。
だが、システムの管理者はこの機能を当てにしない方がよい。
どのシステムでも利用できるとはかぎらないからだ。
.PP
もし ユーザに許可するコマンドが \f(CW\*(C`ALL\*(C'\fR になっているならば、
ユーザが自分でプログラムを作って
(あるいは、シェルを自分専用に別の名前でコピーして)、
ルート・シェルを獲得するのを防ぐことはできない。
ユーザ設定でどんな項目に '!' を付けようとも防止不可能である。
.SH "関連項目"
.IX Header "SEE ALSO"
\&\fIrsh\fR\|(1), \fIsu\fR\|(1), \fIfnmatch\fR\|(3), \fIglob\fR\|(3), \fImktemp\fR\|(3), \fIstrftime\fR\|(3),
\&\fIsudoers.ldap\fR\|(5), \fIsudo_plugin\fR\|(8), \fIsudo\fR\|(8), \fIvisudo\fR\|(8)
.SH "警告"
.IX Header "CAVEATS"
\&\fIsudoers\fR ファイルの編集には、\fB必ず\fR \fBvisudo\fR
コマンドを使うべきだ。
そうすれば、\fBvisudo\fR がファイルをロックし、文法のチェックをやってくれる。
\&\fIsudoers\fR ファイルに文法的な間違いがあると、\fBsudo\fR が動かないので、
\&\fIsudoers\fR ファイルには文法エラーが絶対にあってはならないのだ。
.PP
ネットグループを (ユーザについてではなく) マシンについて使用し、
\&\fInetgroup\fR ファイルに完全修飾ホスト名を記載する場合は
(たいていそうするものだが)、そのマシンのホスト名を
\&\f(CW\*(C`hostname\*(C'\fR コマンドが出力する通りの完全修飾名で書くか、
さもなければ、\fIsudoers\fR ファイルで
\&\fIfqdn\fR オプションを使うかしなければならない。
.SH "バグ"
.IX Header "BUGS"
\&\fBsudo\fR にバグを発見したと思ったら、下記のページにアクセスして、
バグレポートを提出していただきたい。
.br
http://www.sudo.ws/sudo/bugs/
.SH "サポート"
.IX Header "SUPPORT"
ある程度の無料サポートが sudo-users メーリングリストを通して利用できる。
購読やアーカイブの検索には下記 URL を御覧になること。
.br
http://www.sudo.ws/mailman/listinfo/sudo\-users
.SH "免責"
.IX Header "DISCLAIMER"
\&\fBsudo\fR は「現状のまま」提供される。
明示的な、あるいは黙示的ないかなる保証も、
商品性や特定目的への適合性についての黙示的な保証を含め、
またそれのみに止まらず、これを否認する。詳細な全文については、
\&\fBsudo\fR と一緒に配布されている \s-1LICENSE\s0 ファイルや、
下記 Web ページを御覧いただきたい。
.br
http://www.sudo.ws/sudo/license.html
|