#include #include #include #include #include int main(void) { struct passwd *pw; pw = getpwnam("nobody"); if (pw == NULL) { fprintf(stderr, "User nobody does not exists.\n"); exit(-1); } if ((chdir("/var/empty")) == -1) { fprintf(stderr, "Directory /var/empty does not exists.\n"); exit(-1); } if((chroot("/var/empty")) == -1) { fprintf(stderr, "Failed to chroot in /var/empty.\n"); perror("chroot"); exit(-1); } if ((setgid(pw->pw_gid) == -1) || (setuid(pw->pw_uid) == -1) || (setegid(pw->pw_gid) == -1) || (seteuid(pw->pw_uid) == -1)) { fprintf(stderr, "Cannot drop privileges.\n"); exit(-1); } printf("Privileges reduction successful.\n"); return 0; }