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
|
<!--
The FreeBSD Documentation Project
$FreeBSD$
-->
<chapter id="mac">
<chapterinfo>
<authorgroup>
<author>
<firstname>Tom</firstname>
<surname>Rhodes</surname>
<contrib>Escrito por </contrib>
</author>
</authorgroup>
</chapterinfo>
<title>Mandatory Access Control</title>
<sect1 id="mac-synopsis">
<title>Sinopsis</title>
<indexterm><primary>MAC</primary></indexterm>
<indexterm>
<primary>Mandatory Access Control</primary>
<see>MAC</see>
</indexterm>
<para>&os; 5.X introdujo nuevas extensiones de seguridad del
proyecto TrustedBSD basado en el escrito &posix;.1e. Dos de los
mecanismos de seguridad más significativos son las
facilidades de Listas de control de acceso del sistema de archivos
(Access Control Lists,<acronym>ACLs</acronym>) y control de acceso
obligatorio (Mandatory Access Control, <acronym>MAC</acronym>).
El control de acceso obligatorio permite que nuevos módulos
de control de acceso sean cargados, implementando nuevas
políticas de seguridad. Algunas brindan protecciones de un
angosto subconjunto del sistema, endureciendo un servicio en
particular, mientras otros proveen seguridad etiquetada comprensible
a traveés de todos las áreas y objetos.
La parte obligatoria de la definición proviene del hecho
que la imposición de los controles es realizada por
administradores y el sistema, y no es dejada a la discreción
de los usuarios como se hace con el control de acceso discrecional
(discretionary access control, <acronym>DAC</acronym>, los
permisos de archivo y System V <acronym>IPC</acronym> estándares
en &os;).</para>
<para>Este capítulo se enfocará en la estructura
del control de acceso obligatorio (MAC Framework), y un
conjunto de módulos enchufables de políticas de
seguridad habilitando varios mecanismos de seguridad.</para>
<para>Despues de leer este capítulo, usted sabrá:</para>
<itemizedlist>
<listitem>
<para>Que son los módulos de políticas de seguridad
<acronym>MAC</acronym> actualmente incluidos en &os; y sus
mecanismos asociados.</para>
</listitem>
<listitem>
<para>Que implementan los módulos de políticas de
seguridad <acronym>MAC</acronym> así como la diferencia
entre una política etiquetada y no etiquetada.</para>
</listitem>
<listitem>
<para>Como configurar eficientemente un sistema para
utilizar la estructura <acronym>MAC</acronym>.</para>
</listitem>
<listitem>
<para>Como configurar los diferentes módulos de
políticas de seguridad incluidos con la estructura
<acronym>MAC</acronym>.</para>
</listitem>
<listitem>
<para>Como implementar un ambiente más seguro utilizando
la estructura <acronym>MAC</acronym> y los ejemplos
mostrados.</para>
</listitem>
<listitem>
<para>Como probar la configuración <acronym>MAC</acronym>
para asegurar que la estructura ha sido implementada
correctamente.</para>
</listitem>
</itemizedlist>
<para>Antes de leer este capítulo, usted debería:</para>
<itemizedlist>
<listitem>
<para>Entender las bases de &unix; y &os;
(<xref linkend="basics">).</para>
</listitem>
<listitem>
<para>Estar familiarizado
con lo basico de la configuración/compilación
del kernel
(<xref linkend="kernelconfig">).</para>
</listitem>
<listitem>
<para>Tener cierta familiaridad con seguridad y como
se relaciona con &os; (<xref linkend="security">).</para>
</listitem>
</itemizedlist>
<warning>
<para>El uso inadecuado de la
información en este capítulo puede provocar
pérdida de acceso al sistema, irritación de
los usuarios, o inhabilidad para accesar las características
que brinda X11. Aún más importante,
<acronym>MAC</acronym> no debe confiarse para asegurar un sistema
completamente. La estructura <acronym>MAC</acronym> solo aumenta
las políticas de seguridad existentes; sin prácticas
de seguridad sonadas y revisiones de seguridad constantes el
sistema nunca será completamente seguro.</para>
<para>También debe notarse que los ejemplos contenidos
dentro de este capítulo son solo eso, ejemplos. No
se recomienda que estas configuraciones en particular sean
desplegadas en un sistema en producción. Implementar
los varios módulos de políticas de seguridad
toma un buen de pensamiento. Alguien que no entiende
completamente como funciona todo puede encontrarse en la
situación de regresar a configurar muchos archivos
y directorios a través de todo el sistema.</para>
</warning>
<sect2>
<title>Que es lo que no se cubrirá</title>
<para>Este capitulo cubre un amplio rango de temas de seguridad
relacionados a la estructura <acronym>MAC</acronym>; sin embargo,
el desarrollo de nuevos módulos de políticas de
seguridad <acronym>MAC</acronym> no serán cubiertos. Un
número de módulos de políticas de seguridad
incluidos con la estructura <acronym>MAC</acronym> tienen
características específicas las cuales son provistas
tanto para prueba como para desarrollo de nuevos módulos.
Estos incluyen &man.mac.test.4;, &man.mac.stub.4; y &man.mac.none.4;.
Para más información sobre estos módulos de
políticas de seguridad y los varios mecanismos que brindan,
por favor revise las páginas de manual.</para>
</sect2>
</sect1>
<sect1 id="mac-inline-glossary">
<title>Términos clave en este capítulo</title>
<para>Antes de leer este capítulo, se deben explicar
algunos términos clave. Esto tal vez borre cualquier
confusión que pueda ocurrir y evite la indrocucción
abrupta de nueva información y términos.</para>
<itemizedlist>
<listitem>
<para><emphasis>compartimiento</emphasis>: Un compartimiento
es un conjunto de programas y datos a ser particionados o
separados, en donde a usuarios se les proporciona acceso
explícito a componentes específico de un sistema.
También, un compartimiento representa un agrupamiento,
como un grupo de trabajo, departamento, proyecto o tópico.
Usando compartimientos es posible implementar una política
de seguridad de necesita-saber.
</listitem>
<listitem>
<para><emphasis>integridad</emphasis>: Integridad, como
un concepto clave, es el nivel de confianza que puede
ser puesto en un dato. Mientras el nivel de integridad
del dato es elevado también lo hace la habilidad
de confiar en ese dato.</para>
</listitem>
<listitem>
<para><emphasis>etiqueta</emphasis>: Una etiqueta es un
atributo de seguridad el cual puede ser aplicado a
archivos, directorios o a otros componentes en el
sistema. Se puede considerar una estampilla de seguridad;
cuando una etiqueta es colocada en un archivo describe
las propiedades de seguridad para ese archivo específico
y solo permitirá acceso de archivos, usuarios,
recursos, etc. con características de seguridad
similares. El significado e interpretación de valores
de etiquetas depende de la configuración de la
política: mientras algunas políticas pueden
tratar una etiqueta como la representación de
la integridad o secreto de un objeto, otras políticas
pueden usar etiquetas para mantener reglas de acceso.</para>
</listitem>
<listitem>
<para><emphasis>nivel</emphasis>: El aumento o disminución
de un atributo de seguridad. Si el nivel incrementa,
su seguridad es considerada que se eleva también.</para>
</listitem>
<listitem>
<para><emphasis>multietiqueta</emphasis>: La propiedad
<option>multilabel</option> es una opción del
sistema de archivos la cual puede ser activada en modo
mono usuario usando la utilidad &man.tunefs.8; , durante
el arranque usando el archivo &man.fstab.5; , o durante
la creación de un nuevo sistema de archivos.
Esta opción le permitirá a un administrador
aplicar diferentes etiquetas <acronym>MAC</acronym> en
diferentes objetos. Esta opción
solamente aplica a módulos de políticas de
seguridad que soporten etiquetamiento.</para>
</listitem>
<listitem>
<para><emphasis>objeto</emphasis>: Un objeto o un
objeto de sistema es una entidad a través de
la cual la información fluye bajo la dirección
de un <emphasis>sujeto</emphasis>.
Esto incluye directorios, archivos, campos, pantallas,
teclados, memoria, almacenamiento magnético,
impresoras o cualquier otro dispositivo de
almacenamiento/transporte. Básicamente, un objeto
es un contenedor de datos o un recurso del sistema;
el acceso efectivo a un <emphasis>objeto</emphasis> significa
acceso a los datos.</para>
</listitem>
<listitem>
<para><emphasis>política</emphasis>: Una colección
de reglas que definen como se van a lograr los objetivos.
Una <emphasis>política</emphasis> usualmente documenta
como ciertos elementos deben ser manejados. Este capítulo
considerará el término
<emphasis>política</emphasis> en este contexto como
<emphasis>política de seguridad</emphasis>; por ejemplo,
una colección de reglas que controlan el flujo de datos e
información y define quién tendrá acceso a
esos datos e información.</para>
</listitem>
<listitem>
<para><emphasis>sensitividad</emphasis>: Usualmente utilizado
al discutir <acronym>MLS</acronym>. Un nivel de sensitividad
es un término usado para describir que tan importante
o secreto debe ser el dato.
Mientras el nivel de sensitividad
del dato es incrementado también lo hace la
importancia del secreto o confidencialidad del dato.</para>
</listitem>
<listitem>
<para><emphasis>etiqueta única</emphasis>: Una etiqueta
única es cuando todo el sistema de archivos
utiliza una etiqueta para imponer control de acceso
sobre el flujo de datos. Cuando un sistema de archivos
tiene esto activado, lo cual es en cualquier momento
que la opción <option>etiqueta múltiple</option>
no está activada, todos los archivos concordarán
a la misma configuración de etiqueta.</para>
</listitem>
<listitem>
<para><emphasis>sujeto</emphasis>: Un sujeto es cualquier
entidad activa que provoca que la información
fluya entre <emphasis>objetos</emphasis>; por ejemplo,
un usuario, usuario procesador, proceso de sistema, etc.
En &os;, esto es casi siempre un hilo actuando en un
proceso en beneficio de un usuario..</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 id="mac-initial">
<title>Explicación de MAC</title>
<para>Con todos estos nuevos terminos en mente, considere
como la estructura <acronym>MAC</acronym> aumenta la
seguridad de el sistema como un todo. Los varios módulos
de políticas de seguridad provistos por la estructura
<acronym>MAC</acronym> pueden ser usados para proteger
la red y los sistemas de archivos, bloquear usuarios de
accesar ciertos puertos y sockets, y más. Quizás
el mejor uso de los módulos de políticas es el
de mezclarlos juntos, por medio del cargado de varios módulos
de políticas de seguridad al mismo tiempo para un
ambiente de seguridad multicapa. En un ambiente de seguridad
multicapa, múltiples módulos de políticas
están en efecto para mantener la seguridad. Esto es diferente
a un política de endurecimiento, la cual tipicamente endurece
elementos de un sistema que es utilizado solamente para propositos
específicos. El único lado malo es la carga
administrativa en casos de sistemas de archivos con etiquetas
múltiples, configuraciones de control de acceso a red
usuario por usuario, etc.</para>
<para>Estas desventajas son mínimas cuando se comparan
con el efecto perdurable de la estructura; por ejemplo, la
habilidad de seleccionar y elegir que políticas son
requeridas para una configuración específica mantiene
la sobrecarga de ejecución abajo. La reducción de
soporte para políticas innecesarias puede elevar la
ejecución total del sistema así como también
ofrecer flexibilidad de elección. Una buena
implementación podría considerar los requerimientos
de seguridad total e implementar efectivamente los varios
módulos de políticas de seguridad ofrecidos por la
estructura.</para>
<para>Así un sistema utilizando una propiedad
<acronym>MAC</acronym> debería al menos garantizar que a un
usuario no se le permitirá cambiar atributos de seguridad a
su antojo; todos las utilidades de usuario, programas y scrips deben
trabajar dentro de las restricciones de las reglas de acceso
provistas por el módulo de políticas de seguridad
seleccionado; y ese control total de las reglas de acceso
<acronym>MAC</acronym> están en las manos del administrador
del sistema.</para>
<para>Es deber solamente del administrador de sistema seleccionar
cuidadosamente los módulos de políticas de seguridad
correctos. Algunos ambientes pueden necesitar limitar el control
de acceso a través de la red; en estos casos los
módulos de políticas &man.mac.portacl.4;,
&man.mac.ifoff.4; e incluso &man.mac.biba.4; pueden ser un buen
punto de inicio. En otros casos, confidencialidad estricta de
objetos del sistema de archivos puede ser requerida. Módulos
de políticas como &man.mac.bsdextended.4; y &man.mac.mls.4;
existen para este propósito.</para>
<para>Desiciones de política pueden hacerse basándose
en la configuración de red. Quizás solo
a ciertos usuarios se les debería permitir acceso
a facilidades proporcionadas por &man.ssh.1; para
accesar la red o Internet. El módulo de políticas
&man.mac.portacl.4; podría ser la opción para estas
situaciones. Pero, ¿que debería hacerse en el caso de sistemas
de archivos?, ¿los accesos a ciertos directorios deberían ser
cortados de otros grupos o usuarios específicos?, ¿o
deberíamos limitar accesos a usuarios o utilidades a archivos
específicos poniendo ciertos objetos como clasificados?</para>
<para>En el caso de sistemas de archivo, el acceso a los
objetos puede ser considerado confidencial a algunos
usuarios, pero no a otros. Por ejemplo, un gran grupo de
desarrolladores puede ser dividido en pequeños grupos
de individuos. Desarrolladores en el proyecto A no se les
debe permitir accesar objetos escritos por desarrolladores
del proyecto B. Pero pueden necesitar accesar objetos
creados por desarrolladores del proyecto C; esa es una
situación complicada. Utilizando los diferentes
módulos de políticas de seguridad proporcionados
por la estructura <acronym>MAC</acronym>; los usuarios pueden
ser divididos en estos grupos y entonces otorgarles acceso
a las áreas apropiadas sin temor de filtrado de
información.</para>
<para>Así, cada módulo de poliíticas de seguridad
tiene un modo único de tratar con la seguridad de un sistema en
general. La selección de módulo debería basarse
en una poliítica de seguridad bien planeada. En muchos casos,
la poliítica general tal vez necesite ser revisada y
reimplementada en el sistema. Entender los diferentes módulos
de poliíticas de seguridad ofrecidos por la estructura
<acronym>MAC</acronym> le ayudará a los administradores a
elegir las mejores poliíticas para sus situaciones.</para>
<para>El kernel por omisión de &os; no incluye la opción
para la estructura <acronym>MAC</acronym>; así que la
siguiente opción del kernel debe ser agregada antes de
usar cualquiera de los ejemplos o la información de
este capítulo:</para>
<programlisting>options MAC</programlisting>
<para>Y el kernel requerirá una recosntrucción y
una reinstalación.</para>
<caution>
<para>Mientras varias páginas de manual para módulos
de políticas <acronym>MAC</acronym> afirman que pueden
ser construidos dentro del kernel, es posible cortar el acceso
del sistema a la red y más. Implementar <acronym>MAC</acronym>
es muy parecido a implementar un firewall, se debe tener
cuidado en prevenir que el sistema quede bloqueado totalmente.
La habilidad de retornar a una configuración previa
debería ser considerada durante la implementación
de <acronym>MAC</acronym>, remotamente debe realizarse con
precaución extrema.</para>
</caution>
</sect1>
<sect1 id="mac-understandlabel">
<title>Entendiendo etiquetas MAC</title>
<para>Una etiqueta <acronym>MAC</acronym> es un atributo de
seguridad el cual puede ser aplicado a sujetos y objetos
a través del sistema.</para>
<para>Al aplicar una etiqueta, el usuario debe ser capaz de
comprender, exactamente, lo que se está haciendo.
Los atributos dsponibles en un objeto dependen del módulo
de política cargado, y esos módulos de política
interpretan sus atributos de diferentes maneras. Si la
configuración es inapropiada debido a falta de
compresnsión, o inhabilidad de comprender las implicaciones,
el resultado puede ser lo inesperado y tal vez, la conducta no
deseada del sistema.</para>
<para>La etiqueta de seguridad en un objeto es utilizada como
parte de una desición de control de acceso de seguridad
por una política. Con algunas políticas, la
etiqueta por si misma contiene toda la información
necesaria para hacer una desición; en otros modelos,
las etiquetas pueden ser procesadas como parte de un conjunto
más grande de reglas, etc.</para>
<para>Por ejemplo, activando la etiqueta de <literal>biba/low</literal>
en un archivo representará una etiqueta mantenida por el
módulo de políticas de seguridad Biba, con un valor
de <quote>low</quote>.</para>
<para>Algunos módulos de políticas que soportan la
propiedad de etiquetado en &os; ofrecen tres etiquetas
específicas predefinidas. Estas son las etiquetas
low, high, y equal. Aunque refuerzan el control de acceso de
una manera diferente con cada módulo de políticas,
puede estar seguro que la etiqueta low será la
configuración más baja, la etiqueta equal
provocará que el sujeto o el objeto sea deshabilitado o no
sea afectado, y la etiqueta high impondrá la
configuración más alta disponible en los
módulos de políticas Biba y <acronym>MLS</acronym>.
</para>
<para>Dentro de ambientes de sistemas de archivos con etiqueta
única, solamente una etiqueta puede ser utilizada en objetos.
Esto impondrá un conjunto de permisos de acceso a
través del sistema entero y en muchos ambientes puede ser
todo lo que se requiera. Existen algunos casos donde etiquetas
múltiples pueden ser activadas en objetos o sujetos en el
sistema de archivos. Para esos casos, la opción
<option>multilabel</option> puede ser pasada a &man.tunefs.8;.</para>
<para>en el caso de Biba y <acronym>MLS</acronym>, una etiqueta
numérica puede activarse para indicar el nivel preciso
de control jerárquico. Este nivel numérico es
utilizado para particionar o para ordenar información
en difeentes grupos de digamos, clasificación permitiendo
acceso solamente a ese grupo o a un nivel de grupo superior.</para>
<para>En la mayoría de los casos el administrador solo
estará configurando una etiqueta única para
utilizar a través del sistema de archivos.</para>
<para><emphasis>¡Un momento, esto es similar a <acronym>DAC</acronym>!
Pensé que <acronym>MAC</acronym> daba control estrictamente
al administrador.</emphasis> Esa declaración todavía
se mantiene como verdadera, hasta cierto grado ya que
<username>root</username> es el único en control y el que
configura las políticas para que los usuarios sean colocados
en las categorías/niveles apropiados. Desafortunadamente,
muchos módulos de políticas pueden restringir al
usuario <username>root</username> también. Control
básico sobre objetos serán entonces liberados al
grupo, pero <username>root</username> puede revocar o modificar
las configuraciones en cualquier momento. Este es el modelo
jerárquico/aclaramiento cubierto por políticas tales
como Biba y <acronym>MLS</acronym>.</para>
<sect2>
<title>Configuración de etiquetas</title>
<para>Virtualmente todos los aspectos de configuración de
módulos de políticas de etiquetas serán
realizados usando utilidades del sistema base. Estos comandos
brindan una interfaz simple para la configuración de
objetos o sujetos o para manipulación y verificación
de la configuración.</para>
<para>Toda la configuración puede hacerse usando
las utilidades &man.setfmac.8; y &man.setpmac.8;.
El comando <command>setfmac</command> es usado para
activar etiquetas <acronym>MAC</acronym> en objetos del
sistema mientras que el comando <command>setpmac</command>
es usado para activar etiquetas en sujetos del sistema.
Observe:</para>
<screen>&prompt.root; <userinput>setfmac biba/high test</userinput></screen>
<para>Si no ocurrió algún error con el comando de
arriba, se nos regresará el prompt. El único momento
en que estos comandos no son silentes es cuando se produce
un error; similarmente a los comandos
&man.chmod.1; y &man.chown.8;. En algunos casos el error
puede ser un <errorname>Permission denied</errorname> y es
obtenido usualmente cuando la etiqueta está siendo
activada o modificada en un objeto el cual está
restringido.<footnote><para>Otras condiciones pueden producir
fallas diferentes. Para ilustrar, el archivo puede no ser
propiedad del usuario tratando de reetiquetar el objeto, el
objeto puede que no exista o que sea de solo lectura. Una
política obligatoria no permitirá al proceso
reetiquetar el archivo, debido tal vez a una propiedad del
archivo, una propiedad del proceso o una propiedad del
valor de la nueva etiqueta propuesta. Por ejemplo: un usuario
corriendo a integridad baja trata de cambiar una etiqueta
de un archivo con integridad baja (low) a una etiqueta de
integridad alta (high).</para></footnote> El administrador
puede usar los siguientes comandos para lograr esto:</para>
<screen>&prompt.root; <userinput>setfmac biba/high test</userinput>
<errorname>Permission denied</errorname>
&prompt.root; <userinput>setpmac biba/low setfmac biba/high test</userinput>
&prompt.root; <userinput>getfmac test</userinput>
test: biba/high</screen>
<para>Como vemos arriba, <command>setpmac</command>
puede usarse para anular las configuraciones del módulo de
políticas asignando una etiqueta diferente al proceso
invocado. La utilidad
<command>getpmac</command> es utilizada generalmente con procesos
en ejecución, como <application>sendmail</application>:
aunque toma un identificador de proceso en
lugar de un comando la lógica es extremadamente
similar. Si usuarios tratan de manipular un archivo al
que no está a su acceso, dependiendo de las
reglas del módulo de políticas cargado,
el error
<errorname>Operation not permitted</errorname> será
desplegado por la función <function>mac_set_link</function>.
</para>
<sect3>
<title>Tipos comunes de etiquetas</title>
<para>Para los módulos &man.mac.biba.4;, &man.mac.mls.4;
y &man.mac.lomac.4;, se tiene la posibilidad de asignar
etiquetas simples. Estas toman la forma de high,
equal y low, a continuación una breve descripción
de lo que estas etiquetas brindan:</para>
<itemizedlist>
<listitem>
<para>La etiqueta <literal>low</literal> es considerada
la configuración de etiqueta más baja que
un objeto o sujeto puede tener. Activando esto en
objetos o sujetos bloqueará su acceso a objetos
o sujetos marcados como high.</para>
</listitem>
<listitem>
<para>La etiqueta <literal>equal</literal> solo debería
ponerse en objetos considerados excluidos de la
política.</para>
</listitem>
<listitem>
<para>La etiqueta <literal>high</literal> proporciona a un
objeto o sujeto la configuración más alta
posible.</para>
</listitem>
</itemizedlist>
<para>Con respeto a cada módulo de políticas, cada
una de esas configuraciones establecerá una directiva
de flujo de información diferente. Leyendo las páginas
de manual pertinentes le explicarán en mayor medida
las cualidades de las configuraciones de estas etiquetas
genéricas.</para>
<sect4>
<title>Configuración avanzada de etiquetas</title>
<para>Números de grado numérico usados por
<literal>comparación:compartimiento+compartimiento</literal>; así
lo siguiente:</para>
<programlisting>biba/10:2+3+6(5:2+3-20:2+3+4+5+6)</programlisting>
<para>Puede ser interpretado como:</para>
<para><quote>Etiqueta de política Biba</quote>/<quote>Grado 10</quote>
:<quote>Compartimientos 2, 3 y 6</quote>:
(<quote>grado 5 ...</quote>)</para>
<para>En este ejemplo, el primer grado podría ser
considerao el <quote>grado efectivo</quote> con
<quote>compartimientos efectivos</quote>, el segundo
grado es el grado bajo y el último es el grado
alto. En la mayoría de configuraciones estas
opciones no serán utilizadas; de hecho se ofrecen
para configuraciones más avanzadas.</para>
<para>Cuando se aplica a objetos del sistema, solo tendrán
un grado/compartimiento actual tanto en oposición a sujetos
del sistema como reflejen el rango de derechos disponibles
en el sistema, e interfaces de red, donde sean utilizados
para control de acceso.</para>
<para>El grado y compartimientos en un par sujeto y objeto
son usados para construir una relación referida
como <quote>dominante</quote>, en la cual un sujeto domina
un objeto, el objeto domina al sujeto, ninguno domina al
otro, o ambos se dominan. El caso <quote>ambos dominan</quote>
ocurre cuando las dos etiquetas son iguales. Debido a la
naturaleza de flujo de información de Biba, usted
tiene derecho a un conjunto de compartimientos,
<quote>necesita saber</quote>, que pueden corresponder
a proyectos, pero los objetos también tiene un
conjunto de compartimientos.
Los usuarios deben de subactivar sus derechos usando
<command>su</command> o <command>setpmac</command> para
poder accesar objetos en un compartimiento desde el cual
no estén restringidos.</para>
</sect4>
</sect3>
<sect3>
<title>Configuraciones de usuarios y etiquetas</title>
<para>Los mismos usuarios requieren tener etiquetas para
que sus archivos y procesos puedan interactuar
adecuadamente con la política de seguridad
definida en el sistema. Esto se configura a través
del archivo <filename>login.conf</filename> mediante el
uso de clases de login. Cada módulo de políticas
que utiliza etiquetas implementará las configuraciones
de clases de usuario.</para>
<para>Una entrada de ejemplo conteniendo cada configuración
de módulo de políticas es desplegado abajo:</para>
<programlisting>default:\
:copyright=/etc/COPYRIGHT:\
:welcome=/etc/motd:\
:setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\
:path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:\
:manpath=/usr/share/man /usr/local/man:\
:nologin=/usr/sbin/nologin:\
:cputime=1h30m:\
:datasize=8M:\
:vmemoryuse=100M:\
:stacksize=2M:\
:memorylocked=4M:\
:memoryuse=8M:\
:filesize=8M:\
:coredumpsize=8M:\
:openfiles=24:\
:maxproc=32:\
:priority=0:\
:requirehome:\
:passwordtime=91d:\
:umask=022:\
:ignoretime@:\
:label=partition/13,mls/5,biba/10(5-15),lomac10[2]:</programlisting>
<para>La opción <literal>label</literal> es usada para
activar la etiqueta de clase de usuario por omisión
la cual será impuesta por <acronym>MAC</acronym>.
A los usuarios no se les permitirá nunca modificar
este valor, así pueda ser considerado no óptimo
para el caso del usuario. En un configuración real,
sin embargo, el administrador nunca deseará habilitar
todos los módulos de políticas.
Se recomienda que el resto de este capítulo sea revisado
antes de que cualquiera de estas configuraciones sea implementada.
</para>
<note>
<para>Los usuarios pueden cambiar su etiqueta despues del
login inicial; sin embargo, este cambio está sujeto
a la restricción de la política.
El ejemplo de arriba le dice a la política Biba
que la integridad mínima de un proceso es 5, su
máximo es 15, pero la etiqueta por omisión
efectiva es 10. El proceso correrá a 10 hasta que
elija cambiar de etiqueta, quizás el usuario
utilice el comando setpmac, el cual será restringido
por Biba a el rango activado al momento de login.</para>
</note>
<para>En todos los casos, despues de
un cambio a <filename>login.conf</filename>, la
base de datos de capacidades de clases de login debe
ser reconstruida usando <command>cap_mkdb</command>
y esto será reflejado a lo largo de cada
ejemplo y discusión futura.</para>
<para>Es útil notar que muchos sitios pueden
tener un grán número de usuarios en
particular que requieren varias clases de usuarios
diferentes. La planeación profunda se requiere
ya que esto puede tornarse extremadamente difícil
de administrar.</para>
<para>Versiones futuras de &os; incluirán una nueva
manera de tratar con el mapeo de usuarios a etiquetas;
de todas maneras, esto no estará disponible hasta
despues de &os; 5.3.</para>
</sect3>
<sect3>
<title>Interfaces de red y configuración de etiquetas</title>
<para>Se pueden colocar etiquetas en interfaces de red también
para ayudar a controlar el flujo de datos a través de
la red. En todos los casos éstas funcionan de la misma
manera que las políticas funcionan con respecto
a objetos. Los usuarios con configuraciones altas en
<literal>biba</literal>, por ejemplo, no se les permitirá
accesar interfaces de red con una etiqueta de low.</para>
<para>La <option>maclabel</option> puede ser pasada a
<command>ifconfig</command> al activar la etiqueta
<acronym>MAC</acronym> en interfaces de red. Por
ejemplo:</para>
<screen>&prompt.root; <userinput>ifconfig bge0 maclabel biba/equal</userinput></screen>
<para>activará la etiqueta <acronym>MAC</acronym> de
<literal>biba/equal</literal> en la interfaz &man.bge.4;.
Cuando se está utilizando una configuración
similar a
<literal>biba/high(low-high)</literal> la etiqueta entera
debería ser entrecomillada; de otra manera se
retornará un error.</para>
<para>Cada módulo de políticas que soporta
etiquetamiento posee un sintonizable el cual puede ser
usado para deshabilitar la etiqueta <acronym>MAC</acronym>
en interfaces de red. Configurando la etiqueta a
<option>equal</option> tendrá un efecto similar.
Revise la salida de <command>sysctl</command>, las páginas
de manual de políticas, o incluso la información
encontrada má adelante en este capítulo para
esos sintonizables.</para>
</sect3>
</sect2>
<sect2>
<title>¿Etiqueta única o miltietiqueta?</title>
<!-- Stopped here with my edits -->
<para>Por omisión el sistema usará la
opción <option>singlelabel</option>. Pero, ¿que
significa esto para el administrador?, existen varias
diferencias las cuales, por su propio derecho, ofrecen
pros y contras a la flexibilidad en el modelo de
seguridad de los sistemas.</para>
<para>La opción <option>singlelabel</option> solo
permite una etiqueta, para ilustrar, <literal>biba/high</literal>
para ser usado para cada objeto o sujeto. Brinda una menor
carga de administración pero decrementa la flexibilidad
de políticas que soportan etiquetado. Muchos administradores
pueden querer utilizar la opción <option>multilabel</option>
en sus políticas de seguridad.</para>
<para>La opción <option>multilabel</option> le permitirá
a cada objeto o sujeto tener su propia etiqueta <acronym>MAC</acronym>
independiente en lugar de la opción
<option>singlelabel</option> estándar la cual solo
permitirá una etiqueta en toda la partición. La
opciones de etiqueta <option>multilabel</option> y
<option>single</option> solo se requieren para las
políticas que implementan la propiedad de etiquetado,
incluyendo las políticas Biba, Lomac, <acronym>MLS</acronym>
y <acronym>SEBSD</acronym>.</para>
<para>En muchos casos, la <option>multilabel</option> puede que no
se necesite activar. Considere la siguiente situación y
el siguiente modelo de seguridad:</para>
<itemizedlist>
<listitem>
<para>servidor de Web &os; usando la estructura
<acronym>MAC</acronym> y una mezcla de las
diferentes políticas.</para>
</listitem>
<listitem>
<para>Esta máquina solo requiere una etiqueta,
<literal>biba/high</literal>, para todo en el sistema.
Aquí el sistema de archivos no requerirá
la opción <option>multilabel</option> ya que
una etiqueta única estará siempre en
efecto unicamente.</para>
</listitem>
<listitem>
<para>Pero, esta máquina será un servidor web
y debería ejecutar el servidor web en
<literal>biba/low</literal> para prevenir capacidades de
escritura. La política Biba y su funcionamiento
serán discutidos más adelante, por eso si el
comentario anterior fue dificil de interpretar solo continue
leyendo y regrese despues. El servidor podría utilizar
una partición separada activada a
<literal>biba/low</literal> para la mayoría o para todo
su estado de ejecución. Faltan muchas cosas en este
ejemplo, como las restricciones en datos, configuración
y propiedades de usuarios; de todas maneras, este es solo un
ejemplo rápido para probar el punto mencionado.</para>
</listitem>
</itemizedlist>
<para>Si alguna de las políticas de no etiquetado
se van a utilizar, entonces la opción
<option>multilabel</option> nunca sería requerida. Esto
incluye las políticas <literal>seeotheruids</literal>,
<literal>portacl</literal> y <literal>partition</literal>.</para>
<para>Debería notarse también que usando
<option>multilabel</option> con una partición y
estableciendo un modelo de seguridad basado en la
funcionalidad <option>multilabel</option> puede abrir las
puertas para una carga administrativa mayor ya que todo
en el sistema de archivos tendría una etiqueta.
Esto incluye directorios, archivos e incluso nodos de
dispositivo.</para>
<para>El siguiente comando activará <option>multilabel</option>
en el sistema de archivos para tener etiquetas múltiples.
Esto solo puede hacerse en modo mono usuario:</para>
<screen>&prompt.root; <userinput>tunefs -l enable /</userinput></screen>
<para>Esto no es un requerimiento para el sistema de
archivos swap.</para>
<note>
<para>Algunos usuarios han experimentado problemas
activando la bandera <option>multilabel</option> en la
partición raíz.
Si este es el caso, por favor revise la
<xref linkend="mac-troubleshoot"> de este capítulo.</para>
</note>
</sect2>
<sect2>
<title>Controlando MAC con sintonizables</title>
<para>Sin ningún módulo cargado, hay todavía
algunas partes de <acronym>MAC</acronym> las cuales pueden
ser configuradas utilizando la interfaz <command>sysctl</command>.
Estos sintonizables son descritos abajo y en todos los
casos el número uno (1) significa habilitado
mientras que el número cero (0) significa
deshabilitado:</para>
<itemizedlist>
<listitem>
<para><literal>security.mac.enforce_fs</literal> tiene el valor
uno (1) por omisión e impone políticas
<acronym>MAC</acronym> del sistema de archivos en el sistema
de archivos.</para>
</listitem>
<listitem>
<para><literal>security.mac.enforce_kld</literal> tiene el valor
uno (1) por omisión e impone políticas
<acronym>MAC</acronym> de enlazado de kernel en el enlazador
dinámico del kernel (ver &man.kld.4;).</para>
</listitem>
<listitem>
<para><literal>security.mac.enforce_network</literal> tiene el valor
uno (1) por omisión e impone políticas
<acronym>MAC</acronym> de red.</para>
</listitem>
<listitem>
<para><literal>security.mac.enforce_pipe</literal> tiene el valor
uno (1) por omisión e impone políticas
<acronym>MAC</acronym> en pipes.</para>
</listitem>
<listitem>
<para><literal>security.mac.enforce_process</literal> tiene el valor
uno (1) por omisión e impone políticas
<acronym>MAC</acronym> en procesos que utilizan
comunicación inter-procesos.</para>
</listitem>
<listitem>
<para><literal>security.mac.enforce_socket</literal> tiene el valor
uno (1) por omisión e impone políticas
<acronym>MAC</acronym> en sockets (ver la p´gina de manual
&man.socket.2;).</para>
</listitem>
<listitem>
<para><literal>security.mac.enforce_system</literal> tiene el valor
uno (1) por omisión e impone políticas
<acronym>MAC</acronym> en actividades del sistema tales como
contabilidad y reinicio.</para>
</listitem>
<listitem>
<para><literal>security.mac.enforce_vm</literal> tiene el valor
uno (1) por omisión e impone políticas
<acronym>MAC</acronym> en la memoria virtual del sistema.</para>
</listitem>
</itemizedlist>
<note>
<para>Cada política u opción <acronym>MAC</acronym>
soporta sintonizables. Estas usualmente cuelgan del
árbol
<literal>security.mac.<policyname></literal>.
Para visualizar todos los sintonizables de <acronym>MAC</acronym>
utilice el siguiente comando:</para>
<screen>&prompt.root; <userinput>sysctl -da | grep mac</userinput></screen>
</note>
<para>Esto debe ser interpretado como si todas las
políticas básicas <acronym>MAC</acronym>
están impuestas por omisión.
Si los módulos fueron construidos en el kernel
el sistema podría estar extremadamente cerrado
y muy probablemente sin poder comunicarse con la red
local o conectar a Internet, etc. Debido a esto la
construcción de los módulos dentro del
kernel no es completamente recomendable. No porque
limite la habilidad de deshabilitar funciones al vuelo
con <command>sysctl</command>, pero le permite al
administrador cambiar instantaneamente las políticas
de un sistema sin el requerimiento de recosntruir y
reinstalar un nuevo sistema.</para>
</sect2>
</sect1>
<sect1 id="mac-modules">
<title>Configuración de módulo</title>
<para>Cada módulo incluido con la estructura <acronym>MAC</acronym>
puede ser ya sea compilado en el kernel como se notó arriba
o cargado como un módulo ejecutable del kernel.
El método recomendado es agregar el nombre del
módulo al archivo
<filename>/boot/loader.conf</filename> para que se cargue
durante la operación inicial de arranque.</para>
<para>Las siguientes secciones discutirán los
varios módulos <acronym>MAC</acronym> y cubrirán
sus propiedades.
Implementarlos en un ambiente específico también
será una consideración de este capítulo.
Algunos módulos soportan el uso de etiquetamiento,
el cual controla accesos mediante la imposición de
una etiqueta como <quote>esto es permitido y esto no</quote>.
Un archivo de configuración de etiqueta puede controlar
como se pueden accesar archivos, se dan las comunicaciones
de red y más. La sección previa mostró como
la bandera <option>multilabel</option> podía activarse
en sistemas de archivos para habilitar control de acceso
por archivo o por partición.</para>
<para>Una configuración de etiqueta única impondría
solamente una etiqueta a través del sistema, es por eso
que la opción <command>tunefs</command> es llamada
<option>multilabel</option>.</para>
<sect2 id="mac-seeotheruids">
<title>El módulo MAC seeotheruids</title>
<indexterm>
<primary>MAC See Other UIDs Policy</primary>
</indexterm>
<para>Nombre de módulo:
<filename>mac_seeotheruids.ko</filename></para>
<para>Línea de configuración de Kernel:
<literal>options MAC_SEEOTHERUIDS</literal></para>
<para>Opción de arranque:
<literal>mac_seeotheruids_load="YES"</literal></para>
<para>El módulo &man.mac.seeotheruids.4; imita los
sintonizables de <command>sysctl</command>
<literal>security.bsd.see_other_uids</literal>
y <literal>security.bsd.see_other_gids</literal>.
Esta opción no requiere activar ninguna etiqueta
antes de la configuración y puede operar de
manera transparente con los otros módulos.</para>
<para>Despues de cargar el módulo, los
siguientes sintonizables de <command>sysctl</command>
pueden utilizarse para controlar las opciones:</para>
<itemizedlist>
<listitem>
<para><literal>security.mac.seeotheruids.enabled</literal>
habilitará las opciones del módulo, con
las opciones por omisión. Estas opciones por
omisión le negarán a los usuarios la
habilidad de ver procesos y sockets propiedad de
otros usuarios.</para>
</listitem>
<listitem>
<para>
<literal>security.mac.seeotheruids.specificgid_enabled</literal>
permitirá a un cierto grupo ser exentados de esta
política. Para exentar grupos específicos de
esta política, utilice el sintonizable de
<command>sysctl</command> <literal>security.mac.seeotheruids.specificgid=<replaceable>XXX</replaceable></literal>.
En el ejemplo de arriba, <replaceable>XXX</replaceable>
debería ser reemplazado con el ID numérico a ser
exentado.</para>
</listitem>
<listitem>
<para>
<literal>security.mac.seeotheruids.primarygroup_enabled</literal>
es usado para exentar grupos primarios específicos de
esta política. Cuando utilice este sintonizable no
se debe activar
<literal>security.mac.seeotheruids.specificgid_enabled</literal>.</para>
</listitem>
</itemizedlist>
</sect2>
</sect1>
<sect1 id="mac-bsdextended">
<title>El módulo MAC bsdextended</title>
<indexterm>
<primary>MAC</primary>
<secondary>File System Firewall Policy</secondary>
</indexterm>
<para>Nombre de módulo:
<filename>mac_bsdextended.ko</filename></para>
<para>Línea de configuración de Kernel:
<literal>options MAC_BSDEXTENDED</literal></para>
<para>Opción de arranque:
<literal>mac_bsdextended_load="YES"</literal></para>
<para>El módulo &man.mac.bsdextended.4; impone el
fireall del sistema de archivos. La política de
este módulo brinda una extensión al modelo
estándar de permisos del sistema de archivos,
permitiendo a un administrador un conjunto de reglas
tipo firewall para proteger archivos, utilidades y directorios
en la jerarquía del sistema de archivos.</para>
<para>La política puede ser creada mediante una utilidad,
&man.ugidfw.8;, que tiene una sintaxis similar a la de
&man.ipfw.8;. Se pueden escribir más herramientas
utilizando las funciones en la librería
&man.libugidfw.3;.</para>
<para>Se debe tener extrema precaución al trabajar con
este módulo, el uso incorrecto puede bloquear el
acceso a ciertas partes del sistema de archivos.</para>
<sect2>
<title>Ejemplos</title>
<para>Despues de que el módulo &man.mac.bsdextended.4; ha
sido cargado, el siguiente comando puede ser usado para
listar la regla de configuración actual:</para>
<screen>&prompt.root; <userinput>ugidfw list</userinput>
0 slots, 0 rules</screen>
<para>Como se esperaba, no existen reglas definidad. Esto
significa que todo es completamente accesible. Para crear
una regla que bloqueará todos los accesos de
usuarios pero dejará inafectado a
<username>root</username> simplemente ejecute
el siguiente comando:</para>
<screen>&prompt.root; <userinput>ugidfw add subject not uid root new object not uid root mode n</userinput></screen>
<note>
<para>En releases previas a &os; 5.3, el
parámetro <parameter>add</parameter> no existía.
En esos casos <parameter>set</parameter> deberí ser
utilizado en su lugar. Vea abajo para un ejemplo de
comando.</para></note>
<para>Esta es una muy mala idea ya que bloqueará a
todos los usuarios de utilizar incluso los comandos más
simples, como <command>ls</command>. Una lista más
patriotica de reglas puede ser:</para>
<screen>&prompt.root; <userinput>ugidfw set 2 subject uid <replaceable>user1</replaceable> object uid <replaceable>user2</replaceable> mode n</userinput>
&prompt.root; <userinput>ugidfw set 3 subject uid <replaceable>user1</replaceable> object gid <replaceable>user2</replaceable> mode n</userinput></screen>
<para>Esto bloqueará todos los accesos, incluyendo
listado de directorios, al directorio home de
<username><replaceable>user2</replaceable></username>
desde el nombre de usuario <username>user1</username>.</para>
<para>En lugar de <username>user1</username>, se puede pasar
<option>not uid <replaceable>user2</replaceable></option>.
Esto impondrá las mismas restricciones de acceso de
arriba para todos los usuarios en lugar de solo uno.</para>
<note>
<para>El usuario <username>root</username> no será
afectado por estos cambios.</para>
</note>
<para>Esto debe proporcionar una idea general de
como se puede utilizar el módulo
&man.mac.bsdextended.4; para ayudar a fortificar
un sistema de archivos. Para mayor información,
vea las páginas de manual
&man.mac.bsdextended.4; y &man.ugidfw.8;.</para>
</sect2>
</sect1>
<sect1 id="mac-ifoff">
<title>El módulo MAC ifoff</title>
<indexterm>
<primary>MAC Interface Silencing Policy</primary>
</indexterm>
<para>Nombre de módulo: <filename>mac_ifoff.ko</filename></para>
<para>Línea de configuración de Kernel:
<literal>options MAC_IFOFF</literal></para>
<para>Opción de arranque: <literal>mac_ifoff_load="YES"</literal>
</para>
<para>El módulo &man.mac.ifoff.4; existe solamente
para deshabilitar interfaces de red al vuelo y evitar que
interfaces de red sean levantadas durante el arranque
inicial del sistema. No requiere activar ninguna etiqueta
en el sistema, ni tiene dependencias de otros
módulos <acronym>MAC</acronym>.</para>
<para>La mayoría del control es hecho
a través de los sintonizables de <command>sysctl</command>
listados abajo.</para>
<itemizedlist>
<listitem>
<para><literal>security.mac.ifoff.lo_enabled</literal>
habilitará/deshabilitará todo el tráfico
en la interfaz loopback (&man.lo.4;).</para>
</listitem>
<listitem>
<para><literal>security.mac.ifoff.bpfrecv_enabled</literal>
habilitará/deshabilitará todo el tráfico
en la interfaz del filtro de paquetes de Berkeley
(&man.bpf.4;)</para>
</listitem>
<listitem>
<para><literal>security.mac.ifoff.other_enabled</literal>
habilitará/deshabilitará todo el tráfico
en todas las demás interfacez.</para>
</listitem>
</itemizedlist>
<para>Uno de los usos más comunes de &man.mac.ifoff.4; es
el monitoreo de red en un ambiente donde el tráfico de
red no debe ser permitido durante la secuencia de arranque.
Otro uso sugerido puede ser escribir un script el cual
utilice
<filename role="package">security/aide</filename> para bloquear
el tráfico de red automaticamente si encuentra archivos
nuevos o alterados en directorios protegidos.</para>
</sect1>
<sect1 id="mac-portacl">
<title>El módulo MAC portacl</title>
<indexterm>
<primary>MAC Port Access Control List Policy</primary>
</indexterm>
<para>Nombre de módulo: <filename>mac_portacl.ko</filename></para>
<para>Línea de configuración de Kernel:
<literal>MAC_PORTACL</literal></para>
<para>Opción de arranque:
<literal>mac_portacl_load="YES"</literal></para>
<para>El módulo &man.mac.portacl.4; es utilizado para
limitar el amarre a puertos locales <acronym>TCP</acronym> y
<acronym>UDP</acronym> usando una variedad de variables
<command>sysctl</command>. En esencia &man.mac.portacl.4; hace
posible permitir a usuarios que no son <username>root</username>
amarrarse a puertos privilegiados específicos, por
ejemplo, puertos menores a 1024.</para>
<para>Una vez cargado, este módulo habilitará
la política <acronym>MAC</acronym> en todos los
sockets, Los siguientes sintonizables están
disponibles:</para>
<itemizedlist>
<listitem>
<para><literal>security.mac.portacl.enabled</literal>
habilitará/deshabilitará la política
completamente.<footnote><para>Debido a un error, la variable
de <command>sysctl</command>
<literal>security.mac.portacl.enabled</literal> no
funcionará en &os; 5.2.1 o releases
anteriores.</para></footnote></para>
</listitem>
<listitem>
<para><literal>security.mac.portacl.port_high</literal>
especificará el número de puerto más
elevado para el que &man.mac.portacl.4; habilitará
protección.</para>
</listitem>
<listitem>
<para><literal>security.mac.portacl.suser_exempt</literal>
exentará cuando esté a un valor diferente
de cero, al usuario <username>root</username> de esta
política.</para>
</listitem>
<listitem>
<para><literal>security.mac.portacl.rules</literal>
especificará la política actual mac_portacl;
ver abajo.</para>
</listitem>
</itemizedlist>
<para>La política actual <literal>mac_portacl</literal>,
como se especifica en la variable de sysctl
<literal>security.mac.portacl.rules</literal>
es un texto de cadena de la forma:
<literal>rule[,rule,...]</literal> con tantas reglas
como se necesiten. Cada regla es de la forma:
<literal>idtype:id:protocol:port</literal>. El
parámetro
<parameter>idtype</parameter> puede ser
<literal>uid</literal> o <literal>gid</literal> e interpreta
el parámetro <parameter>id</parameter> ya sea como
id de usuario o id de grupo, respectivamente.
El parámetro
<parameter>protocol</parameter> es usado para determinar
si la regla debe aplicar a <acronym>TCP</acronym> o
<acronym>UDP</acronym> configurando el parámetro a
<literal>tcp</literal> o <literal>udp</literal>.
El parámetro final <parameter>port</parameter> es el
número de puerto al que se le permitirá
amarrarse al usuario o grupo especificado.</para>
<note>
<para>Ya que las reglas son interpretadas directamente por
el kernel, solo valores numéricos pueden utilizarse
para los parámetros ID de usuario, ID de grupo y puerto.
Ejemplo, nombres de usuario, grupo y servicios de puerto
no pueden ser usados.</para>
</note>
<para>Por omisión, en sistemas tipo &unix;, puertos
menores que 1024 solo pueden ser usados o amarrados a
procesos privilegiados, ejemplo, aquellos que corren
como <username>root</username>. Para que
&man.mac.portacl.4; permita que procesos no privilegiados
se amarren a puertos debajo de 1024 esta restricción
estándar de &unix; debe ser deshabilitada. Esto puede
lograrse activando a cero las variables de &man.sysctl.8;
<literal>net.inet.ip.portrange.reservedlow</literal> y
<literal>net.inet.ip.portrange.reservedhigh</literal>.</para>
<para>Vea los ejemplos abajo o revise la página de
manual &man.mac.portacl.4; para mayor información.</para>
<sect2>
<title>Ejemplos</title>
<para>Los siguientes ejemplos deben iluminar la discusión
de arriba un poco mejor:</para>
<screen>&prompt.root; <userinput>sysctl security.mac.portacl.port_high=1023</userinput>
&prompt.root; <userinput>sysctl net.inet.ip.portrange.reservedlow=0 net.inet.ip.portrange.reservedhigh=0</userinput></screen>
<para>Primero configuramos &man.mac.portacl.4; para cubrir
los puertos privilegiados estándar y deshabilitar
las restricciones de amarre normales &unix;.</para>
<screen>&prompt.root; <userinput>sysctl security.mac.portacl.suser_exempt=1</userinput></screen>
<para>El usuario <username>root</username> no debe ser invalidado
por esta política, así que ponga
<literal>security.mac.portacl.suser_exempt</literal> a un valor
diferente de cero. El módulo &man.mac.portacl.4;
ha sido ahora configurado para comportarse de la misma
manera en que lo hacen los sistemas tipo &unix; por
omisión.</para>
<screen>&prompt.root; <userinput>sysctl security.mac.portacl.rules=uid:80:tcp:80</userinput></screen>
<para>Permite al usuario con <acronym>UID</acronym> 80
(normalmente el usuario <username>www</username>) amarrarse
al puerto 80. Esto puede usarse para permitir al usuario
<username>www</username> ejecutar un servidor web sin tener
siquiera privilegios de <username>root</username>.</para>
<screen>&prompt.root; <userinput>sysctl security.mac.portacl.rules=uid:1001:tcp:110,uid:1001:tcp:995</userinput></screen>
<para>Permite al usuario con <acronym>UID</acronym> de
1001 amarrarse al puerto <acronym>TCP</acronym> 110
(<quote>pop3</quote>) y 995 (<quote>pop3s</quote>).
Esto le permitirá a este usuario iniciar un
servidor que acepte conexiones en los puertos
110 y 995.</para>
</sect2>
</sect1>
<sect1 id="mac-labelingpolicies">
<title>Políticas MAC con propiedades de etiquetamiento</title>
<para>Las siguientes secciones discutirán políticas
<acronym>MAC</acronym> que utilizan etiquetas.</para>
<para>De aquí en adelante este capítulo se enfocará
en las propiedades de &man.mac.biba.4;, &man.mac.lomac.4;,
&man.mac.partition.4;, y &man.mac.mls.4;.</para>
<note>
<para>Este es solamente un ejemplo de configuración y
no debe ser considerado para una implementación en
producción. El objetivo es documentar y mostrar la
sintaxis así como los ejemplos para la
implementación y prueba.</para>
</note>
<para>Para que estas políticas funcionen correctamente
se deben hacer varias preparaciones.</para>
<sect2 id="mac-prep">
<title>Preparación para políticas de
etiquetamiento</title>
<para>Los siguientes cambios son requeridos en
el archivo <filename>login.conf</filename>:</para>
<itemizedlist>
<listitem>
<para>Una clase <literal>insecure</literal>, u otra
clase de tipo similar, debe ser agregada.
La clase de login <literal>insecure</literal>
no es requerida y solo es utilizada aquícomo un ejemplo;
configuraciones diferentes pueden utilizar otro nombre
de clase.</para
</listitem>
<listitem>
<para> La clase <literal>insecure</literal> debe tener
las siguientes propiedades y definiciones. Varias
de estas pueden ser alteradas pero la línea
que define la etiqueta por omisión es un
requerimiento y debe permanecer.</para>
<programlisting>insecure:\
:copyright=/etc/COPYRIGHT:\
:welcome=/etc/motd:\
:setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\
:path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:\
:manpath=/usr/share/man /usr/local/man:\
:nologin=/usr/sbin/nologin:\
:cputime=1h30m:\
:datasize=8M:\
:vmemoryuse=100M:\
:stacksize=2M:\
:memorylocked=4M:\
:memoryuse=8M:\
:filesize=8M:\
:coredumpsize=8M:\
:openfiles=24:\
:maxproc=32:\
:priority=0:\
:requirehome:\
:passwordtime=91d:\
:umask=022:\
:ignoretime@:\
:label=partition/13,mls/5,biba/low:</programlisting>
<para>El comando &man.cap.mkdb.1; necesita ser ejecutado
en &man.login.conf.5; antes de que cualquiera
de los usuarios puede ser cambiado a la nueva
clase.</para>
<para>El usuario <username>root</username> debe también
ser colocado en un clase de login; de otra manera, casi
cualquier comando ejecutado por <username>root</username>
requerirá el uso de
<command>setpmac</command>.</para>
<warning>
<para>La reconstrucción de la base de datos
de <filename>login.conf</filename> puede causar
algunos errores posteriores con la clase daemon.
Simplemente descomentando la cuenta daemon y
reconstruyendo la base de datos debería
aliviar estos síntomas.</para>
</warning>
</listitem>
<listitem>
<para>Asegurarse que todas las particiones
en las que el etiquetamiento <acronym>MAC</acronym>
será implementado soporten
<option>multilabel</option>.
Debemos hacer esto porque muchos de los ejemplos
aquí mostrados contienen diferentes
etiquetas para propósitos de prueba.
Revise la salida del comando <command>mount</command>
como medida precautoria.</para>
</listitem>
<listitem>
<para>Cambie cualquier usuario que tendrá los más
altos mecanismos de seguridad impuestos a la nueva clase
de usuario. Una ejecución rápida de
&man.pw.8; o &man.vipw.8; debe hacer el truco.</para>
</listitem>
</itemizedlist>
</sect2>
</sect1>
<sect1 id="mac-partition">
<title>El módulo MAC partition</title>
<indexterm>
<primary>MAC Process Partition Policy</primary>
</indexterm>
<para>Nombre de módulo:
<filename>mac_partition.ko</filename></para>
<para>Línea de configuración de Kernel:
<literal>options MAC_PARTITION</literal></para>
<para>Opción de arranque:
<literal>mac_partition_load="YES"</literal></para>
<para>La política &man.mac.partition.4; dejará
caer procesos en <quote>particiones</quote> específicas
basandose en su etiqueta <acronym>MAC</acronym>. Piense en
ello como un tipo especial de &man.jail.8;, aunque eso es
dificilmente una comparación meritoria.</para>
<para>Este es un módulo que debe ser agregado al
archivo &man.loader.conf.5; para que cargue y
habilite la política durante el proceso
de arranque.</para>
<para>La mayoría de configuraciones para esta
política son realizadas usando la utilidad
&man.setpmac.8; que será explicada abajo.
El siguiente sintonizable de <command>sysctl</command>
está disponible para esta política:</para>
<itemizedlist>
<listitem>
<para><literal>security.mac.partition.enabled</literal>
habilitará la imposición de particiones
de procesos <acronym>MAC</acronym>.</para>
</listitem>
</itemizedlist>
<para>Cuando esta política está habilitada, los
usuarios solo tendán permitido ver sus procesos pero
no tendán permitida la posibilidad de trabajar con
ciertas utilidades. Por ejemplo, un usuario en la
clase <literal>insecure</literal> de arriba no tendá
permitido accesar el comando <command>top</command> así
como muchos otros comandos que necesitan engendrar un
proceso.</para>
<para>Para activar o tirar utilidades dentro de una etiqueta
de partición, use la utilidad <command>setpmac</command>:</para>
<screen>&prompt.root; <userinput>setpmac partition/13 top</userinput></screen>
<para>Esto agregará el comando <command>top</command>
a la etiqueta activada en usuarios en la clase
<literal>insecure</literal>. Note que todos los procesos
engendrados por usuarios en la clase <literal>insecure</literal>
permanecerán en la etiqueta <literal>partition/13</literal>.
</para>
<sect2>
<title>Ejemplos</title>
<para>El siguiente comando le mostrará la etiqueta de
partición y la lista de procesos:</para>
<screen>&prompt.root; <userinput>ps Zax</userinput></screen>
<para>El siguiente comando permitirá la visualización
de etiqueta de partición de procesos de otro usuario
y que usuario está ejecutando procesos actualmente:</para>
<screen>&prompt.root; <userinput>ps -ZU trhodes</userinput></screen>
<note>
<para>Los usuarios pueden ver procesos en la etiqueta de
<username>root</username> a menos que la política
&man.mac.seeotheruids.4; está cargada.</para>
</note>
<para>Una implementación realmente engañosa
podría tener todos los servicios deshabilitados
en <filename>/etc/rc.conf</filename> e iniciados por un
script que inicie con la configuración adecuada
de etiquetamiento.</para>
<note>
<para>Las siguientes políticas soportan configuraciones
de enteros en lugar de las tres etiquetas ofrecidas
por omisión. Estas opciones, incluyendo sus
limitaciones, son mejor explicadas en las páginas
de manual del módulo.</para>
</note>
</sect2>
</sect1>
<sect1 id="mac-mls">
<title>El módulo de seguridad multinivel MAC</title>
<indexterm>
<primary>MAC Multi-Level Security Policy</primary>
</indexterm>
<para>Nombre de módulo: <filename>mac_mls.ko</filename></para>
<para>Línea de configuración de Kernel:
<literal>options MAC_MLS</literal></para>
<para>Opción de arranque:
<literal>mac_mls_load="YES"</literal></para>
<para>La política &man.mac.mls.4; controla accesos entre sujetos
y objetos en el sistema imponiendo una política estricta de
flujo de información.</para>
<para>En ambientes <acronym>MLS</acronym>, un nivel de
<quote>aclaramiento</quote> es activado en cada etiqueta de
objeto o sujeto, junto con compartimientos. Debido a que
este aclaramiento o niveles de sensibilidad pueden alcanzar
números mayores a seis mil; podría ser una tarea
intimidante para cualquier administrador de sistema configurar
cada objeto o sujeto. Afortunadamente, tres etiquetas
<quote>instantaneas</quote> esán ya incluidas en
esta política.</para>
<para>Estas etiquetas son <literal>mls/low</literal>,
<literal>mls/equal</literal> y <literal>mls/high</literal>.
Ya que estas etiquetas son descritas en profundidad
en la página de manual, solo tendrán una
descripción breve aquí:</para>
<itemizedlist>
<listitem>
<para>La etiqueta <literal>mls/low</literal> contiene una
configuración baja que le permite ser dominada
por todos los otros objetos. Cualquier cosa etiquetada
con <literal>mls/low</literal> tendrá un nivel
de aclaramiento bajo y no tendrá permitido
accesar información de un nivel más alto.
Adicionalmente, esta etiqueta prevendrá a objetos
de un nivel de aclaramiento más elevado de
escribir o pasar información hacia ellos.</para>
</listitem>
<listitem>
<para>La etiqueta <literal>mls/equal</literal> debe ser
colocada en objetos considerados exentos de la
política.</para>
</listitem>
<listitem>
<para>La etiqueta <literal>mls/high</literal> es el nivel
más elevado de aclaramiento posible. Los objetos
que tienen asignada esta etiqueta mantendrán
dominación sobre todos los otros objetos en el
sistema; sin embargo, no permitirán el filtrado
de información a objetos de una clase menor.</para>
</listitem>
</itemizedlist>
<para><acronym>MLS</acronym> brinda:</para>
<itemizedlist>
<listitem>
<para>Un nivel de seguridad jerárquico con un
conjunto de categorías no jerárquicas.</para>
</listitem>
<listitem>
<para>Reglas fijas: no lecturas hacia arriba, no escrituras
hacia abajo (un sujeto puede tener acceso de lectura a
objetos en su propio nivel o inferior, pero no superior.
Similarmente, un sujeto puede tener acceso de escritura
a objetos en su propio nivel o superior pero no
inferior.).</para>
</listitem>
<listitem>
<para>Secreto (previniendo exposición
inapropiada de datos).</para>
</listitem>
<listitem>
<para>Bases para el diseño de sistemas que manejen
datos concurrentemente a niveles múltiples de
sensitividad (sin filtrar información entre
secreto y confidencial).</para>
</listitem>
</itemizedlist>
<para>Los siguientes sintonizables de <command>sysctl</command>
están disponibles para la configuración de
servicios especiales e interfaces:</para>
<itemizedlist>
<listitem>
<para><literal>security.mac.mls.enabled</literal> es usado
para habilitar/deshabilitar la política
<acronym>MLS</acronym>.</para>
</listitem>
<listitem>
<para><literal>security.mac.mls.ptys_equal</literal>
etiquetará todos los dispositivos &man.pty.4;
como <literal>mls/equal</literal> durante su
creación.</para>
</listitem>
<listitem>
<para><literal>security.mac.mls.revocation_enabled</literal> es
utilizado para revocar accesos a objetos despues que su
etiqueta cambie a una etiqueta de un grado inferior.</para>
</listitem>
<listitem>
<para><literal>security.mac.mls.max_compartments</literal> es
utilizado para activar el número máximo de
niveles de compartimientos con objetos; basicamente el
número máximo de compartimientos permitidos
en un sistema.</para>
</listitem>
</itemizedlist>
<para>Para manipular las etiquetas <acronym>MLS</acronym>,
se ha provisto el comando &man.setfmac.8;. Para asignar
una etiqueta a un objeto, ejecute el siguiente comando:</para>
<screen>&prompt.root; <userinput>setfmac mls/5 test</userinput></screen>
<para>Para obtener la etiqueta <acronym>MLS</acronym> para
el archivo <filename>test</filename> ponga el siguiente
comando:</para>
<screen>&prompt.root; <userinput>getfmac test</userinput></screen>
<para>Este es un resumen de las propiedades de la política
<acronym>MLS</acronym>. Otro enfoque es crear un archivo de
políticas maestro en <filename class="directory">/etc</filename>
que especifique la información de la política
<acronym>MLS</acronym> y alimentar con ese archivo el comando
<command>setfmac</command>. Este método será
explicado despues de cubrir todas las políticas.</para>
<para>Observaciones: un objeto con aclaramiento inferior es
incapaz de observar procesos con aclaramiento más
elevado. Una política básica podría
ser imponer <literal>mls/high</literal> en todo lo que
no va a ser leído, incluso si necesita escribirse.
Imponga <literal>mls/low</literal> en todo lo que
no va a ser escrito, incluso si necesita ser leído.
Y finalmente imponga
<literal>mls/equal</literal> en el resto. Todos los usuarios
marcados <literal>insecure</literal> deben configurarse
a <literal>mls/low</literal>.</para>
</sect1>
<sect1 id="mac-biba">
<title>El módulo MAC Biba</title>
<indexterm>
<primary>MAC Biba Integrity Policy</primary>
</indexterm>
<para>Nombre de módulo: <filename>mac_biba.ko</filename></para>
<para>Línea de configuración de Kernel:
<literal>options MAC_BIBA</literal></para>
<para>Opción de arranque:
<literal>mac_biba_load="YES"</literal></para>
<para>El módulo &man.mac.biba.4; carga la política
<acronym>MAC</acronym> Biba. Esta política funciona
muy parecido a la política <acronym>MLS</acronym> con
la excepción que las reglas para flujo de información
están ligeramente invertidas. Esto es dicho para prevenir
el flujo hacia abajo de información sensitiva mientras
que la política <acronym>MLS</acronym> previene el
flujo hacia arriba de información sensitiva; así
mucha de esta sección puede aplicar a ambas
políticas.</para>
<para>En ambientes Biba, una etiqueta de <quote>integridad</quote>
es activada en cada objeto o sujeto. Estas etiquetas son hechas
de grados jerárquicos, y de componentes no jerárquicos.
Cuando el grado de un objeto o sujeto asciende también
lo hace su integridad.</para>
<para>Las etiquetas soportadas son <literal>biba/low</literal>,
<literal>biba/equal</literal>, y<literal>biba/high</literal>;
como se explica abajo:</para>
<itemizedlist>
<listitem>
<para>La etiqueta <literal>biba/low</literal> es considerada
la integridad más baja que un objeto o sujeto
puede tener. Activando esto es objetos o sujetos bloqueará
sus accesos de escritura a objetos o sujetos marcados
como high. Aunque aún tendrán acceso
de lectura.</para>
</listitem>
<listitem>
<para>La etiqueta <literal>biba/equal</literal> solo debe
ser colocada en objetos considerados exentos de la
política.</para>
</listitem>
<listitem>
<para>La etiqueta <literal>biba/high</literal> permitirá
la escritura a objetos puestos a una etiqueta de nivel
inferior, pero no permitirá leer ese objeto.
Se recomienda que esta etiqueta sea colocada en
objetos que afecten la integridad del sistema entero.</para>
</listitem>
</itemizedlist>
<para>Biba brinda:</para>
<itemizedlist>
<listitem>
<para>Nivel de integridad jerárquico con un
conjunto de categorías de integridad no
jerárquica.</para>
</listitem>
<listitem>
<para>Reglas fijas: no escrituras hacia arriba, no
lecturas hacia abajo (lo opuesto a <acronym>MLS</acronym>).
Un sujeto puede tener acceso de escritura a objetos
en su propio nivel o inferior, pero no superior.
Similarmente, un sujeto puede tener acceso de lectura
a objetos en su propio nivel o superior, pero no
inferior.</para>
</listitem>
<listitem>
<para>Integridad (previniendo modificaciones inapropiadas
de datos).</para>
</listitem>
<listitem>
<para>Niveles de integridad (en lugar de niveles de
sensitividad MLS).</para>
</listitem>
</itemizedlist>
<para>Los siguientes sintonizables de <command>sysctl</command>
pueden utilizarse para manipular la política
Biba.</para>
<itemizedlist>
<listitem>
<para><literal>security.mac.biba.enabled</literal> puede usarse
para habilitar/deshabilitar la imposición de la
política Biba en la máquina destino.</para>
</listitem>
<listitem>
<para><literal>security.mac.biba.ptys_equal</literal> puede
usarse para deshabilitar la política Biba en
dispositivos &man.pty.4;.</para>
</listitem>
<listitem>
<para><literal>security.mac.biba.revocation_enabled</literal>
forzará la revocación de acceso a objetos si
la etiqueta es cambiada a dominar el sujeto.</para>
</listitem>
</itemizedlist>
<para>Para accesar la configuración de la política
biba en objetos del sistema, use los comandos
<command>setfmac</command> y <command>getfmac</command>:</para>
<screen>&prompt.root; <userinput>setfmac biba/low test</userinput>
&prompt.root; <userinput>getfmac test</userinput>
test: biba/low</screen>
<para>Observaciones: un sujeto con integridad inferior es
incapaz de escribir a un sujeto con integridad más
elevada; un sujeto con integridad más elevada no
puede observar o leer a un objeto con integridad inferior.</para>
</sect1>
<sect1 id="mac-lomac">
<title>El módulo MAC LOMAC</title>
<indexterm>
<primary>MAC LOMAC</primary>
</indexterm>
<para>Nombre de módulo: <filename>mac_lomac.ko</filename></para>
<para>Línea de configuración de Kernel:
<literal>options MAC_LOMAC</literal></para>
<para>Opción de arranque:
<literal>mac_lomac_load="YES"</literal></para>
<para>A diferencia de la política <acronym>MAC</acronym> Biba,
la política &man.mac.lomac.4; permite acceso a
objetos con integridad inferior solamente despues de
decrementar el nivel de integridad para no romper
cualquier regla de integridad.</para>
<para>La versión <acronym>MAC</acronym> de la política
de integridad de marca-inferior, no confundirla con la antigua
implementación &man.lomac.4;, funciona casi identicamente
a Biba, pero con la excepción de utilizar etiquetas
flotantes para soportar el descenso a través de un
compartimiento de grado auxiliar. Este compartimiento
secundario toma la forma de <literal>[auxgrade]</literal>.
Al asignar una política lomac con un grado
auxiliar, se debe ver un poco como: <literal>lomac/10[2]</literal>
donde el número dos (2)es el grado
auxiliar.</para>
<para>La política <acronym>MAC</acronym> LOMAC se
basa en el etiquetamiento omnipresente en todos los
objetos del sistema con etiquetas de integridad,
premitiendo a sujetos leer de objetos con integridad
inferior y entonces desactualizar la etiqueta en el
sujeto para prevenir escrituras futuras a objetos
con integridas más alta. Esta es la opci6oacute;n
<literal>[auxgrade]</literal> discutida arriba, así
la política puede brindar una compatibilidad
mayor y requiere menos configuración inicial
que Biba.</para>
<sect2>
<title>Ejemplos</title>
<para>Como en las políticas Biba y <acronym>MLS</acronym>;
las utilidades <command>setfmac</command> y <command>setpmac</command>
pueden usarse para colocar etiquetas en objetos del
sistema:</para>
<screen>&prompt.root; <userinput>setfmac /usr/home/trhodes lomac/high[low]</userinput>
&prompt.root; <userinput>getfmac /usr/home/trhodes</userinput> lomac/high[low]</screen>
<para>Note que el grado auxiliar aquí es <literal>low</literal>,
esta es una cualidad brindada solamente por la
política <acronym>MAC</acronym> LOMAC.</para>
</sect2>
</sect1>
<sect1 id="mac-implementing">
<title>Implementando un ambiente seguro con MAC</title>
<indexterm>
<primary>MAC Example Implementation</primary>
</indexterm>
<para>La siguiente demostración implementará
un ambiente seguro utilizando varios módulos
<acronym>MAC</acronym> con políticas configuradas
correctamente. Esta solamente es una prueba y no debe
ser considerada una respuesta completa a las aflicciones
de seguridad de todos. Solamente implementar una
política e ignorarla nunca funciona y puede
ser desastroso en un ambiente en producción.</para>
<para>Antes de iniciar este proceso, la opción
<literal>multilabel</literal> debe ser aplicada a cada
archivo del sistema como se declaró al principio
de este capítulo. No hacerlo resultará
en errores.</para>
<sect2>
<title>Crear una clase de usuario insegura</title>
<para>Inicie el procedimiento agregando la siguiente clase
de usuario al archivo <filename>/etc/login.conf</filename>:</para>
<programlisting>insecure:\
:copyright=/etc/COPYRIGHT:\
:welcome=/etc/motd:\
:setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\
:path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
:manpath=/usr/share/man /usr/local/man:\
:nologin=/usr/sbin/nologin:\
:cputime=1h30m:\
:datasize=8M:\
:vmemoryuse=100M:\
:stacksize=2M:\
:memorylocked=4M:\
:memoryuse=8M:\
:filesize=8M:\
:coredumpsize=8M:\
:openfiles=24:\
:maxproc=32:\
:priority=0:\
:requirehome:\
:passwordtime=91d:\
:umask=022:\
:ignoretime@:\
:label=partition/13,mls/5:</programlisting>
<para>Y añadiendo la siguiente línea a la
clase de usuario por omisión:</para>
<programlisting>:label=mls/equal,biba/equal,partition/15:</programlisting>
<para>Una vez que esto se ha completado, el siguiente
comando debe ejecutarse para reconstruir la base
de datos:</para>
<screen>&prompt.root; <userinput>cap_mkdb /etc/login.conf</userinput></screen>
</sect2>
<sect2>
<title>Arrancar con los módulos correctos</title>
<para>Agregue las siguientes líneas al archivo
<filename>/boot/loader.conf</filename> para que los
módulos requeridos sean cargados durante la
inicialización del sistema:</para>
<programlisting>mac_biba_load="YES"
mac_mls_load="YES"
mac_seeotheruids_load="YES"
mac_partition_load="YES"</programlisting>
</sect2>
<sect2>
<title>Configure todos los usuarios a inseguro</title>
<para>Todas la cuentas de usuarios que no sean <username>root</username>
o usuarios de sistema ahora requerirán una clase
de login. Esta clase de login es requerida o de otra
manera a los usuarios se les negará acceso a
comandos comunes como &man.vi.1;.
El siguiente script de <command>sh</command> debe
hacer el truco:</para>
<screen>&prompt.root; <userinput>for x in `awk -F: '($3 >= 1001) && ($3 != 65534) { print $1 }' \</userinput>
<userinput>/etc/passwd`; do pw usermod $x -L insecure; done;</userinput></screen>
<para>El comando <command>cap_mkdb</command> necesitará
ser ejecutado en <filename>/etc/master.passwd</filename> despues
de este cambio.</para>
</sect2>
<sect2>
<title>Complete la configuración</title>
<para>Un archivo de contexto debe ser creado ahora; el
siguiente ejemplo fué tomado del ejemplo de
política de Robert Watson y debe ser colocado en
<filename>/etc/policy.contexts</filename>.</para>
<programlisting># Esta es la política BIBA/MLS por omisión para este sistema.
.* biba/high,mls/high
/sbin/dhclient biba/high(low),mls/high(low)
/dev(/.*)? biba/equal,mls/equal
# This is not an exhaustive list of all "privileged" devices.
/dev/mdctl biba/high,mls/high
/dev/pci biba/high,mls/high
/dev/k?mem biba/high,mls/high
/dev/io biba/high,mls/high
/dev/agp.* biba/high,mls/high
(/var)?/tmp(/.*)? biba/equal,mls/equal
/tmp/\.X11-unix biba/high(equal),mls/high(equal)
/tmp/\.X11-unix/.* biba/equal,mls/equal
/proc(/.*)? biba/equal,mls/equal
/mnt.* biba/low,mls/low
(/usr)?/home biba/high(low),mls/high(low)
(/usr)?/home/.* biba/low,mls/low
/var/mail(/.*)? biba/low,mls/low
/var/spool/mqueue(/.*)? biba/low,mls/low
(/mnt)?/cdrom(/.*)? biba/high,mls/high
(/usr)?/home/(ftp|samba)(/.*)? biba/high,mls/high
/var/log/sendmail\.st biba/low,mls/low
/var/run/utmp biba/equal,mls/equal
/var/log/(lastlog|wtmp) biba/equal,mls/equal</programlisting>
<para>Esta política impondrá seguridad activando
restricciones tanto de bajada como de subida en el flujo
de información en relación a los directorios
y utilidades listadas en la izquierda.</para>
<para>Esto puede ahora ser leído hacia nuestro
sistema ejecutando el siguiente comando:</para>
<screen>&prompt.root; <userinput>setfsmac -ef /etc/policy.contexts /</userinput>
&prompt.root; <userinput>setfsmac -ef /etc/policy.contexts /usr</userinput></screen>
<note>
<para>El esquema de sistema de archivos de arriba puede
ser diferente dependiendo del ambiente.</para>
</note>
<para>El archivo <filename>/etc/mac.conf</filename> requiere
las siguientes modificaciones en la secci6oacute;n
principal:</para>
<programlisting>default_labels file ?biba,?mls
default_labels ifnet ?biba,?mls
default_labels process ?biba,?mls,?partition
default_labels socket ?biba,?mls</programlisting>
</sect2>
<sect2>
<title>Probando la configuración</title>
<indexterm>
<primary>MAC Configuration Testing</primary>
</indexterm>
<para>Agregue un usuario con el comando <command>adduser</command>
y coloque a ese usuario en la clase <literal>insecure</literal>
para estas pruebas.</para>
<para>Los ejemplos de abajo mostrarán una mezcla
de <username>root</username> y usuarios regulares de
prueba; utilice el prompt para distinguie entre
los dos.</para>
<sect3>
<title>Pruebas de etiquetamiento básico</title>
<screen>&prompt.user; <userinput>getpmac</userinput>
biba/15(15-15),mls/15(15-15),partition/15
&prompt.root; <userinput>setpmac partition/15,mls/equal top</userinput></screen>
<note>
<para>El proceso top será asesinado antes
de iniciar otro proceso top.</para>
</note>
</sect3>
<sect3>
<title>Pruebas MAC Seeotheruids</title>
<screen>&prompt.user; <userinput>ps Zax</userinput>
biba/15(15-15),mls/15(15-15),partition/15 1096 #C: S 0:00.03 -su (bash)
biba/15(15-15),mls/15(15-15),partition/15 1101 #C: R+ 0:00.01 ps Zax</screen>
<para>No se debe permitir ver
procesos propiedad de otros usuarios.</para>
</sect3>
<sect3>
<title>Prueba MAC Partition</title>
<para>Deshabilitar la política <acronym>MAC</acronym>
<literal>seeotheruids</literal> para el resto de estas
pruebas:</para>
<screen>&prompt.root; <userinput>sysctl security.mac.seeotheruids.enabled=0</userinput>
&prompt.user; <userinput>ps Zax</userinput>
LABEL PID TT STAT TIME COMMAND
biba/equal(low-high),mls/equal(low-high),partition/15 1122 #C: S+ 0:00.02 top
biba/15(15-15),mls/15(15-15),partition/15 1096 #C: S 0:00.05 -su (bash)
biba/15(15-15),mls/15(15-15),partition/15 1123 #C: R+ 0:00.01 ps Zax</screen>
<para>Todos los usuarios deben tener permitido ver todos
los procesos en su partición.</para>
</sect3>
<sect3>
<title>Probando etiquetas Biba y MLS</title>
<screen>&prompt.root; <userinput>setpmac partition/15,mls/equal,biba/high\(high-high\) top</userinput>
&prompt.user; <userinput>ps Zax</userinput>
LABEL PID TT STAT TIME COMMAND
biba/high(high-high),mls/equal(low-high),partition/15 1251 #C: S+ 0:00.02 top
biba/15(15-15),mls/15(15-15),partition/15 1096 #C: S 0:00.06 -su (bash)
biba/15(15-15),mls/15(15-15),partition/15 1157 #C: R+ 0:00.00 ps Zax</screen>
<para>La política Biba nos permite leer objetos
etiquetados más alto.</para>
<screen>&prompt.root; <userinput>setpmac partition/15,mls/equal,biba/low top</userinput>
&prompt.user; <userinput>ps Zax</userinput>
LABEL PID TT STAT TIME COMMAND
biba/15(15-15),mls/15(15-15),partition/15 1096 #C: S 0:00.07 -su (bash)
biba/15(15-15),mls/15(15-15),partition/15 1226 #C: R+ 0:00.01 ps Zax</screen>
<para>La política Biba no permite que objetos
etiquetados como inferiores sean leídos; de
todas maneras, <acronym>MLS</acronym> si lo
permite.</para>
<screen>&prompt.user; <userinput>ifconfig bge0 | grep maclabel</userinput>
maclabel biba/low(low-low),mls/low(low-low)
&prompt.user; <userinput>ping -c 1 192.0.34.166</userinput>
PING 192.0.34.166 (192.0.34.166): 56 data bytes
ping: sendto: Permission denied</screen>
<para>Los usuarios son incapaces
de dar un ping a
<hostid role="domainname">example.com</hostid>, o cualquier
dominio.</para>
<para>Para prevenir que ocurra este error, ejecute el
siguiente comando:</para>
<screen>&prompt.root; <userinput>sysctl security.mac.biba.trust_all_interfaces=1</userinput></screen>
<para>Esto configura la etiqueta por omisión de interfaces
a modo inseguro, con ello la política Biba por omisió
no será impuesta.</para>
<screen>&prompt.root; <userinput>ifconfig bge0 maclabel biba/equal\(low-high\),mls/equal\(low-high\)</userinput>
&prompt.user; <userinput>ping -c 1 192.0.34.166</userinput>
PING 192.0.34.166 (192.0.34.166): 56 data bytes
64 bytes from 192.0.34.166: icmp_seq=0 ttl=50 time=204.455 ms
--- 192.0.34.166 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max/stddev = 204.455/204.455/204.455/0.000 ms</screen>
<para>Configurando una etiqueta más correcta,
podemos ejecutar peticiones de <command>ping</command>.</para>
<para>Ahora para crear algunos archivos para procedimientos
de prueba de lectura y escritura:</para>
<screen>&prompt.root; <userinput>touch test1 test2 test3 test4 test5</userinput>
&prompt.root; <userinput>getfmac test1</userinput>
test1: biba/equal,mls/equal
&prompt.root; <userinput>setfmac biba/low test1 test2; setfmac biba/high test4 test5; \
setfmac mls/low test1 test3; setfmac mls/high test2 test4</userinput>
&prompt.root; <userinput>setfmac mls/equal,biba/equal test3 && getfmac test?</userinput>
test1: biba/low,mls/low
test2: biba/low,mls/high
test3: biba/equal,mls/equal
test4: biba/high,mls/high
test5: biba/high,mls/equal
&prompt.root; <userinput>chown testuser:testuser test?</userinput></screen>
<para>Todos estos archivos deben ser ahora propiedad
de nuestro usuario <username>testuser</username>.
Y ahora para algunas pruebas de lectura:</para>
<screen>&prompt.user; <userinput>ls</userinput>
test1 test2 test3 test4 test5
&prompt.user; <userinput>ls test?</userinput>
ls: test1: Permission denied
ls: test2: Permission denied
ls: test4: Permission denied
test3 test5</screen>
<para>No deberíamos tener permitido observar
pares; ejemplo:
<literal>(biba/low,mls/low)</literal>,
<literal>(biba/low,mls/high)</literal> y
<literal>(biba/high,mls/high)</literal>. Y por supuesto,
el acceso de lectura debe estar denegado. Ahora para
algunas pruebas de escritura:</para>
<screen>&prompt.user; <userinput>for i in `echo test*`; do echo 1 > $i; done</userinput>
-su: test1: Permission denied
-su: test4: Permission denied
-su: test5: Permission denied</screen>
<para>Como con las pruebas de lectura, el acceso de
escritura no debe ser permitido para escribir pares;
ejemplo:
<literal>(biba/low,mls/high)</literal> y
<literal>(biba/equal,mls/equal)</literal>.</para>
<screen>&prompt.user; <userinput>cat test?</userinput>
cat: test1: Permission denied
cat: test2: Permission denied
1
cat: test4: Permission denied</screen>
<para>Y ahora como <username>root</username>:</para>
<screen>&prompt.root; <userinput>cat test2</userinput>
1</screen>
</sect3>
</sect2>
</sect1>
<sect1 id="MAC-examplehttpd">
<title>Otro ejemplo: Utilizando MAC para confinar un servidor web</title>
<para>Una locación separada para los datos de
web a los cuales los usuarios deben ser capaces de
accesar será seleccionada. Esto permitirá
a los procesos <literal>biba/high</literal> derechos
de acceso a los datos web.</para>
<para>Inicie creando un directorio para guardar los
datos de web:</para>
<screen>&prompt.root; <userinput>mkdir /usr/home/cvs</userinput></screen>
<para>Ahora inicialicelo con <command>cvs</command>:</para>
<screen>&prompt.root; <userinput>cvs -d /usr/home/cvs init</userinput></screen>
<para>El primer objetivo es habilitar la política
<literal>biba</literal>, así
<literal>mac_biba_enable="YES"</literal> debe ser
colocado en
<filename>/boot/loader.conf</filename>. Se asume que
el soporte para <acronym>MAC</acronym> ha sido
habilitado en el kernel.</para>
<para>De este punto en adelante todo en el sistema
debe configurarse a <literal>biba/high</literal> por
omisión.</para>
<para>La siguiente modificación debe ser hecha
al archivo <filename>login.conf</filename>, bajo
la clase de usuario por omisión:</para>
<programlisting>:ignoretime@:\
:umask=022:\
:label=biba/high:</programlisting>
<para>Cada usuario debe ser ahora colocado en la clase por
omisión; un comando como:</para>
<screen>&prompt.root; <userinput>for x in `awk -F: '($3 >= 1001) && ($3 != 65534) { print $1 }' \</userinput>
<userinput>/etc/passwd`; do pw usermod $x -L default; done;</userinput></screen>
<para>logrará esta tarea en unos cuantos momentos.</para>
<para>Ahora hay que crear otra clase, web, una copia de
la clase por omisión, con la configuración de
etiqueta <literal>biba/low</literal>.</para>
<para>Agregue un usuario que será utilizado para
trabajar con los datos principales de web guardados
en un repositorio <application>cvs</application>.
Este usuario debe ser colocado en nuestra nueva clase
de login, <username>web</username>.</para>
<para>Ya que en todos lados por omisión es
<literal>biba/high</literal>, el repositorio será
el mismo. Los datos de web también deben ser
lo mismo para usuarios que tienen acceso de lectura/escritura.
de todas maneras, ya que nuestro servidor de web
estará sirviendo datos que usuarios
<literal>biba/high</literal> deben accesar, necesitaremos
rebajar los datos como un todo.</para>
<para>Las herramientas perfectas para esto son &man.sh.1;
y &man.cron.8; y ya están en &os;. El siguiente
script debe hacer todo lo que queremos:</para>
<programlisting>PATH=/bin:/usr/bin:/usr/local/bin; export PATH;
CVSROOT=/home/repo; export CVSROOT;
cd /home/web;
cvs -qR checkout -P htdocs;
exit;</programlisting>
<note>
<para>En muchos casos los Id tags de <command>cvs</command>
deben ser colocados dentro de los archivos
de datos del sitio web.</para>
</note>
<para>Este script puede ahora ser colocado
en el directorio home de <username>web</username>
y la siguiente entrada agregada a &man.crontab.1;:</para>
<programlisting># Descargar los datos de web como biba/low cada doce horas:
0 */12 * * * web /home/web/checkout.sh</programlisting>
<para>Esto descargará las fuentes <acronym>HTML</acronym>
cada doce horas en la máquina.</para>
<para>El método de arranque por omisión para el
servidor de web debe ser modificado también para
iniciar los procesos como <literal>biba/low</literal>.
Esto puede realizarse haciendo la siguiente modificación
al script
<filename>/usr/local/etc/rc.d/apache.sh</filename>:</para>
<programlisting>command="setpmac biba/low /usr/local/sbin/httpd"</programlisting>
<para>La configuraci6oacute:n de <application>Apache</application>
debe ser alterada para trabajar con la política
<literal>biba/low</literal>. En este caso el software debe ser
configurado para agregar a los archivos de log en un directorio
configurado como <literal>biba/low</literal> o de lo contrario
errores de <errorname>access denied</errorname> serán
retornados.</para>
<note>
<para>Siguiendo este ejemplo requiere que la
directiva <literal>docroot</literal> sea
puesta a <filename>/home/web/htdocs</filename>;
de otra manera, <application>Apache</application>
fallará al tratar de localizar el
directorio desde donde servir documentos.</para>
</note>
<para>Otras variables de configuración deben ser
también alteradas, incluyendo el <acronym>PID</acronym>
de archivo,
<literal>Scoreboardfile</literal>,
<literal>DocumentRoot</literal>, sitio del archivo de log o
cualquier otra variable que requiera acceso de escritura.
Al utilizar <literal>biba</literal>, todos los accesos de
escritura serán negados al servidor en áreas
<emphasis>no</emphasis> puestas a
<literal>biba/low</literal>.</para>
<!--
PROBLEM: CAN THIS WORK? OR SHOULD IT BE start_precmd? More testing need here.
-->
</sect1>
<!--
XXX
<sect1 id="mac-examplesandbox">
<title>Un ejemplo de una caja de arena MAC</title>
<para>Un ejemplo del colocamiento de usuarios en
una caja de arena (sandbox) utilizando
<acronym>MAC</acronym> debe ir aquí.</para>
</sect1>
-->
<sect1 id="mac-troubleshoot">
<title>Determinando errores en la estructura MAC</title>
<indexterm>
<primary>MAC Troubleshooting</primary>
</indexterm>
<para>Durante la fase de desarrollo, algunos usuarios reportaron
problemas con la configuración normal. Algunos de
estos problemas están listados abajo:</para>
<sect2>
<title>La opción <option>multilabel</option> no puede ser
habilitada en <filename>/</filename></title>
<para>¡La bandera <option>multilabel</option> no permanece
habilitada en mi partición raíz
(<filename>/</filename>)!</para>
<para>Parece que uno de cada cincuenta usuarios tiene
este problema, de hecho, hemos tenido este problema
durante nuestra configuración inicial.
Mayor observación en este llamado <quote>bug</quote>
me ha llevado a creer que es el resultado de documentación
incorrecta o de interpretación errónea
de la documentación. Sin importar por qué
sucede, se pueden tomar los siguientes pasos para
resolverlo:</para>
<procedure>
<step>
<para>Editar <filename>/etc/fstab</filename> y poner la
partición raíz a <option>ro</option> para
solo lectura.</para>
</step>
<step>
<para>Reiniciar en modo mono usuario.</para>
</step>
<step>
<para>Ejecutar <command>tunefs</command> <option>-l enable</option>
en <filename>/</filename>.</para>
</step>
<step>
<para>Reiniciar el sistema a modo normal.</para>
</step>
<step>
<para>Ejecutar <command>mount</command> <option>-urw</option>
<filename>/</filename> y cambiar <option>ro</option>
de regreso a <option>rw</option> en
<filename>/etc/fstab</filename> y reiniciar el sistema de nuevo.
</para>
</step>
<step>
<para>Revisar nuevamente la salida de
<command>mount</command> para asegurarse
que <option>multilabel</option> haya sido
activada correctamente el el sistema de
archivos raíz.</para>
</step>
</procedure>
</sect2>
<sect2>
<title>No se puede iniciar un servidor X11 despues de
<acronym>MAC</acronym></title>
<para>Despues de establecer un ambiente seguro con
<acronym>MAC</acronym>, ¡ya no puedo iniciar
X!</para>
<para>Esto puede ser causado por la política
<acronym>MAC</acronym> <literal>partition</literal>
o por un etiquetamiento erroneo en una de las
políticas de etiquetamiento <acronym>MAC</acronym>.
Para determinar el error trate lo siguiente:</para>
<procedure>
<step>
<para>Revise el mensaje de error; si el usuario está
en la clase <literal>insecure</literal>, la política
<literal>partition</literal> puede ser la culpable.
Trate poner la clase del usuario de regreso a la
clase <literal>default</literal> y recostruya la base
de datos con el comando <command>cap_mkdb</command>.
Si esto no alivia el problema, vaya al paso dos.</para>
</step>
<step>
<para>Revise doblemente las políticas de etiquetamiento.
Asegúrese que las políticas están
configuradas correctamente para el usuario en cuestión,
la aplicación X11 y las entradas
<filename class="directory">/dev</filename>.</para>
</step>
<step>
<para>Si ninguno de estos resuelve el problema, envie el
mensaje de error y la descripción de su ambiente
a la lista de discusión TrustedBSD localizada en
el sitio web
<ulink url="http://www.TrustedBSD.org">TrustedBSD</ulink>
o a la lista de correo &a.questions;.</para>
</step>
</procedure>
</sect2>
<sect2>
<title>Error: &man..secure.path.3; cannot stat
<filename>.login_conf</filename></title>
<para>Cuando trato de cambiar de <username>root</username> a
otro usuario en el sistema, aparece el mensaje de error
<errorname>_secure_path: unable to state .login_conf</errorname>.
</para>
<para>Este mensaje es usualmente desplegado cuando el usuario
tiene una etiqueta más alta que la del usuario al que
se está tratando de convertir. Por ejemplo, un usuario
en el sistema, <username>joe</username>, tiene una etiqueta
por omisión de
<option>biba/low</option>. El usuario <username>root</username>,
que tiene una etiqueta de <option>biba/high</option>, no
puede ver el directorio home de <username>joe</username>.
Esto sucederá sin importar que <username>root</username>
haya usado el comando <command>su</command> para convertirse
en <username>joe</username>, o no. En este escenario, el modelo
de integridad Biba no permitirá a <username>root</username>
ver objetos puestos a un nivel de integridad inferior.</para>
</sect2>
<sect2>
<title>¡El usuario <username>root</username> no funciona!</title>
<para>En modo normal o incluso en modo monousuario,
<username>root</username> no es reconocido. El
comando <command>whoami</command> regresa 0 (cero) y
<command>su</command> regresa <errorname>who are you?</errorname>.
¿Que es lo que puede estar pasando?</para>
<para>Esto puede suceder si una política de etiquetamiento
ha sido deshabilitada, ya sea por &man.sysctl.8; o el
módulo de política ha sido removido.
Si la política ha sido deshabilitada o ha sido
temporalmente deshabilitada, entonces las capacidades de
la base de datos de login necesita ser reconfigurada con
la opción <option>label</option> eliminada.
Revise doblemente el archivo <filename>login.conf</filename>
para asegurarse que todas las opciones <option>label</option>
hayan sido eliminadas y reconstruya la base de datos con
el comando <command>cap_mkdb</command>.</para>
</sect2>
</sect1>
</chapter>
<!--
Local Variables:
mode: sgml
sgml-declaration: "../chapter.decl"
sgml-indent-data: t
sgml-omittag: nil
sgml-always-quote-attributes: t
sgml-parent-document: ("../book.sgml" "part" "chapter")
End:
-->
|