prescript.py 997 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. if __name__ == "__main__":
  2. import ctypes
  3. import os
  4. import sys
  5. import json
  6. import typing
  7. import time
  8. import traceback
  9. if len(sys.argv) != 4:
  10. sys.exit(-1)
  11. lib = ctypes.CDLL("/tmp/sandbox-python/python.so")
  12. module = sys.argv[1]
  13. code = open(module).read()
  14. def create_sandbox():
  15. os.chroot(".")
  16. os.chdir("/")
  17. def prtcl():
  18. lib.DifySeccomp.argtypes = []
  19. lib.DifySeccomp.restype = None
  20. lib.DifySeccomp()
  21. def drop_privileges(uid, gid):
  22. os.setgid(gid)
  23. os.setuid(uid)
  24. uid = int(sys.argv[2])
  25. gid = int(sys.argv[3])
  26. if not uid or not gid:
  27. sys.exit(-1)
  28. create_sandbox()
  29. prtcl()
  30. drop_privileges(uid, gid)
  31. # setup sys.excepthook
  32. def excepthook(type, value, tb):
  33. sys.stderr.write("".join(traceback.format_exception(type, value, tb)))
  34. sys.stderr.flush()
  35. sys.exit(-1)
  36. sys.excepthook = excepthook
  37. exec(code)