Skip to content

Commit 463dbe8

Browse files
blink-so[bot]f0ssel
andcommitted
fix: restore essential user environment variables (HOME, USER)
When running under sudo, tools like claude couldn't find their config files because they were looking in root's HOME directory instead of the original user's home. This adds minimal environment restoration: - HOME: Set to original user's home directory - USER: Set to original username This allows user tools to find their configuration files while keeping the implementation clean and focused. Co-authored-by: f0ssel <[email protected]>
1 parent 4e9ba40 commit 463dbe8

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

network/linux.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"log/slog"
88
"os"
99
"os/exec"
10+
"os/user"
1011
"strconv"
1112
"syscall"
1213
"time"
@@ -98,6 +99,17 @@ func (l *LinuxJail) Execute(command []string, extraEnv map[string]string) error
9899
env = append(env, fmt.Sprintf("%s=%s", key, value))
99100
}
100101

102+
// When running under sudo, restore essential user environment variables
103+
if sudoUser := os.Getenv("SUDO_USER"); sudoUser != "" {
104+
if user, err := user.Lookup(sudoUser); err == nil {
105+
// Set HOME to original user's home directory
106+
env = append(env, fmt.Sprintf("HOME=%s", user.HomeDir))
107+
// Set USER to original username
108+
env = append(env, fmt.Sprintf("USER=%s", sudoUser))
109+
l.logger.Debug("Restored user environment", "home", user.HomeDir, "user", sudoUser)
110+
}
111+
}
112+
101113
cmd.Env = env
102114
cmd.Stdin = os.Stdin
103115
cmd.Stdout = os.Stdout

network/macos.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"log/slog"
88
"os"
99
"os/exec"
10+
"os/user"
1011
"strconv"
1112
"strings"
1213
"syscall"
@@ -84,6 +85,17 @@ func (m *MacOSNetJail) Execute(command []string, extraEnv map[string]string) err
8485
env = append(env, fmt.Sprintf("%s=%s", key, value))
8586
}
8687

88+
// When running under sudo, restore essential user environment variables
89+
if sudoUser := os.Getenv("SUDO_USER"); sudoUser != "" {
90+
if user, err := user.Lookup(sudoUser); err == nil {
91+
// Set HOME to original user's home directory
92+
env = append(env, fmt.Sprintf("HOME=%s", user.HomeDir))
93+
// Set USER to original username
94+
env = append(env, fmt.Sprintf("USER=%s", sudoUser))
95+
m.logger.Debug("Restored user environment", "home", user.HomeDir, "user", sudoUser)
96+
}
97+
}
98+
8799
cmd.Env = env
88100
cmd.Stdout = os.Stdout
89101
cmd.Stderr = os.Stderr

0 commit comments

Comments
 (0)