Skip to content

Commit abaad56

Browse files
committed
Set USER and LOGNAME environment variables when dropping privileges
When a service is configured to run as a non-root user (@user), finit correctly drops privileges via setuid() and sets HOME and PATH, but does not set the USER and LOGNAME environment variables. They remain set to "root" from boot time. This causes problems for software that determines its identity from the environment rather than getuid(). For example, rootless Podman checks os.Getenv("USER") first when looking up subordinate UID/GID ranges in /etc/subuid and /etc/subgid. With USER=root but UID=1000, Podman looks up root's subuid entry instead of the actual user's, causing applications like newuidmap to fail. Setting USER and LOGNAME to match the actual user identity follows POSIX conventions and matches the behavior of su, sudo, and login.
1 parent 0ef325d commit abaad56

1 file changed

Lines changed: 4 additions & 1 deletion

File tree

src/service.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -627,8 +627,11 @@ static pid_t service_fork(svc_t *svc)
627627
set_uid(uid, svc);
628628

629629
/* Set default path for regular users */
630-
if (uid > 0)
630+
if (uid > 0) {
631631
setenv("PATH", _PATH_DEFPATH, 1);
632+
setenv("USER", svc->username, 1);
633+
setenv("LOGNAME", svc->username, 1);
634+
}
632635
if (home) {
633636
setenv("HOME", home, 1);
634637
if (chdir(home)) {

0 commit comments

Comments
 (0)