Jump to content
 







Main menu
   


Navigation  



Main page
Contents
Current events
Random article
About Wikipedia
Contact us
Donate
 




Contribute  



Help
Learn to edit
Community portal
Recent changes
Upload file
 








Search  

































Create account

Log in
 









Create account
 Log in
 




Pages for logged out editors learn more  



Contributions
Talk
 



















Contents

   



(Top)
 


1 History  





2 Uses  





3 Limitations  





4 Graphical applications on chroot  





5 Notable applications  





6 Linux host kernel virtual file systems and configuration files  





7 See also  





8 References  





9 External links  














chroot






Català
Čeština
Deutsch
Español
فارسی
Français

Italiano
עברית
Magyar

Polski
Português
Română
Русский
Svenska
Türkçe
Українська

 

Edit links
 









Article
Talk
 

















Read
Edit
View history
 








Tools
   


Actions  



Read
Edit
View history
 




General  



What links here
Related changes
Upload file
Special pages
Permanent link
Page information
Cite this page
Get shortened URL
Download QR code
Wikidata item
 




Print/export  



Download as PDF
Printable version
 
















Appearance
   

 






From Wikipedia, the free encyclopedia
 


chroot

Example usage of chrootinRaspberry Pi OS running an interactive shell within a special root directory

Original author(s)

Bill Joy, AT&T Bell Laboratories

Developer(s)

Various open-source and commercial developers

Initial release

1979; 45 years ago (1979)

Operating system

Unix, Unix-like, Plan 9, Inferno

Platform

Cross-platform

Type

Command

chroot is an operation on Unix and Unix-like operating systems that changes the apparent root directory for the current running process and its children. A program that is run in such a modified environment cannot name (and therefore normally cannot access) files outside the designated directory tree. The term "chroot" may refer to the chroot(2) system call or the chroot(8) wrapper program. The modified environment is called a chroot jail.

History[edit]

The chroot system call was introduced during development of Version 7 Unix in 1979. One source suggests that Bill Joy added it on 18 March 1982 – 17 months before 4.2BSD was released – in order to test its installation and build system.[1] All versions of BSD that had a kernel have chroot(2).[2][3] An early use of the term "jail" as applied to chroot comes from Bill Cheswick creating a honeypot to monitor a hacker in 1991.[4]

The first article about a jailbreak has been discussed on the security column of SunWorld Online which is written by Carole Fennelly; the August 1999 and January 1999 editions cover most of the chroot() topics.[5]

To make it useful for virtualization, FreeBSD expanded the concept and in its 4.0 release in 2000 introduced the jail command.[6]

By 2002, an article written by Nicolas Boiteux described how to create a jail on Linux.[7]

By 2003, first internet microservices providers with Linux jails provide SAAS/PAAS (shell containers, proxy, ircd, bots, ...) services billed for consumption into the jail by usage.[8]

By 2005, Sun released Solaris Containers (also known as Solaris Zones), described as "chroot on steroids."[9]

By 2008, LXC (upon which Docker was later built) adopted the "container" terminology[10] and gained popularity in 2013 due to inclusion into Linux kernel 3.8 of user namespaces.[11]

Uses[edit]

A chroot environment can be used to create and host a separate virtualized copy of the software system. This can be useful for:

Testing and development
A test environment can be set up in the chroot for software that would otherwise be too risky to deploy on a production system.
Dependency control
Software can be developed, built and tested in a chroot populated only with its expected dependencies. This can prevent some kinds of linkage skew that can result from developers building projects with different sets of program libraries installed.
Compatibility
Legacy software or software using a different ABI must sometimes be run in a chroot because their supporting libraries or data files may otherwise clash in name or linkage with those of the host system.
Recovery
Should a system be rendered unbootable, a chroot can be used to move back into the damaged environment after bootstrapping from an alternate root file system (such as from installation media, or a Live CD).
Privilege separation
Programs are allowed to carry open file descriptors (for files, pipelines and network connections) into the chroot, which can simplify jail design by making it unnecessary to leave working files inside the chroot directory. This also simplifies the common arrangement of running the potentially vulnerable parts of a privileged program in a sandbox, in order to pre-emptively contain a security breach. Note that chroot is not necessarily enough to contain a process with root privileges.

Limitations[edit]

The chroot mechanism is not intended to defend against intentional tampering by privileged (root) users. A notable exception is NetBSD, on which chroot is considered a security mechanism and no escapes are known. On most systems, chroot contexts do not stack properly and chrooted programs with sufficient privileges may perform a second chroot to break out. To mitigate the risk of these security weakness, chrooted programs should relinquish root privileges as soon as practical after chrooting, or other mechanisms – such as FreeBSD jails – should be used instead. Note that some systems, such as FreeBSD, take precautions to prevent a second chroot attack.[12]

On systems that support device nodes on ordinary filesystems, a chrooted root user can still create device nodes and mount the file systems on them; thus, the chroot mechanism is not intended by itself to be used to block low-level access to system devices by privileged users. It is not intended to restrict the use of resources like I/O, bandwidth, disk space or CPU time. Most Unixes are not completely file system-oriented and leave potentially disruptive functionality like networking and process control available through the system call interface to a chrooted program.

At startup, programs expect to find scratch space, configuration files, device nodes and shared libraries at certain preset locations. For a chrooted program to successfully start, the chroot directory must be populated with a minimum set of these files. This can make chroot difficult to use as a general sandboxing mechanism. Tools such as Jailkit can help to ease and automate this process.

Only the root user can perform a chroot. This is intended to prevent users from putting a setuid program inside a specially crafted chroot jail (for example, with a fake /etc/passwd and /etc/shadow file) that would fool it into a privilege escalation.

Some Unixes offer extensions of the chroot mechanism to address at least some of these limitations (see Implementations of operating system-level virtualization technology).

Graphical applications on chroot[edit]

It is possible to run graphical applications on a chrooted environment, using methods such as:[13][14]

Notable applications[edit]

The Postfix mail transfer agent operates as a pipeline of individually chrooted helper programs.

Like 4.2BSD before it, the Debian and Ubuntu internal package-building farms use chroots extensively to catch unintentional build dependencies between packages. SUSE uses a similar method with its build program. Fedora, Red Hat, and various other RPM-based distributions build all RPMs using a chroot tool such as mock.

Many FTP servers for POSIX systems use the chroot mechanism to sandbox untrusted FTP clients. This may be done by forking a process to handle an incoming connection, then chrooting the child (to avoid having to populate the chroot with libraries required for program startup).

If privilege separation is enabled, the OpenSSH daemon will chroot an unprivileged helper process into an empty directory to handle pre-authentication network traffic for each client. The daemon can also sandbox SFTP and shell sessions in a chroot (from version 4.9p1 onwards).[16]

ChromeOS can use a chroot to run a Linux instance using Crouton,[17] providing an otherwise thin OS with access to hardware resources. The security implications related in this article apply here.

Linux host kernel virtual file systems and configuration files[edit]

To have a functional chroot environment in Linux, the kernel virtual file systems and configuration files also have to be mounted/copied from host to chroot.

# Mount Kernel Virtual File Systems
TARGETDIR="/mnt/chroot"
mount -t proc proc $TARGETDIR/proc
mount -t sysfs sysfs $TARGETDIR/sys
mount -t devtmpfs devtmpfs $TARGETDIR/dev
mount -t tmpfs tmpfs $TARGETDIR/dev/shm
mount -t devpts devpts $TARGETDIR/dev/pts

# Copy /etc/hosts
/bin/cp -f /etc/hosts $TARGETDIR/etc/

# Copy /etc/resolv.conf 
/bin/cp -f /etc/resolv.conf $TARGETDIR/etc/resolv.conf

# Link /etc/mtab
chroot $TARGETDIR rm /etc/mtab 2> /dev/null 
chroot $TARGETDIR ln -s /proc/mounts /etc/mtab

See also[edit]

References[edit]

  1. ^ "jail, section 9". docs.freebsd.org. Archived from the original on 2017-01-05. Retrieved 2016-03-14.
  • ^ Losh, Warner (February 2, 2000). "Warner's Random Hacking Blog: Whither chroot?". Archived from the original on June 28, 2020. Retrieved June 28, 2020.
  • ^ "Data Infrastructures for the rest of us - III - software". Archived from the original on 2020-06-30. Retrieved 2020-06-28.
  • ^ Cheswick, Bill (1991). "An Evening with Berferd: In Which a Cracker is Lured, Endured, and Studied" (PDF). USENIX Summer Conference Proceedings, Volume 1. USENIX. San Francisco, California: The Association. p. 163. Archived (PDF) from the original on 2018-11-05. Retrieved 2018-06-09.
  • ^ Carole, Fennelly. "Summertime potluck". SunWorld Online. Carole Fennelly. Archived from the original on September 28, 2021.
  • ^ Riondato, Matteo. "FreeBSD Handbook "Jails" Chapter". freebsd.org. The FreeBSD Project. Archived from the original on 2014-08-15. Retrieved 2018-10-30.
  • ^ Nicolas, Boiteux. "chroot shell". lycos.fr. Nicolas Boiteux. Archived from the original on 2002-10-14. Retrieved 24 March 2018.
  • ^ "Girafon". girafon.org. girafon. Archived from the original on 2004-06-12. Retrieved 24 March 2018.
  • ^ Schmidt, Klaus (2006-09-02). High Availability and Disaster Recovery: Concepts, Design, Implementation. Springer Science & Business Media. p. 186. ISBN 9783540345824. Archived from the original on 2023-02-20. Retrieved 2014-08-21.
  • ^ "SourceForge LXC Download Files". sourceforge.net. Archived from the original on 2014-08-19. Retrieved 2014-08-21.
  • ^ Rosen, Rami (2014-03-26). "Linux Containers and the Future Cloud" (PDF). Archived (PDF) from the original on 2016-04-18. Retrieved 2014-08-21.
  • ^ "chroot(2)". www.freebsd.org. Archived from the original on 2020-09-18. Retrieved 2020-12-02.
  • ^ "Development/Howto/Chroot". Mandriva Wiki. 25 July 2011. Archived from the original on 2014-03-26.
  • ^ "HOWTO startx in a chroot". Gentoo Wiki. Archived from the original on 2011-08-31. Retrieved 2011-10-13.
  • ^ David, Redfield (October 10, 2023). "Atoms is a Linux Chroot Management Tool with a User-Friendly GUI".
  • ^ "sshd_config(5) manual page". 2017-10-26. Archived from the original on 2018-02-05. Retrieved 2018-02-04.
  • ^ "Chromium OS Universal Chroot Environment (on github)". GitHub. Archived from the original on 2016-11-25. Retrieved 2016-12-17.
  • External links[edit]

    File system

  • chattr
  • chmod
  • chown
  • chgrp
  • cksum
  • cmp
  • cp
  • dd
  • du
  • df
  • file
  • fuser
  • ln
  • ls
  • mkdir
  • mv
  • pax
  • pwd
  • rm
  • rmdir
  • split
  • tee
  • touch
  • type
  • umask
  • Processes

  • bg
  • crontab
  • fg
  • kill
  • nice
  • ps
  • time
  • User environment

  • exit
  • logname
  • mesg
  • talk
  • tput
  • uname
  • who
  • write
  • Text processing

  • basename
  • comm
  • csplit
  • cut
  • diff
  • dirname
  • ed
  • ex
  • fold
  • head
  • iconv
  • join
  • m4
  • more
  • nl
  • paste
  • patch
  • printf
  • read
  • sed
  • sort
  • strings
  • tail
  • tr
  • troff
  • uniq
  • vi
  • wc
  • xargs
  • Shell builtins

  • cd
  • echo
  • test
  • unset
  • wait
  • Searching

  • grep
  • Documentation

    Software development

  • ctags
  • lex
  • make
  • nm
  • strip
  • yacc
  • Miscellaneous

  • cal
  • expr
  • lp
  • od
  • sleep
  • true and false
  • Unix SUS2008 utilities
  • List
  • File system

  • chmod
  • chown
  • chgrp
  • cksum
  • cp
  • dd
  • df
  • dir
  • dircolors
  • install
  • ln
  • ls
  • mkdir
  • mkfifo
  • mknod
  • mktemp
  • mv
  • realpath
  • rm
  • rmdir
  • shred
  • sync
  • touch
  • truncate
  • vdir
  • Text utilities

  • base32
  • base64
  • cat
  • cksum
  • comm
  • csplit
  • cut
  • expand
  • fmt
  • fold
  • head
  • join
  • md5sum
  • nl
  • numfmt
  • od
  • paste
  • ptx
  • pr
  • sha1sum
  • shuf
  • sort
  • split
  • sum
  • tac
  • tail
  • tr
  • tsort
  • unexpand
  • uniq
  • wc
  • Shell utilities

  • basename
  • chroot
  • date
  • dirname
  • du
  • echo
  • env
  • expr
  • factor
  • false
  • groups
  • hostid
  • id
  • link
  • logname
  • nice
  • nohup
  • nproc
  • pathchk
  • pinky
  • printenv
  • printf
  • pwd
  • readlink
  • runcon
  • seq
  • sleep
  • stat
  • stdbuf
  • stty
  • tee
  • test
  • timeout
  • true
  • tty
  • uname
  • unlink
  • uptime
  • users
  • who
  • whoami
  • yes

  • Retrieved from "https://en.wikipedia.org/w/index.php?title=Chroot&oldid=1192210989"

    Categories: 
    Computer security procedures
    Free virtualization software
    Unix process- and task-management-related software
    Virtualization software
    Linux kernel features
    System calls
    Hidden categories: 
    Articles with short description
    Short description matches Wikidata
     



    This page was last edited on 28 December 2023, at 06:14 (UTC).

    Text is available under the Creative Commons Attribution-ShareAlike License 4.0; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy. Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc., a non-profit organization.



    Privacy policy

    About Wikipedia

    Disclaimers

    Contact Wikipedia

    Code of Conduct

    Developers

    Statistics

    Cookie statement

    Mobile view



    Wikimedia Foundation
    Powered by MediaWiki