@@ -86,8 +86,10 @@ func (m *MacOSNetJail) Execute(command []string, extraEnv map[string]string) err
8686 }
8787
8888 // 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 {
89+ sudoUser := os .Getenv ("SUDO_USER" )
90+ if sudoUser != "" {
91+ user , err := user .Lookup (sudoUser )
92+ if err == nil {
9193 // Set HOME to original user's home directory
9294 env = append (env , fmt .Sprintf ("HOME=%s" , user .HomeDir ))
9395 // Set USER to original username
@@ -103,29 +105,28 @@ func (m *MacOSNetJail) Execute(command []string, extraEnv map[string]string) err
103105 cmd .Stderr = os .Stderr
104106 cmd .Stdin = os .Stdin
105107
108+ // Set group ID using syscall
109+ cmd .SysProcAttr = & syscall.SysProcAttr {
110+ Credential : & syscall.Credential {
111+ Gid : uint32 (m .groupID ),
112+ },
113+ }
114+
106115 // Drop privileges to original user if running under sudo
107- if sudoUID := os .Getenv ("SUDO_UID" ); sudoUID != "" {
108- if sudoGID := os .Getenv ("SUDO_GID" ); sudoGID != "" {
109- uid , err := strconv .Atoi (sudoUID )
110- if err != nil {
111- m .logger .Warn ("Invalid SUDO_UID, subprocess will run as root" , "sudo_uid" , sudoUID , "error" , err )
112- } else {
113- // Use original user ID but KEEP the jail group for network isolation
114- cmd .SysProcAttr = & syscall.SysProcAttr {
115- Credential : & syscall.Credential {
116- Uid : uint32 (uid ),
117- Gid : uint32 (m .groupID ), // Keep jail group, not original user's group
118- },
119- }
120- m .logger .Debug ("Dropping privileges to original user with jail group" , "uid" , uid , "jail_gid" , m .groupID )
116+ sudoUID := os .Getenv ("SUDO_UID" )
117+ if sudoUID != "" {
118+ uid , err := strconv .Atoi (sudoUID )
119+ if err != nil {
120+ m .logger .Warn ("Invalid SUDO_UID, subprocess will run as root" , "sudo_uid" , sudoUID , "error" , err )
121+ } else {
122+ // Use original user ID but KEEP the jail group for network isolation
123+ cmd .SysProcAttr = & syscall.SysProcAttr {
124+ Credential : & syscall.Credential {
125+ Uid : uint32 (uid ),
126+ Gid : uint32 (m .groupID ), // Keep jail group, not original user's group
127+ },
121128 }
122- }
123- } else {
124- // Set group ID using syscall (original behavior for non-sudo)
125- cmd .SysProcAttr = & syscall.SysProcAttr {
126- Credential : & syscall.Credential {
127- Gid : uint32 (m .groupID ),
128- },
129+ m .logger .Debug ("Dropping privileges to original user with jail group" , "uid" , uid , "jail_gid" , m .groupID )
129130 }
130131 }
131132
@@ -367,4 +368,4 @@ func (m *MacOSNetJail) cleanupTempFiles() {
367368 if m .mainRulesPath != "" {
368369 os .Remove (m .mainRulesPath )
369370 }
370- }
371+ }
0 commit comments