Skip to main content

chroot command is used to change the root directory to a given directory. Once you change it to this directory, you can execute a command by using this directory as the root directory.

##
# `chroot` basic usage
##

# `chroot` command is used to change the root directory to a given
# directory. Once you change it to this directory, you can execute a
# command by using this directory as the root directory.

# For example, if you make `/home/jon` as `chroot` directory, and try to
# execute `/bin/mycommand` command, it will really use the `mycommand` from
# `/home/jon/bin` directory.

    $ chroot /home/jon /bin/mycommand

# NOTE: Make sure the `/home/jon/bin/mycommand` is statically linked. If
# not, you should find all other dependencies, and put it in the
# appropriate location under `/home/jon` for the above to work properly.

##
# `chroot` exit status
##

# The following are various chroot exist status:
#
# - 125 chroot failed
# - 126 command found, but can't execute it
# - 127 command not found

    $ chroot /home/jon /bin/tar ; echo $?
    chroot: failed to run command /bin/tar: No such file or directory
    127

    $ chroot /home/jona/bin/tar ; echo $?
    chroot: cannot change root directory to /home/jona: No such file or directory
    125

# > Note: If it works properly, it will return the exit status of the
# > command itself.

##
# Execute command a different user
##

# By default, the following command will execute `/bin/mycommand` as
# the user/group who invokved the `chroot`.

    $ chroot /home/jon /bin/mycommand

# But, if you like it to execute as a different user/group, you should
# specify userspec as shown below.

    $ chroot --userspec=jon:jon /home/jon /bin/mycommand

##
# Specify Additional Groups to Execute Command
##

# Apart from specifying the primary user and group using –userspec, you
# can also pass the secondary groups using –groups command as shown
# below.

    $ chroot --userspec=jon:jon --groups=dba,developer /home/jon /bin/mycommand