aboutsummaryrefslogtreecommitdiff
path: root/doc/doc.RPKI.RP.rcynicChroot
diff options
context:
space:
mode:
Diffstat (limited to 'doc/doc.RPKI.RP.rcynicChroot')
-rw-r--r--doc/doc.RPKI.RP.rcynicChroot177
1 files changed, 0 insertions, 177 deletions
diff --git a/doc/doc.RPKI.RP.rcynicChroot b/doc/doc.RPKI.RP.rcynicChroot
deleted file mode 100644
index b9d70d3d..00000000
--- a/doc/doc.RPKI.RP.rcynicChroot
+++ /dev/null
@@ -1,177 +0,0 @@
-****** Running rcynic chrooted ******
-
-This is an attempt to describe the process of setting up rcynic in a chrooted
-environment. The installation scripts that ship with rcynic attempt to do this
-automatically when requested for the platforms we support, but the process is
-somewhat finicky, so some explanation seems in order. If you're running on one
-of the supported platforms, the following steps may be handled for you by the
-Makefiles, but you may still want to understand what all this is trying to do.
-
-rcynic itself does not include any direct support for running chrooted, but is
-designed to be (relatively) easy to run in a chroot jail.
-
-To enable chroot support during installation, you should install from source
-and use the --enable-rcynic-jail option to ./configure.
-
-rcynic-cron includes support for running chrooted. To use it, specify the --
-chroot option on rcynic-cron's command line. This will cause rcynic-cron to run
-rcynic in the chrooted environment. Note that, in order for this to work,
-rcynic-cron itself must run as root, since only root can issue the chroot()
-system call. When run as root, rcynic-cron takes care of changing the user ID
-of each process it starts to the unprivileged "rcynic" user.
-
-***** Creating the chroot jail environment *****
-
-By far the most tedious and finicky part of setting up rcynic to run in a
-chroot jail is setting the jail itself. The underlying principal is simple and
-obvious: a process running in the jail can't use files outside the jail. The
-difficulty is that the list of files that needs to be in the jail is system-
-dependent, can be rather long, and sometimes can only be discovered by trial
-and error.
-
-You'll either need staticly linked copies of rcynic and rsync, or you'll need
-to figure out which shared libraries these programs need (try using the "ldd"
-command). Here we assume staticly linked binaries, because that's simpler, but
-be warned that statically linked binaries are not even possible on some
-platforms, whether due to concious decisions on the part of operating system
-vendors or due to hidden use of dynamic loading by other libraries at runtime.
-Once again, the Makefiles attempt to do the correct thing for your environment
-if they know what it is, but they might get it wrong.
-
-You may also find that the dynamic loader looks in a different place than you
-(and the Makefiles) would expect when running within the chroot jail. For
-example, you might think that library /usr/local/lib/libfoo.so being installed
-into a jail named /var/rcynic should go into /var/rcynic/usr/local/lib/
-libfoo.so, but we've seen cases where the dynamic loader ended up expecting to
-find it in /var/rcynic/lib/libfoo.so. Getting this right may require a bit of
-trial and error.
-
-You'll need a chroot wrapper program. As mentioned above, rcynic-cron can act
-as that wrapper program; if this works for you, we recommend it, because it
-works the same way on all platforms and doesn't require additional external
-programs. Otherwise, you'll have to find a suitable wrapper program. Your
-platform may already have one (FreeBSD does -- /usr/sbin/chroot), but if you
-don't, you can download Wietse Venema's "chrootuid" program from ftp://
-ftp.porcupine.org/pub/security/chrootuid1.3.tar.gz.
-
- Warning
- The chroot program included in at least some GNU/Linux distributions is
- not adaquate to this task. You need a wrapper that knows how to drop
- privileges after performing the chroot() operation itself. If in doubt,
- use chrootuid.
-
-Unfortunately, the precise details of setting up a proper chroot jail vary
-wildly from one system to another, so the following instructions may not be a
-precise match for the preferred way of doing this on your platform. Please feel
-free to contribute scripts for other platforms.
-
- 1. Build the static binaries. You might want to test them at this stage too,
- although you can defer that until after you've got the jail built.
- 2. Create a userid under which to run rcynic. Here we'll assume that's a user
- named "rcynic", whose default group is also named "rcynic". Do not add any
- other userids to the rcynic group unless you really know what you are
- doing.
- 3. Build the jail. You'll need, at minimum, a directory in which to put the
- binaries, a subdirectory tree that's writable by the userid which will be
- running rcynic and rsync, your trust anchors, and whatever device inodes
- the various libraries need on your system. Most likely the devices that
- matter will be /dev/null, /dev/random, and /dev/urandom; if you're running
- a FreeBSD system with devfs, you do this by mounting and configuring a
- devfs instance in the jail, on other platforms you probably use the mknod
- program or something similar.
-
- Important
- Other than the directories that you want rcynic and rsync to be able to
- modify, nothing in the initial jail setup should be writable by the
- rcynic userid. In particular, rcynic and rsync should not be allowed to
- modify: their own binary images, any of the configuration files, or your
- trust anchors. It's simplest just to have root own all the files and
- directories that rcynic and rsync are not allowed to modify, and make
- sure that the permissions for all of those directories and files make
- them writable only by root.
-
-Sample jail tree, assuming that we're putting all of this under /var/rcynic:
-
- $ mkdir /var/rcynic
- $ mkdir /var/rcynic/bin
- $ mkdir /var/rcynic/data
- $ mkdir /var/rcynic/dev
- $ mkdir /var/rcynic/etc
- $ mkdir /var/rcynic/etc/trust-anchors
-
-Copy your trust anchors into /var/rcynic/etc/trust-anchors.
-
-Copy the staticly linked rcynic and rsync into /var/rcynic/bin.
-
-Copy /etc/resolv.conf and /etc/localtime (if it exists) into /var/rcynic/etc.
-
-Write an rcynic configuration file as /var/rcynic/etc/rcynic.conf. Path names
-in this file must match the jail setup, more on this below.
-
- $ chmod -R go-w /var/rcynic
- $ chown -R root:wheel /var/rcynic
- $ chown -R rcynic:rcynic /var/rcynic/data
-
-If you're using devfs, arrange for it to be mounted at /var/rcynic/dev;
-otherwise, create whatever device inodes you need in /var/rcynic/dev and make
-sure that they have sane permissions (copying whatever permissions are used in
-your system /dev directory should suffice).
-
-rcynic.conf to match this configuration:
-
- [rcynic]
-
- rsync-program = /bin/rsync
- authenticated = /data/authenticated
- unauthenticated = /data/unauthenticated
- xml-summary = /data/rcynic.xml
- trust-anchor-directory = /etc/trust-anchors
-
-Once you've got all this set up, you're ready to try running rcynic in the
-jail. Try it from the command line first, then if that works, you should be
-able to run it under cron.
-
-Note: chroot, chrootuid, and other programs of this type are usually intended
-to be run by root, and should not be setuid programs unless you really know
-what you are doing.
-
-Sample command line:
-
- $ /usr/local/bin/chrootuid /var/rcynic rcynic /bin/rcynic -s -c /etc/
- rcynic.conf
-
-Note that we use absolute pathnames everywhere. This is not an accident.
-Programs running in jails under cron should not make assumptions about the
-current working directory or environment variable settings, and programs
-running in chroot jails would need different PATH settings anyway. Best just to
-specify everything.
-
-**** Building static binaries ****
-
-On FreeBSD, building a staticly linked rsync is easy: one just sets the
-environment variable LDFLAGS='-static' before building rsync and the right
-thing will happen. Since this is really just GNU configure picking up the
-environment variable, the same trick should work on other platforms...except
-that some compilers don't support -static, and some platforms are missing some
-or all of the non-shared libraries you'd need to link the resulting binary.
-
-For simplicity, we've taken the same approach with rcynic, so
-
- $ make LDFLAGS='-static'
-
-works. This isn't necessary on platforms where we know that static linking
-works -- the default is static linking where supported.
-
-**** syslog from chrooted environment ****
-
-Depending on how the syslog() library call and the syslog daemon (syslogd,
-rsyslogd, ...) are implemented on your platform, syslog may not work properly
-with rcynic in a chroot jail. On FreeBSD, the easiest way to fix this is to add
-the following lines to /etc/rc.conf:
-
- altlog_proglist="named rcynic"
- rcynic_chrootdir="/var/rcynic"
- rcynic_enable="YES"
-
-This tells syslogd to listen on an additional PF_UNIX socket within rcynic's
-chroot jail.