add_seccomp.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package python
  2. import (
  3. "syscall"
  4. "github.com/langgenius/dify-sandbox/internal/core/lib"
  5. "github.com/langgenius/dify-sandbox/internal/static/python_syscall"
  6. sg "github.com/seccomp/libseccomp-golang"
  7. )
  8. //var allow_syscalls = []int{}
  9. func InitSeccomp(uid int, gid int, enable_network bool) error {
  10. err := syscall.Chroot(".")
  11. if err != nil {
  12. return err
  13. }
  14. err = syscall.Chdir("/")
  15. if err != nil {
  16. return err
  17. }
  18. lib.SetNoNewPrivs()
  19. ctx, err := sg.NewFilter(sg.ActKillProcess)
  20. if err != nil {
  21. return err
  22. }
  23. for _, syscall := range python_syscall.ALLOW_SYSCALLS {
  24. err = ctx.AddRule(sg.ScmpSyscall(syscall), sg.ActAllow)
  25. if err != nil {
  26. return err
  27. }
  28. }
  29. if enable_network {
  30. for _, syscall := range python_syscall.ALLOW_NETWORK_SYSCALLS {
  31. err = ctx.AddRule(sg.ScmpSyscall(syscall), sg.ActAllow)
  32. if err != nil {
  33. return err
  34. }
  35. }
  36. }
  37. err = ctx.Load()
  38. if err != nil {
  39. return err
  40. }
  41. // setuid
  42. err = syscall.Setuid(uid)
  43. if err != nil {
  44. return err
  45. }
  46. // setgid
  47. err = syscall.Setgid(gid)
  48. if err != nil {
  49. return err
  50. }
  51. return nil
  52. }