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
|
||||
#uucp = 19; # unused
|
||||
#lp = 20; # unused
|
||||
#proc = 21; # unused
|
||||
pulseaudio = 22; # must match `pulseaudio' GID
|
||||
gpsd = 23;
|
||||
#cdrom = 24; # unused
|
||||
@ -288,6 +289,7 @@
|
||||
floppy = 18;
|
||||
uucp = 19;
|
||||
lp = 20;
|
||||
proc = 21;
|
||||
pulseaudio = 22; # must match `pulseaudio' UID
|
||||
gpsd = 23;
|
||||
cdrom = 24;
|
||||
|
@ -90,6 +90,7 @@
|
||||
./security/ca.nix
|
||||
./security/duosec.nix
|
||||
./security/grsecurity.nix
|
||||
./security/hidepid.nix
|
||||
./security/oath.nix
|
||||
./security/pam.nix
|
||||
./security/pam_usb.nix
|
||||
|
42
nixos/modules/security/hidepid.nix
Normal file
42
nixos/modules/security/hidepid.nix
Normal file
@ -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"; };
|
||||
security.sudo = { enable = true; wheelNeedsPassword = false; };
|
||||
security.hideProcessInformation = true;
|
||||
users.users.alice = { isNormalUser = true; extraGroups = [ "proc" ]; };
|
||||
};
|
||||
|
||||
testScript =
|
||||
@ -117,5 +119,12 @@ import ./make-test.nix ({ pkgs, ...} : {
|
||||
subtest "sudo", sub {
|
||||
$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
Block a user