throbber
Jails: Confining the omnipotent root.
`
`Poul-Henning Kamp <phk@FreeBSD.org>
`
`Robert N. M. Watson <rwatson@FreeBSD.org>
`
`The FreeBSD Project
`
`ABSTRACT
`
`The traditional UNIX security model is simple but inexpressive.
`Adding fine-grained access control improves the expressiveness, but
`often dramatically increases both the cost of system management and
`implementation complexity. In environments with a more complex man-
`agement model, with delegation of some management functions to par-
`ties under varying degrees of trust, the base UNIX model and most natu-
`ral extensions are inappropriate at best. Where multiple mutually un-
`trusting parties are introduced, ‘‘inappropriate’’ rapidly transitions to
`‘‘nightmarish’’, especially with regards to data integrity and privacy pro-
`tection.
`The FreeBSD ‘‘Jail’’ facility provides the ability to partition the operat-
`ing system environment, while maintaining the simplicity of the UNIX
`‘‘root’’ model. In Jail, users with privilege find that the scope of their
`requests is limited to the jail, allowing system administrators to delegate
`management capabilities for each virtual machine environment. Creating
`virtual machines in this manner has many potential uses; the most popu-
`lar thus far has been for providing virtual machine services in Internet
`Service Provider environments.
`
`1. Introduction
`The UNIX access control mechanism is designed for an environment with two types
`of users: those with, and without administrative privilege. Within this framework, every
`attempt is made to provide an open system, allowing easy sharing of files and inter-pro-
`cess communication. As a member of the UNIX family, FreeBSD inherits these secu-
`rity properties. Users of FreeBSD in non-traditional UNIX environments must balance
`their need for strong application support, high network performance and functionality,
`
`This work was sponsored by http://www.servetheweb.com/ and donated to
`the FreeBSD Project for inclusion in the FreeBSD OS. FreeBSD 4.0-RELEASE was
`the first release including this code. Follow-on work was sponsored by Safeport Net-
`work Services, http://www.safeport.com/
`
`Google Exhibit 1076
`Google v. VirtaMove
`
`EX1076 - Page 1
`
`

`

`and low total cost of ownership with the need for alternative security models that are
`difficult or impossible to implement with the UNIX security mechanisms.
`One such consideration is the desire to delegate some (but not all) administrative
`functions to untrusted or less trusted parties, and simultaneously impose system-wide
`mandatory policies on process interaction and sharing. Attempting to create such an
`environment in the current-day FreeBSD security environment is both difficult and
`costly: in many cases, the burden of implementing these policies falls on user applica-
`tions, which means an increase in the size and complexity of the code base, in turn
`translating to higher development and maintaennce cost, as well as less overall flexibil-
`ity.
`This abstract risk becomes more clear when applied to a practical, real-world exam-
`ple: many web service providers turn to the FreeBSD operating system to host customer
`web sites, as it provides a high-performance, network-centric server environment. How-
`ev er, these providers have a number of concerns on their plate, both in terms of protect-
`ing the integrity and confidentiality of their own files and services from their customers,
`as well as protecting the files and services of one customer from (accidental or inten-
`tional) access by any other customer. At the same time, a provider would like to provide
`substantial autonomy to customers, allowing them to install and maintain their own soft-
`ware, and to manage their own services, such as web servers and other content-related
`daemon programs.
`This problem space points strongly in the direction of a partitioning solution, in which
`customer processes and storage are isolated from those of other customers, both in
`terms of accidental disclosure of data or process information, but also in terms of the
`ability to modify files or processes outside of a compartment. Delegation of manage-
`ment functions within the system must be possible, but not at the cost of system-wide
`requirements, including integrity and privacy protection between partitions.
`However, UNIX-style access control makes it notoriously difficult to compartmen-
`talise functionality. While mechanisms such as chroot(2) provide a modest level com-
`partmentalisation, it is well known that these mechanisms have serious shortcomings,
`both in terms of the scope of their functionality, and effectiveness at what they provide
`[CHROOT].
`In the case of the chroot(2) call, a process’s visibility of the file system name-space is
`limited to a single subtree. However, the compartmentalisation does not extend to the
`process or networking spaces and therefore both observation of and interference with
`processes outside their compartment is possible.
`To this end, we describe the new FreeBSD ‘‘Jail’’ facility, which provides a strong
`partitioning solution, leveraging existing mechanisms, such as chroot(2), to what effec-
`tively amounts to a virtual machine environment. Processes in a jail are provided full
`access to the files that they may manipulate, processes they may influence, and network
`services they can make use of, and neither access nor visibility of files, processes or net-
`work services outside their partition.
`Unlike other fine-grained security solutions, Jail does not substantially increase the
`policy management requirements for the system administrator, as each Jail is a virtual
`
`EX1076 - Page 2
`
`

`

`FreeBSD environment permitting local policy to be independently managed, with much
`the same properties as the main system itself, making Jail easy to use for the administra-
`tor, and far more compatible with applications.
`
`2. Traditional UNIX Security, or, ‘‘God, root, what difference?" [UF].
`The traditional UNIX access model assigns numeric uids to each user of the system.
`In turn, each process ‘‘owned’’ by a user will be tagged with that user’s uid in an
`unforgeable manner. The uids serve two purposes: first, they determine how discre-
`tionary access control mechanisms will be applied, and second, they are used to deter-
`mine whether special privileges are accorded.
`In the case of discretionary access controls, the primary object protected is a file. The
`uid (and related gids indicating group membership) are mapped to a set of rights for
`each object, courtesy the UNIX file mode, in effect acting as a limited form of access
`control list. Jail is, in general, not concerned with modifying the semantics of discre-
`tionary access control mechanisms, although there are important implications from a
`management perspective.
`For the purposes of determining whether special privileges are accorded to a process,
`the check is simple: ‘‘is the numeric uid equal to 0 ?’’. If so, the process is acting with
`‘‘super-user privileges’’, and all access checks are granted, in effect allowing the process
`the ability to do whatever it wants to 1.
`For the purposes of human convenience, uid 0 is canonically allocated to the ‘‘root’’
`user [ROOT]. For the purposes of jail, this behaviour is extremely relevant: many of
`these privileged operations can be used to manage system hardware and configuration,
`file system name-space, and special network operations.
`Many limitations to this model are immediately clear: the root user is a single, con-
`centrated source of privilege that is exposed to many pieces of software, and as such an
`immediate target for attacks. In the event of a compromise of the root capability set, the
`attacker has complete control over the system. Even without an attacker, the risks of a
`single administrative account are serious: delegating a narrow scope of capability to an
`inexperienced administrator is difficult, as the granularity of delegation is that of all sys-
`tem management abilities. These features make the omnipotent root account a sharp,
`efficient and extremely dangerous tool.
`The BSD family of operating systems have implemented the ‘‘securelevel’’ mecha-
`nism which allows the administrator to block certain configuration and management
`functions from being performed by root, until the system is restarted and brought up
`into single-user mode. While this does provide some amount of protection in the case
`of a root compromise of the machine, it does nothing to address the need for delegation
`of certain root abilities.
`
`1 ... no matter how patently stupid it may be.
`
`EX1076 - Page 3
`
`

`

`3. Other Solutions to the Root Problem
`Many operating systems attempt to address these limitations by providing fine-grained
`access controls for system resources [BIBA]. These efforts vary in degrees of success,
`but almost all suffer from at least three serious limitations:
`First, increasing the granularity of security controls increases the complexity of the
`administration process, in turn increasing both the opportunity for incorrect configura-
`tion, as well as the demand on administrator time and resources. In many cases, the
`increased complexity results in significant frustration for the administrator, which may
`result in two disastrous types of policy: ‘‘all doors open as it’s too much trouble’’, and
`‘‘trust that the system is secure, when in fact it isn’t’’.
`The extent of the trouble is best illustrated by the fact that an entire niche industry has
`emerged providing tools to manage fine grained security controls [UAS].
`Second, usefully segregating capabilities and assigning them to running code and
`users is very difficult. Many privileged operations in UNIX seem independent, but are
`in fact closely related, and the handing out of one privilege may, in effect, be transitive
`to the many others. For example, in some trusted operating systems, a system capability
`may be assigned to a running process to allow it to read any file, for the purposes of
`backup. However, this capability is, in effect, equivalent to the ability to switch to any
`other account, as the ability to access any file provides access to system keying material,
`which in turn provides the ability to authenticate as any user. Similarly, many operating
`systems attempt to segregate management capabilities from auditing capabilities. In a
`number of these operating systems, however, ‘‘management capabilities’’ permit the
`administrator to assign ‘‘auditing capabilities’’ to itself, or another account, circumvent-
`ing the segregation of capability.
`Finally, introducing new security features often involves introducing new security
`management APIs. When fine-grained capabilities are introduced to replace the setuid
`mechanism in UNIX-like operating systems, applications that previously did an ‘‘appro-
`priateness check’’ to see if they were running as root before executing must now be
`changed to know that they need not run as root. In the case of applications running with
`privilege and executing other programs, there is now a new set of privileges that must be
`voluntarily given up before executing another program. These change can introduce
`significant incompatibility for existing applications, and make life more difficult for
`application developers who may not be aware of differing security semantics on differ-
`ent systems [POSIX1e].
`
`4. The Jail Partitioning Solution
`Jail neatly side-steps the majority of these problems through partitioning. Rather than
`introduce additional fine-grained access control mechanism, we partition a FreeBSD
`environment (processes, file system, network resources) into a management environ-
`ment, and optionally subset Jail environments. In doing so, we simultaneously maintain
`the existing UNIX security model, allowing multiple users and a privileged root user in
`each jail, while limiting the scope of root’s activities to his jail. Consequently the
`administrator of a FreeBSD machine can partition the machine into separate jails, and
`
`EX1076 - Page 4
`
`

`

`provide access to the super-user account in each of these without losing control of the
`over-all environment.
`A process in a partition is referred to as ‘‘in jail’’. When a FreeBSD system is booted
`up after a fresh install, no processes will be in jail. When a process is placed in a jail, it,
`and any descendents of the process created after the jail creation, will be in that jail. A
`process may be in only one jail, and after creation, it can not leave the jail. Jails are cre-
`ated when a privileged process calls the jail(2) syscall, with a description of the jail as
`an argument to the call. Each call to jail(2) creates a new jail; the only way for a new
`process to enter the jail is by inheriting access to the jail from another process already in
`that jail. Processes may never leave the jail they created, or were created in.
`
`lo0 127.0.0.1
`
`dev/
`
`etc/
`
`usr/
`
`var/
`
`/
`
`home/
`
`jail_1/
`
`jail_2/
`
`jail_3/
`
`dev/
`
`etc/
`
`usr/
`
`var/
`
`home/
`
`dev/
`
`etc/
`
`usr/
`
`var/
`
`home/
`
`10.0.0.1
`
`10.0.0.2
`
`10.0.0.3
`
`10.0.0.4
`
`10.0.0.5
`
`fxp0
`
`Fig. 1 — Schematic diagram of machine with two configured jails
`
`Membership in a jail involves a number of restrictions: access to the file name-space
`is restricted in the style of chroot(2), the ability to bind network resources is limited to a
`specific IP address, the ability to manipulate system resources and perform privileged
`operations is sharply curtailed, and the ability to interact with other processes is limited
`to only processes inside the same jail.
`Jail takes advantage of the existing chroot(2) behaviour to limit access to the file sys-
`tem name-space for jailed processes. When a jail is created, it is bound to a particular
`file system root. Processes are unable to manipulate files that they cannot address, and
`as such the integrity and confidentiality of files outside of the jail file system root are
`protected. Traditional mechanisms for breaking out of chroot(2) have been blocked. In
`the expected and documented configuration, each jail is provided with its exclusive file
`system root, and standard FreeBSD directory layout, but this is not mandated by the
`implementation.
`Each jail is bound to a single IP address: processes within the jail may not make use
`of any other IP address for outgoing or incoming connections; this includes the ability to
`restrict what network services a particular jail may offer. As FreeBSD distinguishes
`attempts to bind all IP addresses from attempts to bind a particular address, bind
`requests for all IP addresses are redirected to the individual Jail address. Some network
`functionality associated with privileged calls are wholesale disabled due to the nature of
`
`EX1076 - Page 5
`
`

`

`the functionality offered, in particular facilities which would allow ‘‘spoofing’’ of IP
`numbers or disruptive traffic to be generated have been disabled.
`Processes running without root privileges will notice few, if any differences between a
`jailed environment or un-jailed environment. Processes running with root privileges
`will find that many restrictions apply to the privileged calls they may make. Some calls
`will now return an access error — for example, an attempt to create a device node will
`now fail. Others will have a more limited scope than normal — attempts to bind a
`reserved port number on all available addresses will result in binding only the address
`associated with the jail. Other calls will succeed as normal: root may read a file owned
`by any uid, as long as it is accessible through the jail file system name-space.
`Processes within the jail will find that they are unable to interact or even verify the
`existence of processes outside the jail — processes within the jail are prevented from
`delivering signals to processes outside the jail, as well as connecting to those processes
`with debuggers, or even see them in the sysctl or process file system monitoring mecha-
`nisms. Jail does not prevent, nor is it intended to prevent, the use of covert channels or
`communications mechanisms via accepted interfaces — for example, two processes
`may communicate via sockets over the IP network interface. Nor does it attempt to pro-
`vide scheduling services based on the partition; however, it does prevent calls that inter-
`fere with normal process operation.
`As a result of these attempts to retain the standard FreeBSD API and framework,
`almost all applications will run unaffected. Standard system services such as Telnet,
`FTP, and SSH all behave normally, as do most third party applications, including the
`popular Apache web server.
`
`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, div ert, 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.
`
`EX1076 - Page 6
`
`

`

`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 permit-
`ted. (Attempts to bind TCP and UDP ports using IN_ADDRANY will be redi-
`rected 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 mecha-
`nisms.
`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.
`
`6. Implementation jail in the FreeBSD kernel.
`
`6.1. The jail(2) system call, allocation, refcounting and deallocation of struct
`prison.
`The jail(2) system call is implemented as a non-optional system call in FreeBSD.
`Other system calls are controlled by compile time options in the kernel configuration
`file, but due to the minute footprint of the jail implementation, it was decided to make it
`a standard facility in FreeBSD.
`The implementation of the system call is straightforward: a data structure is allocated
`and populated with the arguments provided. The data structure is attached to the current
`process’ struct proc, its reference count set to one and a call to the chroot(2)
`syscall implementation completes the task.
`Hooks in the code implementing process creation and destruction maintains the refer-
`ence count on the data structure and free it when the last reference is lost. Any new pro-
`cess created by a process in a jail will inherit a reference to the jail, which effectively
`puts the new process in the same jail.
`There is no way to modify the contents of the data structure describing the jail after its
`creation, and no way to attach a process to an existing jail if it was not created from the
`inside that jail.
`
`6.2. Fortification of the chroot(2) facility for filesystem name scoping.
`A number of ways to escape the confines of a chroot(2)-created subscope of the
`filesystem view hav e been identified over the years. chroot(2) was never intended to be
`security mechanism as such, but even then the ftp daemon largely depended on the secu-
`rity provided by chroot(2) to provide the ‘‘anonymous ftp’’ access method.
`
`EX1076 - Page 7
`
`

`

`Three classes of escape routes existed: recursive chroot(2) escapes, ‘‘..’’ based escapes
`and fchdir(2) based escapes. All of these exploited the fact that chroot(2) didn’t try suf-
`ficiently hard to enforce the new root directory.
`New code were added to detect and thwart these escapes, amongst other things by
`tracking the directory of the first level of chroot(2) experienced by a process and refus-
`ing backwards traversal across this directory, as well as additional code to refuse
`chroot(2) if file-descriptors were open referencing directories.
`
`6.3. Restriction of process visibility and interaction.
`A macro was already in available in the kernel to determine if one process could affect
`another process. This macro did the rather complex checking of uid and gid values. It
`was felt that the complexity of the macro were approaching the lower edge of IOCCC
`entrance criteria, and it was therefore converted to a proper function named p_tres-
`pass(p1, p2) which does all the previous checks and additionally checks the jail
`aspect of the access. The check is implemented such that access fails if the origin pro-
`cess is jailed but the target process is not in the same jail.
`Process visibility is provided through two mechanisms in FreeBSD, the procfs file
`system and a sub-tree of the sysctl tree. Both of these were modified to report only
`the processes in the same jail to a jailed process.
`
`6.4. Restriction to one IP number.
`Restricting TCP and UDP access to just one IP number was done almost entirely in
`the code which manages ‘‘protocol control blocks’’. When a jailed process binds to a
`socket, the IP number provided by the process will not be used, instead the pre-config-
`ured IP number of the jail is used.
`BSD based TCP/IP network stacks sport a special interface, the loop-back interface,
`which has the ‘‘magic’’ IP number 127.0.0.1. This is often used by processes to contact
`servers on the local machine, and consequently special handling for jails were needed.
`To handle this case it was necessary to also intercept and modify the behaviour of con-
`nection establishment, and when the 127.0.0.1 address were seen from a jailed process,
`substitute the jails configured IP number.
`Finally the APIs through which the network configuration and connection state may
`be queried were modified to report only information relevant to the configured IP num-
`ber of a jailed process.
`
`6.5. Adding jail awareness to selected device drivers.
`A couple of device drivers needed to be taught about jails, the ‘‘pty’’ driver is one of
`them. The pty driver provides ‘‘virtual terminals’’ to services like telnet, ssh, rlogin and
`X11 terminal window programs. Therefore jails need access to the pty driver, and code
`had to be added to enforce that a particular virtual terminal were not accessed from
`more than one jail at the same time.
`
`EX1076 - Page 8
`
`

`

`6.6. General restriction of super-users powers for jailed super-users.
`This item proved to be the simplest but most tedious to implement. Tedious because a
`manual review of all places where the kernel allowed the super user special powers were
`called for, simple because very few places were required to let a jailed root through. Of
`the approximately 260 checks in the FreeBSD 4.0 kernel, only about 35 will let a jailed
`root through.
`Since the default is for jailed roots to not receive privilege, new code or drivers in the
`FreeBSD kernel are automatically jail-aware: they will refuse jailed roots privilege. The
`other part of this protection comes from the fact that a jailed root cannot create new
`device nodes with the mknod(2) systemcall, so unless the machine administrator creates
`device nodes for a particular device inside the jails filesystem tree, the driver in effect
`does not exist in the jail.
`As a side-effect of this work the suser(9) API were cleaned up and extended to cater
`for not only the jail facility, but also to make room for future partitioning facilities.
`
`6.7. Implementation statistics
`The change of the suser(9) API modified approx 350 source lines distributed over
`approx. 100 source files. The vast majority of these changes were generated automati-
`cally with a script.
`The implementation of the jail facility added approx 200 lines of code in total, dis-
`tributed over approx. 50 files. and about 200 lines in two new kernel files.
`
`7. Managing Jails and the Jail File System Environment
`
`7.1. Creating a Jail Environment
`While the jail(2) call could be used in a number of ways, the expected configuration
`creates a complete FreeBSD installation for each jail. This includes copies of all rele-
`vant system binaries, data files, and its own /etc directory. Such a configuration max-
`imises the independence of various jails, and reduces the chances of interference
`between jails being possible, especially when it is desirable to provide root access
`within a jail to a less trusted user.
`On a box making use of the jail facility, we refer to two types of environment: the host
`environment, and the jail environment. The host environment is the real operating sys-
`tem environment, which is used to configure interfaces, and start up the jails. There are
`then one or more jail environments, effectively virtual FreeBSD machines. When con-
`figuring Jail for use, it is necessary to configure both the host and jail environments to
`prevent overlap.
`As jailed virtual machines are generally bound to an IP address configured using the
`normal IP alias mechanism, those jail IP addresses are also accessible to host environ-
`ment applications to use. If the accessibility of some host applications in the jail envi-
`ronment is not desirable, it is necessary to configure those applications to only listen on
`appropriate addresses.
`
`EX1076 - Page 9
`
`

`

`In most of the production environments where jail is currently in use, one IP address
`is allocated to the host environment, and then a number are allocated to jail boxes, with
`each jail box receiving a unique IP. In this situation, it is sufficient to configure the net-
`working applications on the host to listen only on the host IP. Generally, this consists of
`specifying the appropriate IP address to be used by inetd and SSH, and disabling appli-
`cations that are not capable of limiting their address scope, such as sendmail, the port
`mapper, and syslogd. Other third party applications that have been installed on the host
`must also be configured in this manner, or users connecting to the jailbox will discover
`the host environment service, unless the jailbox has specifically bound a service to that
`port. In some situations, this can actually be the desirable behaviour.
`The jail environments must also be custom-configured. This consists of building and
`installing a miniature version of the FreeBSD file system tree off of a subdirectory in the
`host environment, usually /usr/jail, or /data/jail, with a subdirectory per jail.
`Appropriate instructions for generating this tree are included in the jail(8) man page, but
`generally this process may be automated using the FreeBSD build environment.
`One notable difference from the default FreeBSD install is that only a limited set of
`device nodes should be created. MAKEDEV(8) has been modified to accept a ‘‘jail’’
`argument that creates the correct set of nodes.
`To improve storage efficiency, a fair number of the binaries in the system tree may be
`deleted, as they are not relevant in a jail environment. This includes the kernel, boot
`loader, and related files, as well as hardware and network configuration tools.
`After the creation of the jail tree, the easiest way to configure it is to start up the jail in
`single-user mode. The sysinstall admin tool may be used to help with the task, although
`it is not installed by default as part of the system tree. These tools should be run in the
`jail environment, or they will affect the host environment’s configuration.
`
`# mkdir /data/jail/192.168.11.100/stand
`# cp /stand/sysinstall /data/jail/192.168.11.100/stand
`# jail /data/jail/192.168.11.100 testhostname 192.168.11.100 \
`/bin/sh
`
`After running the jail command, the shell is now within the jail environment, and all
`further commands will be limited to the scope of the jail until the shell exits. If the net-
`work alias has not yet been configured, then the jail will be unable to access the net-
`work.
`The startup configuration of the jail environment may be configured so as to quell
`warnings from services that cannot run in the jail. Also, any per-system configuration
`required for a normal FreeBSD system is also required for each jailbox. Typically, this
`includes:
`• Create empty /etc/fstab
`• Disable portmapper
`• Run newaliases
`
`EX1076 - Page 10
`
`

`

`• Disabling interface configuration
`• Configure the resolver
`• Set root password
`• Set timezone
`• Add any local accounts
`• Install any packets
`
`7.2. Starting Jails
`Jails are typically started by executing their /etc/rc script in much the same manner a
`shell was started in the previous section. Before starting the jail, any relevant network-
`ing configuration should also be performed. Typically, this involves adding an addi-
`tional IP address to the appropriate network interface, setting network properties for the
`IP address using IP filtering, forwarding, and bandwidth shaping, and mounting a pro-
`cess file system for the jail, if the ability to debug processes from within the jail is
`desired.
`
`# ifconfig ed0 inet add 192.168.11.100 netmask 255.255.255.255
`# mount -t procfs proc /data/jail/192.168.11.100/proc
`# jail /data/jail/192.168.11.100 testhostname 192.168.11.100 \
`/bin/sh /etc/rc
`
`A few warnings are generated for sysctl’s that are not permitted to be set within the
`jail, but the end result is a set of processes in an isolated process environment, bound to
`a single IP address. Normal procedures for accessing a FreeBSD machine apply: telnet-
`ing in through the network reveals a telnet prompt, login, and shell.
`
`% ps ax
`PID TT STAT
`228 ?? SsJ
`247 ?? IsJ
`249 ?? IsJ
`252 ?? SsJ
`291 ?? IsJ
`93694 ?? SJ
`93695 p0 SsJ
`93700 p0 R+J
`
`TIME COMMAND
`0:18.73 syslogd
`0:00.05 inetd -wW
`0:28.43 cron
`0:30.46 sendmail: accepting connections on port 25
`0:38.53 /usr/local/sbin/sshd
`0:01.01 sshd: rwatson@ttyp0 (sshd)
`0:00.06 -csh (csh)
`0:00.00 ps ax
`
`It is immediately obvious that the environment is within a jailbox: there is no init pro-
`cess, no kernel daemons, and a J flag is present beside all processes indicating the pres-
`ence of a jail.
`As with any FreeBSD system, accounts may be created and deleted, mail is delivered,
`logs are generated, packages may be added, and the system may be hacked into if con-
`figured incorrectly, or running a buggy version of a piece of software. However, all of
`this happens strictly within the scope of the jail.
`
`EX1076 - Page 11
`
`

`

`7.3. Jail Management
`Jail management is an interesting prospect, as there are two perspectives from which a
`jail environment may be administered: from within the jail, and from the host environ-
`ment. From within the jail, as described above, the process is remarkably similar to any
`regular FreeBSD install, although certain actions are prohibited, such as mounting file
`systems, modifying system kernel properties, etc. The only area that really differs are
`that of shutting the system down: the processes within the jail may deliver signals
`between them, allowing all processes to be killed, but bringing the system back up
`requires intervention from outside of the jailbox.
`From outside of the jail, there are a range of capabilities, as well as limitations. The
`jail environment is, in effect, a subset of the host environment: the jail file system
`appears as part of the host file system, and may be directly modified by processes in the
`host environment. Processes within the jail appear in the process listing of the host, and
`may likewise be signalled or debugged. The host process file system makes the host-
`name of the jail environment accessible in /proc/procnum/status, allowing utilities in the
`host environment to manage processes based on jailname. However, the default config-
`uration allows privileged processes within jails to set the hostname of the jail, which
`makes the status file less useful from a management perspective if the contents of the
`jail are malicious. To prevent a jail from changing its hostname, the "jail.set_host-
`name_allowed" sysctl may be set to 0 prior to starting any jails.
`One aspect immediately observable in an environment with multiple jails is that uids
`and gids are local to each jail environment: the uid associated with a process in one jail
`may be for a different user than in another jail. This collision of identifiers is only visi-
`ble in the host environment, as normally processes from one jail are never visible in an
`environment with another scope for user/uid and group/gid mapping. Managers in the
`host environment should understand these scoping issues, or confusion and unintended
`consequences may result.
`Jailed processes are subject to the norma

This document is available on Docket Alarm but you must sign up to view it.


Or .

Accessing this document will incur an additional charge of $.

After purchase, you can access this document again without charge.

Accept $ Charge
throbber

Still Working On It

This document is taking longer than usual to download. This can happen if we need to contact the court directly to obtain the document and their servers are running slowly.

Give it another minute or two to complete, and then try the refresh button.

throbber

A few More Minutes ... Still Working

It can take up to 5 minutes for us to download a document if the court servers are running slowly.

Thank you for your continued patience.

This document could not be displayed.

We could not find this document within its docket. Please go back to the docket page and check the link. If that does not work, go back to the docket and refresh it to pull the newest information.

Your account does not support viewing this document.

You need a Paid Account to view this document. Click here to change your account type.

Your account does not support viewing this document.

Set your membership status to view this document.

With a Docket Alarm membership, you'll get a whole lot more, including:

  • Up-to-date information for this case.
  • Email alerts whenever there is an update.
  • Full text search for other cases.
  • Get email alerts whenever a new case matches your search.

Become a Member

One Moment Please

The filing “” is large (MB) and is being downloaded.

Please refresh this page in a few minutes to see if the filing has been downloaded. The filing will also be emailed to you when the download completes.

Your document is on its way!

If you do not receive the document in five minutes, contact support at support@docketalarm.com.

Sealed Document

We are unable to display this document, it may be under a court ordered seal.

If you have proper credentials to access the file, you may proceed directly to the court's system using your government issued username and password.


Access Government Site

We are redirecting you
to a mobile optimized page.





Document Unreadable or Corrupt

Refresh this Document
Go to the Docket

We are unable to display this document.

Refresh this Document
Go to the Docket