Skip to content

Commit

Permalink
chore(events/syscall): linux only utils
Browse files Browse the repository at this point in the history
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
  • Loading branch information
leogr committed Apr 14, 2020
1 parent 58a8676 commit c373680
Showing 1 changed file with 59 additions and 0 deletions.
59 changes: 59 additions & 0 deletions events/syscall/utils_linux.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
// +build linux

package syscall

import (
"os/exec"
"os/user"
"strconv"
sys "syscall"

"github.com/falcosecurity/event-generator/events"
)

func becameUser(h events.Helper, username string) error {
h.Log().WithField("user", username).
Info("became user")

u, err := user.Lookup(username)
if err != nil {
return err
}

uid, err := strconv.Atoi(u.Uid)
if err != nil {
return err
}

return sys.Setuid(uid)
}

func runAsUser(h events.Helper, username string, cmdName string, cmdArgs ...string) error {
h.Log().WithField("user", username).
WithField("cmdName", cmdName).
WithField("cmdArgs", cmdArgs).
Info("run command as another user")

u, err := user.Lookup(username)
if err != nil {
return err
}

uid, err := strconv.Atoi(u.Uid)
if err != nil {
return err
}

gid, err := strconv.Atoi(u.Gid)
if err != nil {
return err
}

cmd := exec.Command(cmdName, cmdArgs...)
cmd.SysProcAttr = &sys.SysProcAttr{}
cmd.SysProcAttr.Credential = &sys.Credential{
Uid: uint32(uid),
Gid: uint32(gid),
}
return cmd.Run()
}

0 comments on commit c373680

Please sign in to comment.