#define _GNU_SOURCE #include #include #include #include #include #include #include int main(int argc, char **argv) { uid_t uid = getuid(); uid_t gid = getgid(); unshare(CLONE_NEWUSER|CLONE_NEWNS); int fd = open("/proc/self/uid_map", O_RDWR); dprintf(fd, "%u %u 1\n", 0, uid); close(fd); fd = open("/proc/self/gid_map", O_RDWR); dprintf(fd, "%u %u 1\n", 0, gid); close(fd); setgroups(0, 0); chdir(argv[1]); mount("/dev", "./dev", 0, MS_BIND|MS_REC, 0); mount("/proc", "./proc", 0, MS_BIND|MS_REC, 0); chroot("."); execv(argv[2], argv+2); }