smartd: sandbox
This commit is contained in:
@@ -84,6 +84,8 @@
|
|||||||
sane.ids.unbound.uid = 2008;
|
sane.ids.unbound.uid = 2008;
|
||||||
sane.ids.unbound.gid = 2008;
|
sane.ids.unbound.gid = 2008;
|
||||||
sane.ids.resolvconf.gid = 2009;
|
sane.ids.resolvconf.gid = 2009;
|
||||||
|
sane.ids.smartd.uid = 2010;
|
||||||
|
sane.ids.smartd.gid = 2010;
|
||||||
|
|
||||||
# found on graphical hosts
|
# found on graphical hosts
|
||||||
sane.ids.nm-iodine.uid = 2101; # desko/moby/lappy
|
sane.ids.nm-iodine.uid = 2101; # desko/moby/lappy
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
{ config, lib, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
let
|
let
|
||||||
cfg = config.sane.programs.smartmontools;
|
cfg = config.sane.programs.smartmontools;
|
||||||
in
|
in
|
||||||
@@ -11,6 +11,50 @@ in
|
|||||||
sandbox.tryKeepUsers = true;
|
sandbox.tryKeepUsers = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
# TODO: service sandboxing
|
|
||||||
services.smartd.enable = lib.mkIf cfg.enabled true;
|
services.smartd.enable = lib.mkIf cfg.enabled true;
|
||||||
|
# don't depend on /run/wrappers/bin/sendmail
|
||||||
|
services.smartd.notifications.mail.mailer = lib.mkIf cfg.enabled (lib.getExe' pkgs.postfix "sendmail");
|
||||||
|
|
||||||
|
users.users.smartd = lib.mkIf cfg.enabled {
|
||||||
|
isSystemUser = true;
|
||||||
|
group = "disk"; # for access to /dev/sd*
|
||||||
|
extraGroups = [ "postdrop" ]; # for mail delivery
|
||||||
|
};
|
||||||
|
systemd.services.smartd = {
|
||||||
|
# hardening options (`systemd-analyze security smartd`)
|
||||||
|
serviceConfig.User = "smartd";
|
||||||
|
serviceConfig.AmbientCapabilities = [ "CAP_SYS_RAWIO" ];
|
||||||
|
serviceConfig.CapabilityBoundingSet = [ "CAP_SYS_RAWIO" ];
|
||||||
|
serviceConfig.NoNewPrivileges = true;
|
||||||
|
serviceConfig.DevicePolicy = "closed";
|
||||||
|
serviceConfig.DeviceAllow = "block-sd r";
|
||||||
|
serviceConfig.LockPersonality = true;
|
||||||
|
serviceConfig.MemoryDenyWriteExecute = true;
|
||||||
|
serviceConfig.PrivateIPC = true;
|
||||||
|
serviceConfig.PrivateMounts = true;
|
||||||
|
serviceConfig.PrivateNetwork = true;
|
||||||
|
serviceConfig.PrivateTmp = true;
|
||||||
|
serviceConfig.ProcSubset = "pid";
|
||||||
|
serviceConfig.ProtectClock = true;
|
||||||
|
serviceConfig.ProtectControlGroups = true;
|
||||||
|
serviceConfig.ProtectHome = true;
|
||||||
|
serviceConfig.ProtectHostname = true;
|
||||||
|
serviceConfig.ProtectKernelLogs = true;
|
||||||
|
serviceConfig.ProtectKernelModules = true;
|
||||||
|
serviceConfig.ProtectKernelTunables = true;
|
||||||
|
serviceConfig.ProtectProc = "invisible";
|
||||||
|
serviceConfig.ProtectSystem = "strict";
|
||||||
|
serviceConfig.RestrictAddressFamilies = [ "AF_UNIX" ]; # AF_UNIX required for systemd to know the service has started
|
||||||
|
serviceConfig.RestrictRealtime = true;
|
||||||
|
serviceConfig.RestrictSUIDSGID = true;
|
||||||
|
serviceConfig.SystemCallArchitectures = "native";
|
||||||
|
serviceConfig.SystemCallFilter = [
|
||||||
|
"@system-service"
|
||||||
|
"~@resources"
|
||||||
|
# keep "@privileged" or "@raw-io", since it needs to do that
|
||||||
|
];
|
||||||
|
# serviceConfig.RestrictNamespaces = true;
|
||||||
|
serviceConfig.ReadWritePaths = "/var/lib/postfix/queue/maildrop";
|
||||||
|
# serviceConfig.PrivateUsers = true; # can't, because it requires CAP_SYS_RAWIO
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user