Made a Nix library for this. For a simple setup you can just build this (untested) and run the result:
import ./encase.nix {
name = "firefox";
rw.home.nathan = /home/nathan/home-for/firefox;
# other dependencies it might need...tmp = /tmp; # fresh tmpfs for this sandboxnetwork = true;
command = pkgs.firefox;
}
It doesn’t have user isolation yet, so if it escapes the browser and the chroot (which doesn’t have a /proc unless you set proc= /proc;, and runs in a PID namespace either way) your files are still at risk. However, this is still pretty secure, and you can run the script itself as a different user (it creates a new UID namespace so chrooting can be done without root).
Linux security noob here but can’t you just run the browser in a chroot with everything isolated?
Yeah, that should work too… but you don’t get to see any of your local files…
Made a Nix library for this. For a simple setup you can just build this (untested) and run the result:
import ./encase.nix { name = "firefox"; rw.home.nathan = /home/nathan/home-for/firefox; # other dependencies it might need... tmp = /tmp; # fresh tmpfs for this sandbox network = true; command = pkgs.firefox; }
It doesn’t have user isolation yet, so if it escapes the browser and the chroot (which doesn’t have a
/proc
unless you setproc = /proc;
, and runs in a PID namespace either way) your files are still at risk. However, this is still pretty secure, and you can run the script itself as a different user (it creates a new UID namespace so chrooting can be done without root).