add_seccomp.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package python
  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/python_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, python_syscall.ALLOW_SYSCALLS...)
  35. if enable_network {
  36. allowed_syscalls = append(allowed_syscalls, python_syscall.ALLOW_NETWORK_SYSCALLS...)
  37. }
  38. }
  39. err = lib.Seccomp(allowed_syscalls, allowed_not_kill_syscalls)
  40. if err != nil {
  41. return err
  42. }
  43. // setuid
  44. err = syscall.Setuid(uid)
  45. if err != nil {
  46. return err
  47. }
  48. // setgid
  49. err = syscall.Setgid(gid)
  50. if err != nil {
  51. return err
  52. }
  53. return nil
  54. }