diff --git a/cmd/sops/subcommand/exec/exec_unix.go b/cmd/sops/subcommand/exec/exec_unix.go index f36d6326af..c17e4a109c 100644 --- a/cmd/sops/subcommand/exec/exec_unix.go +++ b/cmd/sops/subcommand/exec/exec_unix.go @@ -51,6 +51,23 @@ func SwitchUser(username string) { uid, _ := strconv.Atoi(user.Uid) gid, _ := strconv.Atoi(user.Gid) + groupIds, err := user.GroupIds() + var intGroupIds []int + if err != nil { + log.Fatal(err) + intGroupIds = []int{gid} + } else { + intGroupIds = make([]int, len(groupIds)) + for i, gid := range groupIds { + intGroupIds[i], _ = strconv.Atoi(gid) + } + } + + err = syscall.Setgroups(intGroupIds) + if err != nil { + log.Fatal(err) + } + err = syscall.Setgid(gid) if err != nil { log.Fatal(err)