Easily setup a chroot jail .
Installing chroot
- Installs Debian
Dependencies
Establish and bootstrap chroot jail
Run install_chroot.sh.
The script will do the following:
- Install debootstrap and schroot.
- Create the following chroot definition in
/etc/schroot/chroot.d/$CHROOT_NAME:
[$CHROOT_NAME]
description=Debian ($DEBIAN_RELEASE)
type=directory
directory=/srv/chroot/$CHROOT_NAME
users=$CHROOT_USER
groups=sbuild
root-users=$CHROOT_USER
root-groups=root
- Append the following file(s) to
/etc/schroot/default/copyfileswhich will then be copied into the jail (note these files must exist in the host environment):
/etc/apt/sources.list
Comment-out the
/homemount point in/etc/schroot/default/fstab. I don't want/homemounted because:- I symlink my dotfiles into my home dir, and they break across filesystems.
- I want a separate, untethered environment.
Create the jail in
/srv/chroot/$CHROOT_NAME. It does this by downloading the version of Debian specified on the command line fromhttp://ftp.debian.org/debian.Note that if you're bandwidth-impaired like me, you can create the chroot by pointing
debootstrapto a mounted image.For example:
mkdir foo mount debian_image.iso foo debootstrap stretch /srv/chroot/test file:///usr/local/src/iso/debian/free/fooIf you get an error message about GPG, add the
--no-check-gpgflag to thedebootstrapcommand.
Make sure to read the schroot(1) and schroot.conf(5) man pages! I've left out a lot of detail here!
For example, I'm configuring the files in
/etc/schroot/default/because I've specifieddirectoryas the chroot type in the config in theinstall_chroot.shscript. If you provide your own chroot config with a differenttypevalue, you'll have to alter the scripts in a different dir under/etc/schroot.
That's it, you're done! You can now change (root) to your new chroot by issuing the following commmand:
schroot -u $CHROOT_USER -c $CHROOT_NAME
Note that if
procanddev/ptsaren't mounted in the chroot, you will not have aptywhen logging in.tmuxand other programs will appear not to launch, and when running thettyprogram, you'll be toldnot a tty. To fix this, runmnt/chroot_mounts.sh(and its brothermnt/chroot_umounts.sh) in the host environment.
The rest of this document describes optional chroot environment configurations and notes.
Codesharing
Configure chroot
Run
env/codeshare.sh.The script will do the following:
- Install build-essential (gcc, make, etc.), curl, git, tmux and vim.
- Add the user given on the CLI.
- Clone my minimal dotfiles into the new home dir:
Configure SSH
Add the directive to
sshd_configthat will automatically jail an SSH remote login to the new chroot. Note that you should add this to thessdh_configin the host environment, NOT the chroot jail.Match group codeshare ChrootDirectory /srv/chroot/$CHROOT_NAME X11Forwarding no AllowTcpForwarding no
Notes
Installing NodeJS
The NodeJS tarball uses the xz compression tool:
- sudo apt-get install xz-utils
- tar xvJf xxx.xz
If getting a "No such file or directory" error when executing the node binary...
The node binary is a 32-bit ELF but it's a 64 bit OS.
The following commands will provide more information:
file /path/to/node
ldd /path/to/node
https://superuser.com/questions/344533/no-such-file-or-directory-error-in-bash-but-the-file-exists
tl;dr:
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install --reinstall libc6-i386
sudo apt-get install "libstdc++6:i386"
In this example, all users that should be jailed upon remote login should belong to the codeshare group.
from https://github.com/btoll/chroot
-----
https://github.com/skissane/mkjail
No comments:
Post a Comment