prescript.py 1015 B

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