Skip to content

Instantly share code, notes, and snippets.

@michaelvobrien
Created April 29, 2011 16:13
Show Gist options
  • Save michaelvobrien/948548 to your computer and use it in GitHub Desktop.
Save michaelvobrien/948548 to your computer and use it in GitHub Desktop.
Learn about setuid
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
void print_uids();
void print_uids_and_wait_for_user_input();
int
main(void) {
print_uids_and_wait_for_user_input();
setruid(1001);
print_uids_and_wait_for_user_input();
setuid(0);
print_uids_and_wait_for_user_input();
seteuid(1000);
setruid(0);
print_uids_and_wait_for_user_input();
seteuid(0);
setuid(1000);
seteuid(0);
setruid(0);
print_uids_and_wait_for_user_input();
printf("Replacing this process with 'sleep' and sleeping for 10 seconds...\n");
execl("/bin/sleep", "/bin/sleep", "10", NULL);
return 0;
}
void print_uids() {
printf("ruid: %d\n", getuid());
printf("euid: %d\n", geteuid());
}
void print_uids_and_wait_for_user_input() {
print_uids();
getchar();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment