Commit Graph
37 Commits
Author SHA1 Message Date
Josh Patterson 21222ff119 FIX: use /sbin/nologin for service accounts
These accounts existed only for container UID mapping and filesystem
ownership, but user.present omitted shell:, so Salt fell through to the
platform useradd default and every one of them got /bin/bash. Pin them to
/sbin/nologin so none can be used as an interactive login or `su -` target.

socore keeps /bin/bash: `su socore -c '/usr/sbin/so-repo-sync'` in soup and
so-kernel-upgrade execs the account's passwd shell, and operator docs tell
users to su to socore. soqemussh keeps /bin/bash as an SSH login account.

elastic-agent, elastic-agent-pr and kafka are included alongside the accounts
named in the issue, being the same class with the same unset shell, so the
default is uniform.

Cron is unaffected: cronie runs jobs via the crontab SHELL (default /bin/sh),
not the passwd shell. suricata is the only account changed here that owns a
crontab, and somon has shipped as nologin with a working cron job already.
The zeek `runuser -l zeek` calls all run inside so-zeek via docker.run/exec,
so they resolve the shell from the image, not the host.

Verified on a 3.4.0 managersearch + sensor grid: highstate converges with the
shell as the only change and no failures, is idempotent on a second run, all
containers stay up, SOC still issues a Kratos login flow, and the suricata
surilogcompress cron job runs post-change ((suricata) CMD/CMDEND in
/var/log/cron) while `su - suricata` is now refused.

Closes #16256
2026-09-25 09:23:09 -04:00
Josh Patterson 1e86be11b2 FIX: install /usr/sbin management scripts as root
Salt installed the so-* scripts into /usr/sbin owned by unprivileged service
UIDs (939/socore, plus 930-960 per service) at mode 755, while root executes
those same files from cron, systemd and state cmd.run. Any file-write
primitive as one of those UIDs was therefore root.

Two mechanisms behind this are not visible in the diff:

file.recurse also manages the destination directory, so /usr/sbin itself was
chowned to whichever service UID ran last. A directory's owner may always
chmod it, so that UID could replace even the scripts already declared
user: root -- so-config-backup, so-suricata-eve-clean, so-nsm-mount-nvme.
usr_sbin_perms now pins the directory to root:root 555, the mode the
filesystem RPM ships.

Omitting user:/group: is a no-op on files that already exist, because
check_perms only chowns when a user is named. Explicit user: root is what
lets upgraded grids self-heal on the next highstate, and what makes a
revert chown back rather than silently do nothing.
2026-09-16 10:34:20 -04:00
reyesj2 84228a819b remove heayvnode FleetServer_* directory creation, and skip empty directories during FleetServer policy management 2026-06-23 15:30:49 -05:00
reyesj2 ebeeb91297 run fleet ssl state in fleet.config to ensure all required certs are created before so-elastic-fleet-setup runs 2026-01-28 15:23:38 -06:00
reyesj2 809422c517 add retries to so-resources repo pull 2026-01-22 16:39:19 -06:00
reyesj2 c1a5c2b2d1 set elasticfleet aritifact registry artifact file permissions 2025-08-12 14:39:35 -05:00
Josh Patterson 44a5b3b1e5 MANAGERHYPE setup is now complete! 2025-03-12 21:05:04 -04:00
Jason Ertel 0047246cf2 reduce stdout verbosity 2025-03-04 10:55:12 -05:00
defensivedepth 5406a263d5 Add local custom template 2024-10-29 19:42:06 -04:00
defensivedepth 4c5099d429 Initial support for local lookup 2024-10-29 10:27:54 -04:00
m0duspwnens 20127e6b1d hard-reset to the remote revision 2024-10-01 15:09:53 -04:00
m0duspwnens 24817a3919 user socore 2024-10-01 09:21:56 -04:00
defensivedepth d2397c3c1c Refactor cron logic 2024-09-24 13:03:51 -04:00
defensivedepth 0a74a53254 Remove cron if disabled 2024-09-24 12:38:49 -04:00
defensivedepth 5286739414 Disable by default 2024-09-24 10:51:52 -04:00
defensivedepth 5cc8198302 Fix permissions 2024-09-23 16:32:42 -04:00
defensivedepth 2a890a35a0 Update format 2024-09-23 13:48:12 -04:00
defensivedepth ef003ffbb5 Refactor 2024-09-23 12:55:07 -04:00
defensivedepth 074cc8e6ff Initial commit 2024-09-20 11:58:21 -04:00
weslambert 880300d644 Move ELASTICFLEETMERGED import under allowed states 2024-01-11 14:58:21 -05:00
weslambert f5b59cacec Move ELASTICFLEETMERGED import 2024-01-11 14:56:01 -05:00
weslambert ea5097f1b4 Add back curly brace 2024-01-11 14:51:01 -05:00
weslambert cc66daba1a Make sure optional integration pillar values are merged with defaults 2024-01-11 14:49:39 -05:00
Josh Brower f6cd35e143 Set execute permissions 2023-11-06 08:03:31 -05:00
weslambert 65735fc4d3 Add eval and import roles 2023-11-02 09:54:01 -04:00
Wes c32935e2e6 Remove optional integration from configuration if not enabled 2023-11-01 17:02:43 +00:00
Wes 655c88cd09 Make sure enabled_nodes is populated 2023-11-01 16:47:51 +00:00
Wes 44e45843bf Change optional integration Fleet configuration 2023-11-01 13:52:38 +00:00
Wes 9701d0ac20 Optional integration Fleet configuration 2023-11-01 13:47:20 +00:00
Wes 670cd19051 Exclude package upgrade script 2023-09-28 18:04:07 +00:00
Wes 018186ccbd Upgrade packages and load integrations when packages change 2023-09-28 16:43:56 +00:00
Wes 877fc36013 Add log dir 2023-07-19 14:57:24 +00:00
Josh Brower d0d7ab57ca Add Elastic Agent container for Heavy Nodes 2023-06-22 16:02:17 -04:00
Wes 302e580d8f Add so-fleet role logic 2023-05-31 19:56:17 +00:00
Wes 53b4f7bd5c Add spacing 2023-05-30 14:05:11 +00:00
Wes c835c523a9 Elastic Fleet integration update improvements 2023-05-30 02:54:39 +00:00
m0duspwnens 3f8e15d16f enabled/disable elaticfleet in ui 2023-05-15 09:41:44 -04:00