• PoolloverNathan@programming.dev
      link
      fedilink
      arrow-up
      2
      ·
      edit-2
      1 month ago

      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 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).