Merge pull request #14372 from joachifm/hidepid
nixos: add option to restrict process information to process owners
This commit is contained in:
commit
1377335689
|
@ -47,6 +47,7 @@
|
||||||
#floppy = 18; # unused
|
#floppy = 18; # unused
|
||||||
#uucp = 19; # unused
|
#uucp = 19; # unused
|
||||||
#lp = 20; # unused
|
#lp = 20; # unused
|
||||||
|
#proc = 21; # unused
|
||||||
pulseaudio = 22; # must match `pulseaudio' GID
|
pulseaudio = 22; # must match `pulseaudio' GID
|
||||||
gpsd = 23;
|
gpsd = 23;
|
||||||
#cdrom = 24; # unused
|
#cdrom = 24; # unused
|
||||||
|
@ -288,6 +289,7 @@
|
||||||
floppy = 18;
|
floppy = 18;
|
||||||
uucp = 19;
|
uucp = 19;
|
||||||
lp = 20;
|
lp = 20;
|
||||||
|
proc = 21;
|
||||||
pulseaudio = 22; # must match `pulseaudio' UID
|
pulseaudio = 22; # must match `pulseaudio' UID
|
||||||
gpsd = 23;
|
gpsd = 23;
|
||||||
cdrom = 24;
|
cdrom = 24;
|
||||||
|
|
|
@ -90,6 +90,7 @@
|
||||||
./security/ca.nix
|
./security/ca.nix
|
||||||
./security/duosec.nix
|
./security/duosec.nix
|
||||||
./security/grsecurity.nix
|
./security/grsecurity.nix
|
||||||
|
./security/hidepid.nix
|
||||||
./security/oath.nix
|
./security/oath.nix
|
||||||
./security/pam.nix
|
./security/pam.nix
|
||||||
./security/pam_usb.nix
|
./security/pam_usb.nix
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
{
|
||||||
|
options = {
|
||||||
|
security.hideProcessInformation = mkEnableOption "" // { description = ''
|
||||||
|
Restrict access to process information to the owning user. Enabling
|
||||||
|
this option implies, among other things, that command-line arguments
|
||||||
|
remain private. This option is recommended for most systems, unless
|
||||||
|
there's a legitimate reason for allowing unprivileged users to inspect
|
||||||
|
the process information of other users.
|
||||||
|
|
||||||
|
Members of the group "proc" are exempt from process information hiding.
|
||||||
|
To allow a service to run without process information hiding, add "proc"
|
||||||
|
to its supplementary groups via
|
||||||
|
<option>systemd.services.<name?>.serviceConfig.SupplementaryGroups</option>.
|
||||||
|
''; };
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf config.security.hideProcessInformation {
|
||||||
|
users.groups.proc.gid = config.ids.gids.proc;
|
||||||
|
|
||||||
|
systemd.services.hidepid = {
|
||||||
|
wantedBy = [ "local-fs.target" ];
|
||||||
|
after = [ "systemd-remount-fs.service" ];
|
||||||
|
before = [ "local-fs-pre.target" "local-fs.target" "shutdown.target" ];
|
||||||
|
wants = [ "local-fs-pre.target" ];
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
RemainAfterExit = true;
|
||||||
|
ExecStart = ''${pkgs.utillinux}/bin/mount -o remount,hidepid=2,gid=${toString config.ids.gids.proc} /proc'';
|
||||||
|
ExecStop = ''${pkgs.utillinux}/bin/mount -o remount,hidepid=0,gid=0 /proc'';
|
||||||
|
};
|
||||||
|
|
||||||
|
unitConfig = {
|
||||||
|
DefaultDependencies = false;
|
||||||
|
Conflicts = "shutdown.target";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -25,6 +25,8 @@ import ./make-test.nix ({ pkgs, ...} : {
|
||||||
};
|
};
|
||||||
users.users.sybil = { isNormalUser = true; group = "wheel"; };
|
users.users.sybil = { isNormalUser = true; group = "wheel"; };
|
||||||
security.sudo = { enable = true; wheelNeedsPassword = false; };
|
security.sudo = { enable = true; wheelNeedsPassword = false; };
|
||||||
|
security.hideProcessInformation = true;
|
||||||
|
users.users.alice = { isNormalUser = true; extraGroups = [ "proc" ]; };
|
||||||
};
|
};
|
||||||
|
|
||||||
testScript =
|
testScript =
|
||||||
|
@ -117,5 +119,12 @@ import ./make-test.nix ({ pkgs, ...} : {
|
||||||
subtest "sudo", sub {
|
subtest "sudo", sub {
|
||||||
$machine->succeed("su - sybil -c 'sudo true'");
|
$machine->succeed("su - sybil -c 'sudo true'");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Test hidepid
|
||||||
|
subtest "hidepid", sub {
|
||||||
|
$machine->succeed("grep -Fq hidepid=2 /etc/mtab");
|
||||||
|
$machine->succeed("[ `su - sybil -c 'pgrep -c -u root'` = 0 ]");
|
||||||
|
$machine->succeed("[ `su - alice -c 'pgrep -c -u root'` != 0 ]");
|
||||||
|
};
|
||||||
'';
|
'';
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue