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