add_seccomp.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package nodejs
  2. import (
  3. "os"
  4. "strconv"
  5. "strings"
  6. "syscall"
  7. "github.com/langgenius/dify-sandbox/internal/core/lib"
  8. "github.com/langgenius/dify-sandbox/internal/static/nodejs_syscall"
  9. )
  10. //var allow_syscalls = []int{}
  11. func InitSeccomp(uid int, gid int, enable_network bool) error {
  12. err := syscall.Chroot(".")
  13. if err != nil {
  14. return err
  15. }
  16. err = syscall.Chdir("/")
  17. if err != nil {
  18. return err
  19. }
  20. lib.SetNoNewPrivs()
  21. allowed_syscalls := []int{}
  22. allowed_not_kill_syscalls := []int{}
  23. allowed_syscall := os.Getenv("ALLOWED_SYSCALLS")
  24. if allowed_syscall != "" {
  25. nums := strings.Split(allowed_syscall, ",")
  26. for num := range nums {
  27. syscall, err := strconv.Atoi(nums[num])
  28. if err != nil {
  29. continue
  30. }
  31. allowed_syscalls = append(allowed_syscalls, syscall)
  32. }
  33. } else {
  34. allowed_syscalls = append(allowed_syscalls, nodejs_syscall.ALLOW_SYSCALLS...)
  35. allowed_not_kill_syscalls = append(allowed_not_kill_syscalls, nodejs_syscall.ALLOW_ERROR_SYSCALLS...)
  36. if enable_network {
  37. allowed_syscalls = append(allowed_syscalls, nodejs_syscall.ALLOW_NETWORK_SYSCALLS...)
  38. }
  39. }
  40. err = lib.Seccomp(allowed_syscalls, allowed_not_kill_syscalls)
  41. if err != nil {
  42. return err
  43. }
  44. // setuid
  45. err = syscall.Setuid(uid)
  46. if err != nil {
  47. return err
  48. }
  49. // setgid
  50. err = syscall.Setgid(gid)
  51. if err != nil {
  52. return err
  53. }
  54. return nil
  55. }