python312Packages.millheater: 0.11.8 -> 0.12.0
[NixPkgs.git] / nixos / tests / firejail.nix
blob6c42c37b2813a98ed09e05476ecaa25cefa95ae3
1 import ./make-test-python.nix ({ pkgs, ...} : {
2   name = "firejail";
3   meta = with pkgs.lib.maintainers; {
4     maintainers = [ sgo ];
5   };
7   nodes.machine = { ... }: {
8     imports = [ ./common/user-account.nix ];
10     programs.firejail = {
11       enable = true;
12       wrappedBinaries = {
13         bash-jailed  = "${pkgs.bash}/bin/bash";
14         bash-jailed2  = {
15           executable = "${pkgs.bash}/bin/bash";
16           extraArgs = [ "--private=~/firejail-home" ];
17         };
18       };
19     };
21     systemd.services.setupFirejailTest = {
22       wantedBy = [ "multi-user.target" ];
23       before = [ "multi-user.target" ];
25       environment = {
26         HOME = "/home/alice";
27       };
29       unitConfig = {
30         type = "oneshot";
31         RemainAfterExit = true;
32         user = "alice";
33       };
35       script = ''
36         cd $HOME
38         mkdir .password-store && echo s3cret > .password-store/secret
39         mkdir my-secrets && echo s3cret > my-secrets/secret
41         echo publ1c > public
43         mkdir -p .config/firejail
44         echo 'blacklist ''${HOME}/my-secrets' > .config/firejail/globals.local
45       '';
46     };
47   };
49   testScript = ''
50     start_all()
51     machine.wait_for_unit("multi-user.target")
53     # Test path acl with wrapper
54     machine.succeed("sudo -u alice bash-jailed -c 'cat ~/public' | grep -q publ1c")
55     machine.fail(
56         "sudo -u alice bash-jailed -c 'cat ~/.password-store/secret' | grep -q s3cret"
57     )
58     machine.fail("sudo -u alice bash-jailed -c 'cat ~/my-secrets/secret' | grep -q s3cret")
60     # Test extraArgs
61     machine.succeed("sudo -u alice mkdir /home/alice/firejail-home")
62     machine.succeed("sudo -u alice bash-jailed2 -c 'echo test > /home/alice/foo'")
63     machine.fail("sudo -u alice cat /home/alice/foo")
64     machine.succeed("sudo -u alice cat /home/alice/firejail-home/foo | grep test")
66     # Test path acl with firejail executable
67     machine.succeed("sudo -u alice firejail -- bash -c 'cat ~/public' | grep -q publ1c")
68     machine.fail(
69         "sudo -u alice firejail -- bash -c 'cat ~/.password-store/secret' | grep -q s3cret"
70     )
71     machine.fail(
72         "sudo -u alice firejail -- bash -c 'cat ~/my-secrets/secret' | grep -q s3cret"
73     )
75     # Disabling profiles
76     machine.succeed(
77         "sudo -u alice bash -c 'firejail --noprofile -- cat ~/.password-store/secret' | grep -q s3cret"
78     )
80     # CVE-2020-17367
81     machine.fail(
82         "sudo -u alice firejail --private-tmp id --output=/tmp/vuln1 && cat /tmp/vuln1"
83     )
85     # CVE-2020-17368
86     machine.fail(
87         "sudo -u alice firejail --private-tmp --output=/tmp/foo 'bash -c $(id>/tmp/vuln2;echo id)' && cat /tmp/vuln2"
88     )
89   '';