Crates.io | keg |
lib.rs | keg |
version | 1.2.0 |
source | src |
created_at | 2023-04-03 00:47:42.217669 |
updated_at | 2024-05-25 21:32:11.996017 |
description | A portable container without boilerplate. |
homepage | https://github.com/keg-project/keg |
repository | https://github.com/keg-project/keg |
max_upload_size | |
id | 828730 |
size | 102,423 |
Keg is a portable container without boilerplate.
~
and doesn't read/write any file unprompted
except the current directory.You can:
/
as the base image and exclude sensitive paths like /home
. Or import your
own rootfs for complete isolation./
appear writable in your container with changes either kept in memory, or written to
another directory, using overlayfs
.nftables
.Under the hood, Keg runs a Podman container in a separate Linux namespace. Keg isolation is secure as long as Podman is secure.
Warning
If you get an error such as
Cannot run [...]: Operation not permitted (os error 1)
, your kernel may have this bug. You need to append--share-time
to all Keg container commands.
Map /bin, /etc, /lib, /lib64, /opt, /sbin, /usr, /var
into the container and map current
directory to /root/workspace
. All paths will appear writable, but only changes to
/root/workspace
are permanent:
keg --share-net
Map /bin, /etc, /lib, /lib64, /opt, /sbin, /usr, /var
into the container. All paths will
appear writable, but changes are written to paths inside ./container
:
keg-rootfs --share-net
Map ./root
into the container as /
. Changes are written to paths inside ./my_container
:
keg-rootfs --share-net -r ./root -u ./my_container
In addition to all the above, use --net-nft-rules ./nftables_rules.txt
to import firewall rules
from ./nftables_rules.txt
. Remove --share-net
to disable network access in the container.
You will appear as root
(uid 0) in the container. As per usual, this does not give you global
root. Some applications require a non-root user to function correctly. If that's the case, run
keg-user
within the container to create a new user namespace as a non-root user. You can optionally specify
--uid <uid>
and --gid <gid>
.
Keg works as long as all dependencies listed below are installed:
bubblewrap >= 0.4.0, fuse-overlayfs >= 1.5, libseccomp >= 2.4, linux >= 5.4.0, nftables >= 0.9.3, podman >= 3.4.2, slirp4netns >= 1.1.8
Run the following commands and reboot:
sudo apt-get update -y
sudo apt-get -qq -y install bubblewrap fuse-overlayfs libseccomp-dev nftables podman slirp4netns
# If not installed already:
sudo apt-get -qq -y install cargo
export PATH="$HOME/.cargo/bin:$PATH"
echo 'PATH="$HOME/.cargo/bin:$PATH"' >> ~/.profile
cargo install keg
First, follow these instructions to install podman
. Then execute the following and reboot:
sudo apt-get -qq -y install bubblewrap fuse-overlayfs libseccomp-dev nftables slirp4netns
# If not installed already:
sudo apt-get -qq -y install cargo
export PATH="$HOME/.cargo/bin:$PATH"
echo 'PATH="$HOME/.cargo/bin:$PATH"' >> ~/.profile
cargo install keg