Do not set attributes when spawning the getter child (#16791)
* Do not set attributes when spawning the getter child * Cleanup * Cleanup --------- Co-authored-by: the-nando <the-nando@invalid.local>
This commit is contained in:
parent
378c3582ff
commit
f541f2e59b
|
@ -0,0 +1,3 @@
|
||||||
|
```release-note:bug
|
||||||
|
client: Remove setting attributes when spawning the getter child
|
||||||
|
```
|
|
@ -24,24 +24,19 @@ func TestSandbox(t *testing.T) *Sandbox {
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetupDir creates a directory suitable for testing artifact - i.e. it is
|
// SetupDir creates a directory suitable for testing artifact - i.e. it is
|
||||||
// owned by the nobody user as would be the case in a normal client operation.
|
// owned by the user under which nomad runs.
|
||||||
//
|
//
|
||||||
// returns alloc_dir, task_dir
|
// returns alloc_dir, task_dir
|
||||||
func SetupDir(t *testing.T) (string, string) {
|
func SetupDir(t *testing.T) (string, string) {
|
||||||
uid, gid := credentials()
|
|
||||||
|
|
||||||
allocDir := t.TempDir()
|
allocDir := t.TempDir()
|
||||||
taskDir := filepath.Join(allocDir, "local")
|
taskDir := filepath.Join(allocDir, "local")
|
||||||
topDir := filepath.Dir(allocDir)
|
topDir := filepath.Dir(allocDir)
|
||||||
|
|
||||||
must.NoError(t, os.Chown(topDir, int(uid), int(gid)))
|
|
||||||
must.NoError(t, os.Chmod(topDir, 0o755))
|
must.NoError(t, os.Chmod(topDir, 0o755))
|
||||||
|
|
||||||
must.NoError(t, os.Chown(allocDir, int(uid), int(gid)))
|
|
||||||
must.NoError(t, os.Chmod(allocDir, 0o755))
|
must.NoError(t, os.Chmod(allocDir, 0o755))
|
||||||
|
|
||||||
must.NoError(t, os.Mkdir(taskDir, 0o755))
|
must.NoError(t, os.Mkdir(taskDir, 0o755))
|
||||||
must.NoError(t, os.Chown(taskDir, int(uid), int(gid)))
|
|
||||||
must.NoError(t, os.Chmod(taskDir, 0o755))
|
must.NoError(t, os.Chmod(taskDir, 0o755))
|
||||||
return allocDir, taskDir
|
return allocDir, taskDir
|
||||||
}
|
}
|
||||||
|
|
|
@ -137,7 +137,6 @@ func (s *Sandbox) runCmd(env *parameters) error {
|
||||||
cmd.Stdin = env.reader()
|
cmd.Stdin = env.reader()
|
||||||
cmd.Stdout = output
|
cmd.Stdout = output
|
||||||
cmd.Stderr = output
|
cmd.Stderr = output
|
||||||
cmd.SysProcAttr = attributes()
|
|
||||||
|
|
||||||
// start & wait for the subprocess to terminate
|
// start & wait for the subprocess to terminate
|
||||||
if err := cmd.Run(); err != nil {
|
if err := cmd.Run(); err != nil {
|
||||||
|
|
|
@ -4,19 +4,8 @@ package getter
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"syscall"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// attributes is not implemented by default
|
|
||||||
func attributes() *syscall.SysProcAttr {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// credentials is not implemented by default
|
|
||||||
func credentials() (uint32, uint32) {
|
|
||||||
return 0, 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// lockdown is not implemented by default
|
// lockdown is not implemented by default
|
||||||
func lockdown(string, string) error {
|
func lockdown(string, string) error {
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -5,45 +5,12 @@ package getter
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"syscall"
|
|
||||||
|
|
||||||
"github.com/mitchellh/go-homedir"
|
"github.com/mitchellh/go-homedir"
|
||||||
"github.com/shoenig/go-landlock"
|
"github.com/shoenig/go-landlock"
|
||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
// userUID is the current user's uid
|
|
||||||
userUID uint32
|
|
||||||
|
|
||||||
// userGID is the current user's gid
|
|
||||||
userGID uint32
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
userUID = uint32(syscall.Getuid())
|
|
||||||
userGID = uint32(syscall.Getgid())
|
|
||||||
}
|
|
||||||
|
|
||||||
// attributes returns the system process attributes to run
|
|
||||||
// the sandbox process with
|
|
||||||
func attributes() *syscall.SysProcAttr {
|
|
||||||
uid, gid := credentials()
|
|
||||||
return &syscall.SysProcAttr{
|
|
||||||
Credential: &syscall.Credential{
|
|
||||||
Uid: uid,
|
|
||||||
Gid: gid,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// credentials returns the UID and GID of the user the child process
|
|
||||||
// will run as - for now this is always the same user the Nomad agent is
|
|
||||||
// running as.
|
|
||||||
func credentials() (uint32, uint32) {
|
|
||||||
return userUID, userGID
|
|
||||||
}
|
|
||||||
|
|
||||||
// findHomeDir returns the home directory as provided by os.UserHomeDir. In case
|
// findHomeDir returns the home directory as provided by os.UserHomeDir. In case
|
||||||
// os.UserHomeDir returns an error, we return /root if the current process is being
|
// os.UserHomeDir returns an error, we return /root if the current process is being
|
||||||
// run by root, or /dev/null otherwise.
|
// run by root, or /dev/null otherwise.
|
||||||
|
|
|
@ -5,19 +5,8 @@ package getter
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"syscall"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// attributes is not implemented on Windows
|
|
||||||
func attributes() *syscall.SysProcAttr {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// credentials is not implemented on Windows
|
|
||||||
func credentials() (uint32, uint32) {
|
|
||||||
return 0, 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// lockdown is not implemented on Windows
|
// lockdown is not implemented on Windows
|
||||||
func lockdown(string, string) error {
|
func lockdown(string, string) error {
|
||||||
return nil
|
return nil
|
||||||
|
|
Loading…
Reference in New Issue