1*0648a547SJomo #include <sys/types.h>
2*0648a547SJomo #include <unistd.h>
3*0648a547SJomo #include <stdio.h>
4*0648a547SJomo #include <assert.h>
5*0648a547SJomo
main()6*0648a547SJomo int main()
7*0648a547SJomo {
8*0648a547SJomo printf("Current uid: %d, euid: %d, gid: %d, egid: %d\n\n", getuid(), geteuid(), getgid(), getegid());
9*0648a547SJomo
10*0648a547SJomo // 测试uid
11*0648a547SJomo printf("Set uid 1000\n");
12*0648a547SJomo setuid(1000);
13*0648a547SJomo int uid = getuid();
14*0648a547SJomo assert(uid == 1000);
15*0648a547SJomo printf("Current uid:%d\n\n", uid);
16*0648a547SJomo
17*0648a547SJomo // 测试gid
18*0648a547SJomo printf("Set gid 1000\n");
19*0648a547SJomo setgid(1000);
20*0648a547SJomo int gid = getgid();
21*0648a547SJomo assert(gid == 1000);
22*0648a547SJomo printf("Current gid:%d\n\n", gid);
23*0648a547SJomo
24*0648a547SJomo // 测试euid
25*0648a547SJomo printf("Setg euid 1000\n");
26*0648a547SJomo seteuid(1000);
27*0648a547SJomo int euid = geteuid();
28*0648a547SJomo assert(euid == 1000);
29*0648a547SJomo printf("Current euid:%d\n\n", euid);
30*0648a547SJomo
31*0648a547SJomo // 测试egid
32*0648a547SJomo printf("Set egid 1000\n");
33*0648a547SJomo setegid(1000);
34*0648a547SJomo int egid = getegid();
35*0648a547SJomo assert(egid == 1000);
36*0648a547SJomo printf("Current egid:%d\n\n", egid);
37*0648a547SJomo
38*0648a547SJomo // 测试uid在非root用户下无法修改
39*0648a547SJomo printf("Try to setuid for non_root.\n");
40*0648a547SJomo assert(setuid(0) < 0); // 非root用户无法修改uid
41*0648a547SJomo printf("Current uid: %d, euid: %d, gid: %d, egid: %d\n", getuid(), geteuid(), getgid(), getegid());
42*0648a547SJomo }