Copyright (c) 2003 Networks Associates Technology, Inc. All rights reserved. This software was developed for the FreeBSD Project by Chris Costello at Safeport Network Services and Network Associates Labs, the Security Research Division of Network Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the DARPA CHATS research program. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditi...
NAMEmac - Mandatory Access Control
IntroductionThe Mandatory Access Control, or MAC, framework allows administrators to finely control system security by providing for a loadable security policy architecture. It is important to note that due to its nature, MAC security policies may only restrict access relative to one another and the base system policy; they cannot override traditional UNIX security provisions such as file permissions and superuser checks.
Currently, the following MAC policy modules are shipped with Fx :
- Name Ta Description Ta Labeling Ta Load time
MAC LabelsEach system subject (processes, sockets, etc.) and each system object (file system objects, sockets, etc.) can carry with it a MAC label. MAC labels contain data in an arbitrary format taken into consideration in making access control decisions for a given operation. Most MAC labels on system subjects and objects can be modified directly or indirectly by the system administrator. The format for a given policy's label may vary depending on the type of object or subject being labeled. More information on the format for MAC labels can be found in the maclabel(7) man page.
MAC Support for UFS2 File SystemsBy default, file system enforcement of labeled MAC policies relies on a single file system label (see Sx MAC Labels ) in order to make access control decisions for all the files in a particular file system. With some policies, this configuration may not allow administrators to take full advantage of features. In order to enable support for labeling files on an individual basis for a particular file system, the ``multilabel'' flag must be enabled on the file system. To set the ``multilabel'' flag, drop to single-user mode and unmount the file system, then execute the following command:
"tunefs -l enable" filesystem
where filesystem is either the mount point (in fstab(5)) or the special file (in /dev corresponding to the file system on which to enable multilabel support.
Policy EnforcementPolicy enforcement is divided into the following areas of the system:
- File System
- File system mounts, modifying directories, modifying files, etc.
- Loading, unloading, and retrieving statistics on loaded kernel modules
- Network interfaces, bpf(4), packet delivery and transmission, interface configuration (ioctl2, ifconfig(8))
- Creation of and operation on pipe(2) objects
- Debugging (e.g. ktrace(2)), process visibility (ps(1) ) process execution (execve(2) ) signalling (kill(2) )
- Creation of and operation on socket(2) objects
- Kernel environment (kenv(1) ) system accounting (acct(2) ) reboot(2), settimeofday(2), swapon(2), sysctl(3), nfsd(8) -related operations
- mmap(2) -ed files
Setting MAC LabelsFrom the command line, each type of system object has its own means for setting and modifying its MAC policy label.
- Subject/Object Ta Utility
- "File system object" Ta setfmac(8),Xrsetfsmac8
- "Network interface" Ta ifconfig(8)
- "TTY (by login class)" Ta login.conf5
- "User (by login class)" Ta login.conf5
Additionally, the su(1) and setpmac(8) utilities can be used to run a command with a different process label than the shell's current label.
Programming With MACMAC security enforcement itself is transparent to application programs, with the exception that some programs may need to be aware of additional errno(2) returns from various system calls.
The interface for retrieving, handling, and setting policy labels is documented in the mac(3) man page.
SEE ALSOmac(3), mac_biba4, mac_bsdextended4, mac_ifoff4, mac_lomac4, mac_mls4, mac_none4, mac_partition4, mac_portacl4, mac_seeotheruids4, mac_test4, login.conf5, maclabel(7), getfmac(8), getpmac(8), setfmac(8), setpmac(8), mac(9)
- "The FreeBSD Handbook" "Mandatory Access Control"