Reject UID or GID zero unless a documented use case requires it (#32)

* Reject UID or GID zero unless a documented use case requires it

setup_uid() would happily remap the seafile user to UID/GID 0, which
after the previous non-root fix would mean drop_privileges() drops
straight back into root. main() now rejects --uid/SEAFILE_UID and
--gid/SEAFILE_GID being 0 with exit code 2, before setup_uid() runs.

Verified against the real image via tests/smoke.sh.

* Clarify the GID=0 rejection message

Copilot review: 'group root' isn't a commonly used phrase. Name GID 0
as the root group explicitly instead.

---------

Co-authored-by: Maxim Shulga <maxim.shulga@alludo.com>
This commit is contained in:
Maksim ShulgaandMaxim Shulga authored and GitHub committed 2026-08-03 17:59:38 +00:00
1 parent 6d32460b13
commit 6f8af2cfa4
3 files changed
+25 -1

No files matched your search

+3 -1
View File
@@ -199,7 +199,9 @@ Acceptance criteria:
since it can't be invoked from an already non-root process anyway.
Verified against the real image (not just mocked unit tests): a running
container's PID 1 shows `Uid: 1000 1000 1000 1000` in `/proc/1/status`.
- [ ] Reject UID or GID zero unless a documented use case requires it.
- [x] Reject UID or GID zero unless a documented use case requires it.
`main()` now exits with code 2 and a clear message if `--uid`/`SEAFILE_UID`
or `--gid`/`SEAFILE_GID` resolve to 0, before `setup_uid()` ever runs.
- [ ] Add a health check for the daemon and RPC endpoint.
- [ ] Handle temporary RPC failures and daemon restarts without corrupting
state.