Man Linux: Main Page and Category List

NAME

       makejail — Helps creating and maintaining a chroot jail

SYNOPSIS

       makejail [configuration_file]

Overview

       The  objective  of  makejail  is  to help an administrator creating and
       updating a chroot jail with short configuration files.

       Makejails attempts to  guess  and  install  into  the  jail  all  files
       required by the daemon.

       You have to understand how it works to configure it efficiently.

Detailed mechanism

       The list of these files is built from several sources:

       - the main method is to trace what files the daemon attempts to access,
       add them into the jail and restart  again  until  no  further  file  is
       found.

       - a list of files manually given in the configuration file.

       -  the  files which belongs to a package and eventually the packages it
       requires.

       When a file is added into the jail:

       - the shared libraries it needs (given by ldd) are added too.

       - upper directories are created if needed.

       - if the file is a symbolic link, the target is added too.

       - all the checks to determine what files a file needs are recursive.

       - all files  are  copied  maintaining  the  originals’  ownerships  and
       permissions.

       Some files are handled with a special method:

       - when the file is below /proc, the procfs filesystem is mounted inside
       the jail.

       - when the file is a socket, it’s not copied.

       - when the file is the shared library cache, it’s not copied,  ldconfig
       is run at the end.

       The steps of makejail are:

       - eventually remove the files in the jail first.

       -  if  you  specified some packages, add all the files which belongs to
       them.

       - if you specified some paths to include, add the files matching  these
       patterns.

       -  start  the daemon inside the jail, and trace it with strace, add the
       files it attempts to open which exist outside the  jail,  kill  it  and
       start again until no more file is found.

       -  start  the  daemon  inside the jail, and trace it while running some
       test processes outside the jail, see with strace what files the  daemon
       attempts to open.

Configuration files

       The  file  must be written in a correct python syntax. The good news is
       that the syntax is simple, and you can  eventually  write  some  python
       code to define the syntax.

       Some  default directives may be defined in /etc/makejail/makejail.conf,
       the configuration file given on the command line has predecence.

       All paths you use in the configuration file must be absolute.

Configuration directives - Basics

       Defaults  won’t  work,  you  must  define  specific  values  for  these
       directives.

       chroot    The  path  to  the  chroot. The directory must exist and have
                 correct permissions and ownerships.

                 Format: "/path/to/jail"

                 Default: None

       testCommandsInsideJail
                 The commands used to start the daemon, a good starting  point
                 may be the command used in the startup script in /etc/init.d

                 Format: ["command1", "command2"]

                 Default: []

       processNames
                 The  name of the runnning processes after the daemon has been
                 started.

                 Format: ["process1", "process2"]

                 Default: []

Configuration directives - Tests

       After the daemon itself has been chrooted successfully,  some  commands
       can be executed from outside the jail to test the daemon.

       testCommandsOutsideJail
                 The test commands which should be executed.

                 Format: ["command1", "command2"]

                 Default: []

       promptForInteractiveTests
                 Whether  makejail  should  pause so you can stress the daemon
                 yourself.

                 Use only if makejail is run interactively, and don’t redirect
                 its outputs.

                 Format: 1 (prompt) or 0 (don’t prompt)

                 Default: 0

       promptForSomeMoreTests=0
                 Whether  makejail  should  loop while running tests until you
                 tell it it’s over.

                 Use only if makejail is run interactively, and don’t redirect
                 its outputs.

                 Format: 1 (prompt) or 0 (don’t prompt)

                 Default: 0

       maxExecutions
                 Maximum   number  of  times  a  command  is  executed  before
                 aborting.

                 Format: integer

                 Default: 100

Configuration directives - Copying files

       doNotCopy Do not copy the files matching these  patterns  according  to
                 the rules used by the Unix shell.

                 No  tilde  expansion  is done, but *, ?, and character ranges
                 expressed with [] will be correctly matched.

                 Format: ["path1", "path2"]

                 Default:        ["/usr/share/doc",         "/usr/share/info",
                 "/usr/share/man", "/etc/fstab", "/etc/mtab", "/proc"]

       forceCopy When  initializing  the  jail,  copy the files matching these
                 patterns according to the rules used by the Unix shell.

                 No tilde expansion is done, but *, ?,  and  character  ranges
                 expressed with [] will be correctly matched.

                 Format: ["path1", "path2"]

                 Default: []

       cleanJailFirst
                 Whether makejail should remove files in jail first.

                 Format: 0 to do nothing or 1 to remove files from the jail.

                 Default: 0

       preserve  Useful  only if cleanJailFirst=1, makejail won’t remove files
                 or directories if their path begins with one of  the  strings
                 in this list.

                 When  updating  a  jail,  you  should  for  example  put  the
                 locations of log files here.

                 Format: ["path1", "path2"]

                 Default: []

       maxRemove Useful only if  cleanJailFirst=1,  makejail  aborts  if  it’s
                 about to remove more than this number of files from the jail.

                 This may prevent makejail from erasing unwanted files if  you
                 wrote chroot="/usr" or if you have mounted a partition in the
                 jail.

                 Format: integer

                 Default: 500

       users     Makejail will  filter  the  files  listed  in  the  directive
                 userFiles  and  copy  only  lines matching these users, which
                 means lines starting with "user:"

                 You can use ["*"] to disable filtering  and  copy  the  whole
                 file.

                 Format: ["user1", "user2"]

                 Default: []

       groups    Makejail  will  filter  the  files  listed  in  the directive
                 groupFiles and copy only lines matching these  groups,  which
                 means lines starting with "group:"

                 You  can  use  ["*"]  to disable filtering and copy the whole
                 file.

                 Format: ["group1", "group2"]

                 Default: []

Configuration directives - Timing

       These times are in seconds, the values are the duration  of  sleeps  at
       various stages of makejail.

       sleepAfterStartCommand
                 Duration of sleep after starting the daemon, after this delay
                 makejail considers it’s in a correctly running state.

                 Format: floating number

                 Default: 2

       sleepAfterTest
                 Duration of sleep after a test command has  been  run,  after
                 this  delay  makejail  considers  the daemon has finished its
                 tasks related to this command.

                 Format: floating number

                 Default: 2

       sleepAfterKillall
                 Duration of sleep after killing the daemon processes.

                 Format: floating number

                 Default: 1

       sleepAfterStraceAttachPid
                 Duration of sleep after attaching strace to a running process
                 id.

                 Format: floating number

                 Default: 0.2

Configuration directives - Debian specific

       I  initially  thought  with  starting with the package description, but
       this method usually installs a bunch of files you won’t need.

       packages  The name of the  packages.  It  will  copy  the  files  which
                 belongs    to    the    package   according   to   the   file
                 /var/lib/dpkg/info/$package.list.

                 Format: ["package1", "package2"]

                 Default: []

       useDepends
                 If you want to also install other packages  required  by  the
                 the initial list you specified.

                 It  looks  at  the  line "Depends:" in the output of ‘dpkg -p
                 $package‘.

                 Format: 1 (use depends) or 0 (don’t use depends)

                 Default: 0

       blockDepends
                 Useful only if useDepends=1, it prevents the installation  of
                 these packages even if dpkg says they are required.

                 Format: ["package1", "package2"]

                 Default: []

       debianDpkgInfoDir
                 Path  to  the dpkg $package.list files, "%s" will be replaced
                 by the name of the package.

                 Format: "/path/to/info/files/%s.list"

                 Default: "/var/lib/dpkg/info/%s.list"

Configuration directives - Paths so specific files and commands

       pathToLdConfig
                 Path to the executable ldconfig, used to generate the  shared
                 libraries   cache.  ldconfig  is  executed  in  the  jail  to
                 regenerate this cache.

                 Format: "/path/to/ldconfig"

                 Default:  "/sbin/ldconfig"  (Debian),   "/sbin/ldconfig.real"
                 (Ubuntu)

       pathToLdSoConf
                 The  path  to the configuration files used by ldconfig, which
                 says which directories should be scanned searching for shared
                 libraries.

                 Set this to None if your system doesn’t use such a file.

                 Format: "/path/to/ld.so.conf"

                 Default: "/etc/ld.so.conf"

       pathToLdSoCache
                 The path to the shared libraries cache generated by ldconfig.

                 Format: "/path/to/ld.so.cache"

                 Default: "/etc/ld.so.cache"

       procPath  The path to the procfs filesystem.

                 Format: "/path/to/proc"

                 Default: "/proc"

       userFiles List of the files whose contents should be filtered, to  keep
                 only the users listed in the directive "users".

                 Format: ["file1", "file2]

                 Default: ["/etc/passwd", "/etc/shadow"]

       groupFiles
                 List  of the files whose contents should be filtered, to keep
                 only the groups listed in the directive "groups".

                 Format: ["file1", "file2]

                 Default:["/etc/group", "/etc/gshadow"]

       tempDir   The temporary directory where makejail  can  write  temporary
                 files.

                 There   may   be   a   lot   of   files   generated  here  if
                 keepStraceOutputs=1.

                 Format: "/temp/directory"

                 Default: "/tmp/makejail_logs"

       psCommand The command line used to list running processes.

                 The output must include the pid and the name of the  process.

                 Format: "ps [options]"

                 Default: "ps -e"

       psColumns In  which  columns of the output of psCommand are the ids and
                 the name of the processes.

                 Spaces separate the columns, the first column is numbered  1.

                 Format: (columnPid,columnProcessName)

                 Default: [1,4]

Configuration directives - Commands to run to trace processes

       Here  you  can  configure  the  commands  which  must  be  run to trace
       processes. These are called strace though you can use another  program,
       like ktrace on OpenBSD.

       The  defaults  should  be suitable for systems using strace. "-f" means
       strace should trace process children too. Though it’s  interested  only
       in  file  accesses,  it  doesn’t  use "-e trace=file" because with this
       option it doesn’t catch calls for "bind" and "connect" to sockets.

       straceCommand
                 String describing the strace command when executing a command
                 line.  "%command" will be replaced by the command to execute,
                 and "%file" by the path to the temporary trace file.

                 Format: "strace_command [options] %command > %file"

                 Default: "strace -e trace=file,connect -e signal=none -f  -ff
                 -o %file %command >/dev/null 2>&1"

       straceCommandPid
                 String describing the strace command when attaching itself to
                 a running process. "%pid" will be replaced by the id  of  the
                 process  to  trace,  and "%file" by the path to the temporary
                 trace file.

                 Format: "strace -e trace=file,connect -e signal=none  -f  -ff
                 -o %file -p %pid >/dev/null 2>&1"

                 Default: "strace -f -p %pid >/dev/null 2>>%file"

        straceCommandStop
                 Command to execute to stop the tracing.

                 Format: "strace_stop_command"

                 Default: "killall -9 strace"

       straceCommandView
                 Set  this  to  None  if  the  trace  output files can be read
                 directly, or the command line to  execute  which  prints  the
                 trace on stdout. "%file" will be replaced by the name of this
                 file.

                 Format: "strace_command_viewer [options] %file"

                 Default: None

       keepStraceOutputs
                 Whether makejail should remove the outputs of strace from the
                 directory tempDir.

                 Format: 0 (to remove the files) or 1 (to keep them)

                 Default: 0

Configuration directives - Patterns in the trace outputs

       These are three patterns which should match failed attempts to access a
       file in the traces.

       You must define a group (between parenthesis) which will be matched  by
       the path of the file.

       The  syntax  of  the  regular  expressions  in python is detailed here:
       http://py-howto.sourceforge.net/regex/regex.html

       If the match on a line means it is a failed attempt only  if  the  next
       line  matches  another  expression  (typically  a return code, no group
       needed), you can use an array of two strings instead of one string, the
       first  string  is  the  main  expression,  and  the  second  one is the
       expression which must match the next line. See  global.OpenBSD  in  the
       examples directory.

       stracePatterns
                 Regular expressions to detect a failed attempt at accessing a
                 file.

                 If the file exists outside the jail  makejail  will  copy  it
                 into the jail.

                 Format:  ["regexp1",  "regexp2", ["regexp3", "regexp3 for the
                 next line"]]

                 Default: [’.*("([ "]*)",.*) .* ENOENT .*’]

       straceCreatePatterns
                 Regular expressions to detect a failed attempt at creating  a
                 file.

                 If  the  directory  where  the  file should be created exists
                 outside the jail, it will create it inside the jail.

                 Format: ["regexp1", "regexp2", ["regexp3", "regexp3  for  the
                 next line"]]

                 Default:  [’.*("([  "]*)",.*O_CREAT.*) .* ENOENT .*’,’bind(.*
                 path="([ "]*)".* ENOENT .*’]

       straceSocketPatterns
                 Regular expressions to detect a failed attempt at accessing a
                 socket.

                 makejail  can’t  create  the  socket,  it  will  just print a
                 warning.

                 Format: ["regexp1", "regexp2", ["regexp3", "regexp3  for  the
                 next line"]]

                 Default: [’connect(.* path="([ "]*)".* ENOENT .*’]

AUTHOR

       This manual page was written by Alain Tesio, alain@onesite.org

       This software comes with no warranty.

REPORTING BUGS

       Makejail  is heavily patched for Debian systems.  If you are using this
       program as part of the Debian distribution you should  report  bugs  to
       the  Debian  Bug Tracking System using submit@bugs.debian.org. For this
       you  can  use   the   reportbug   or   bug   program.    Please,   read
       /usr/share/doc/debian/bug-reporting.txt (or www.debian.org/Bugs) before
       doing so.

       If  you  want  to  report  bugs  to   the   upstream   maintainer   use
       makejail@floc.net