@@ -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 
9294env  =  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
103105cmd .Stderr  =  os .Stderr 
104106cmd .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() {
367368if  m .mainRulesPath  !=  ""  {
368369os .Remove (m .mainRulesPath )
369370}
370- }
371+ }
0 commit comments