Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
CAPSICUM(4)		     Kernel Interfaces Manual		     CAPSICUM(4)

NAME
     Capsicum -- lightweight OS capability and sandbox framework

SYNOPSIS
     options CAPABILITY_MODE
     options CAPABILITIES

DESCRIPTION
     Capsicum  is a lightweight OS capability and sandbox framework implementing
     a hybrid capability system model.	Capsicum is designed to blend  capabili-
     ties with UNIX.  This approach achieves many of the benefits of least-priv-
     ilege  operation,	while preserving existing UNIX APIs and performance, and
     presents application authors with an adoption path for  capability-oriented
     design.

     Capabilities  are unforgeable tokens of authority that can be delegated and
     must be presented to perform an action.  Capsicum	makes  file  descriptors
     into capabilities.

     Capsicum  can be used for application and library compartmentalisation, the
     decomposition of larger bodies of software into isolated (sandboxed) compo-
     nents in order to implement security policies and limit the impact of soft-
     ware vulnerabilities.

     Capsicum provides two core kernel primitives:

     capability mode
	     A process mode, entered by invoking cap_enter(2), in  which  access
	     to  global  OS  namespaces  (such	as the file system and PID name-
	     spaces) is restricted; only explicitly delegated rights, referenced
	     by memory mappings or file descriptors, may be used.  Once set, the
	     flag is inherited by future children  processes,  and  may  not  be
	     cleared.

	     Access  to system calls in capability mode is restricted: some sys-
	     tem calls requiring global namespace access are unavailable,  while
	     others  are  constrained.	 For  instance, sysctl(2) can be used to
	     query process-local information such as address space  layout,  but
	     also  to monitor a system's network connections.  sysctl(2) is con-
	     strained by explicitly marking ~~60 of  over  15000  parameters  as
	     permitted in capability mode; all others are denied.

	     The   system   calls   which  require  constraints  are  sysctl(2),
	     shm_open(2) (which is permitted to create anonymous memory  objects
	     but  not named ones) and the openat(2) family of system calls.  The
	     openat(2) calls already accept a file descriptor  argument  as  the
	     directory	to  perform the open(2), rename(2), etc. relative to; in
	     capability mode the openat(2)  family  of	system	calls  are  con-
	     strained  so that they can only operate on objects aundera the pro-
	     vided file descriptor.

     capabilities
	     Limit operations that can be called on file descriptors.  For exam-
	     ple, a file descriptor returned by open(2)  may  be  refined  using
	     cap_rights_limit(2)  so  that  only  read(2)  and	write(2)  can be
	     called, but not fchmod(2).  The complete  list  of  the  capability
	     rights can be found in the rights(4) manual page.

     In  some  cases, Capsicum requires use of alternatives to traditional POSIX
     APIs in order to name objects using capabilities rather than  global  name-
     spaces:

     process descriptors
	     File  descriptors representing processes, allowing parent processes
	     to manage child processes without requiring access to the PID name-
	     space; described in greater detail in procdesc(4).

     anonymous shared memory
	     An extension to the POSIX shared memory API  to  support  anonymous
	     swap objects associated with file descriptors; described in greater
	     detail in shm_open(2).

     In  some cases, Capsicum limits the valid values of some parameters to tra-
     ditional APIs in order to restrict access to global namespaces:

     process IDs
	     Processes can only act upon their own process ID with syscalls such
	     as cpuset_setaffinity(2).

     FreeBSD provides some additional functionality to support application sand-
     boxing that is not part of Capsicum itself:

     capsicum_helpers(3)
	     A set of a inline functions which simplify  modifying  programs  to
	     use Capsicum.

     libcasper(3)
	     A	library  that provides services for sandboxed applications, such
	     as operating on files specified on a command line	or  establishing
	     network connections.

SEE ALSO
     cap_enter(2),   cap_fcntls_limit(2),  cap_getmode(2),  cap_ioctls_limit(2),
     cap_rights_limit(2), fchmod(2), open(2), pdfork(2), pdgetpid(2), pdkill(2),
     pdwait4(2),  read(2),  shm_open(2),   write(2),   cap_rights_get(3),   cap-
     sicum_helpers(3), libcasper(3), procdesc(4)

HISTORY
     Capsicum first appeared in FreeBSD 9.0, and was developed at the University
     of Cambridge.

AUTHORS
     Capsicum  was developed by Robert Watson <rwatson@FreeBSD.org> and Jonathan
     Anderson <jonathan@FreeBSD.org> at the University	of  Cambridge,	and  Ben
     Laurie  <benl@FreeBSD.org>  and Kris Kennaway <kris@FreeBSD.org> at Google,
     Inc., and Pawel Jakub Dawidek <pawel@dawidek.net>.  Portions of this manual
     page are drawn from Robert N. M. Watson, Jonathan Anderson, Ben Laurie, and
     Kris Kennaway, "Capsicum: practical capabilities for UNIX", USENIX Security
     Symposium, August 2010, DOI: 10.5555/1929820.1929824.

FreeBSD ports 15.quarterly	January 23, 2026		     CAPSICUM(4)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=capsicum&sektion=4&manpath=FreeBSD+15.1-RELEASE+and+Ports.quarterly>

home | help