5.  Jail Implementation

      Processes running with root privileges in the jail find that there are serious restrictions on what it is capable of doing -- in particular, activities that would extend outside of the jail:

+ Modifying the running kernel by direct access and loading kernel modules is prohibited.

+ Modifying any of the network configuration, interfaces, addresses, and routing table is prohibited.

+ Mounting and unmounting file systems is prohibited.

+ Creating device nodes is prohibited.

+ Accessing raw, divert, or routing sockets is prohibited.

+ Modifying kernel runtime parameters, such as most sysctl settings, is prohibited.

+ Changing securelevel-related file flags is prohibited.

+ Accessing network resources not associated with the jail is prohibited.

      Other privileged activities are permitted as long as they are limited to the scope of the jail:

+ Signalling any process within the jail is permitted.

+ Changing the ownership and mode of any file within the jail is permitted, as long as the file flags permit this.

+ Deleting any file within the jail is permitted, as long as the file flags permit this.

+ Binding reserved TCP and UDP port numbers on the jails IP address is permitted. (Attempts to bind TCP and UDP ports using INADDR_ANY will be redirected to the jails IP address.)

+ Functions which operate on the uid/gid space are all permitted since they act as labels for filesystem objects of proceses which are partitioned off by other mechanisms.

      These restrictions on root access limit the scope of root processes, enabling most applications to run un-hindered, but preventing calls that might allow an application to reach beyond the jail and influence other processes or system-wide configuration.