nix-daemon confinement
This commit is contained in:
parent
cf98a8a221
commit
a8f9e7a9c2
4 changed files with 56 additions and 3 deletions
|
@ -48,7 +48,7 @@
|
||||||
"pipe-operator"
|
"pipe-operator"
|
||||||
];
|
];
|
||||||
warn-dirty = false;
|
warn-dirty = false;
|
||||||
allowed-users = [ "@wheel" ];
|
allowed-users = [ "@wheel" "grimmauld" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.nh = {
|
programs.nh = {
|
||||||
|
|
|
@ -17,10 +17,11 @@ in
|
||||||
./wpa_supplicant.nix
|
./wpa_supplicant.nix
|
||||||
./auditd.nix
|
./auditd.nix
|
||||||
./acpid.nix
|
./acpid.nix
|
||||||
./cups.nix
|
# ./cups.nix
|
||||||
./bluetooth.nix
|
./bluetooth.nix
|
||||||
./tty.nix
|
./tty.nix
|
||||||
./ask-password.nix
|
./ask-password.nix
|
||||||
|
./nix-daemon.nix
|
||||||
|
|
||||||
./global
|
./global
|
||||||
];
|
];
|
||||||
|
|
51
hardening/systemd/nix-daemon.nix
Normal file
51
hardening/systemd/nix-daemon.nix
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
config.systemd.services = lib.mkIf (config.specialisation != { }) {
|
||||||
|
nix-daemon.serviceConfig = {
|
||||||
|
MemoryDenyWriteExecute = true;
|
||||||
|
NoNewPrivileges = true;
|
||||||
|
SystemCallArchitectures = "native";
|
||||||
|
RestrictSUIDSGID = true; # good, somehow???
|
||||||
|
|
||||||
|
RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6"; # needed to download sources and caches
|
||||||
|
RestrictNamespaces = "user net uts mnt ipc pid"; # namespaces needed for sandboxing
|
||||||
|
SystemCallFilter = "@system-service @cpu-emulation @mount @privileged";
|
||||||
|
|
||||||
|
LockPersonality = true;
|
||||||
|
ProtectControlGroups = true;
|
||||||
|
ProtectKernelModules = true; # todo: does kvm need a modprobe here?
|
||||||
|
PrivateMounts = true;
|
||||||
|
ProtectProc = "invisible";
|
||||||
|
ProtectClock = true;
|
||||||
|
|
||||||
|
# file system
|
||||||
|
PrivateTmp = true;
|
||||||
|
ProtectSystem = "strict";
|
||||||
|
ReadWritePaths = "/nix";
|
||||||
|
|
||||||
|
# Scheduling: only do as much as resources are available
|
||||||
|
LimitNICE = 1;
|
||||||
|
Nice = 19;
|
||||||
|
RestrictRealtime = true;
|
||||||
|
|
||||||
|
# devices
|
||||||
|
DevicePolicy = "closed"; # allow pseudo-devices like /dev/null, but no real devices
|
||||||
|
DeviceAllow = "/dev/kvm"; # kvm is needed for VM tests
|
||||||
|
|
||||||
|
CapabilityBoundingSet = [
|
||||||
|
"CAP_FOWNER CAP_CHOWN CAP_SETUID CAP_SETGID CAP_SYS_ADMIN CAP_DAC_OVERRIDE"
|
||||||
|
];
|
||||||
|
|
||||||
|
# ProtectKernelLogs=true; # BAD
|
||||||
|
# ProtectKernelTunables = true; # BAD
|
||||||
|
# PrivateUsers=true; BAD
|
||||||
|
# ProtectHome = "read-only"; # BAD
|
||||||
|
# ProtectHostname = true; # BAD!
|
||||||
|
# PrivateNetwork = true; # BAD!
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -41,7 +41,8 @@ in
|
||||||
"mac80211"
|
"mac80211"
|
||||||
"bluetooth"
|
"bluetooth"
|
||||||
"cfg80211"
|
"cfg80211"
|
||||||
]; # "kvm-intel"
|
"kvm-intel"
|
||||||
|
];
|
||||||
boot.extraModprobeConfig = "options iwlwifi disable_11ax=Y";
|
boot.extraModprobeConfig = "options iwlwifi disable_11ax=Y";
|
||||||
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
|
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue