先说结论再说试验
实际ID:就是创建这个进程的用户/组ID
有效ID:如果可执行文件权限中没有S时(-rwxr-xr-x 1 root root 5415 11-09 15:55 getids这个getids-rwxr权限就没有S)与实际用户ID/组相同
如果可执行文件权限中有S时(-rwsr-xr-x 1 root root 5415 11-09 15:55 getids这个getids-rwsr权限有S)有效ID就是文件拥有者/组ID(创建该文件的用户或组)
实际ID就是实际上这个进程的执行者(用户)三谁
有效ID就是说进程访问文件时,检查该进程以什么权限去访问
有S (saved set user ID)使有效ID(进程的权限)变成文件拥有者,使它获得更高的权限
文件拥有者就是谁创建的这个文件,所以文件拥有者本身一般会有比其他用户更高的可执行权限
例如:-rwxrwxr-x 1 NewuserNewuser 5416 11-10 22:02 getids2
U– G - O(分别代表文件拥有者(上面的Newuser),文件所属组(上面第二个Newuser),其他用户权限)
登录root用户创建getids
#include<sys/types.h>
#include<unistd.h>
#include<stdio.h>
int main()
{
printf("pid=%d\n",getpid());
printf("ppid=%d\n",getppid());
printf("uid=%d\n",getuid());
printf("euid=%d\n",geteuid());
printf("gid=%d\n",getgid());
printf("egid=%d\n",getegid());
return 0;
}
运行结果
放大的字体表明不同的用户运行的结果
-rwxr-xr-x 1 root root 5415 11-09 15:55 getids
[root@localhost home]# ./getids
pid=15186
ppid=14938
uid=0
euid=0
gid=0
egid=0
-rwxr-xr-x 1 root root 5415 11-09 15:55 getids
[Newuser@localhost home]$ ./getids
pid=15266
ppid=15242
uid=501
euid=501
gid=501
egid=501
-rwsr-xr-x 1 root root 5415 11-09 15:55 getids
[root@localhost home]# ./getids
pid=15393
ppid=15358
uid=0
euid=0
gid=0
egid=0
-rwsr-xr-x 1 root root 5415 11-09 15:55 getids
[Newuser@localhost home]$ ./getids
pid=15474
ppid=15436
uid=501
euid=0
gid=501
egid=501
然后登录Newuser用户创建getids2代码和getids一样
然后运行如下结果
-rwxrwxr-x 1 Newuser Newuser 5416 11-10 22:02getids2
[root@localhosthome]# ./getids2
pid=16155
ppid=16133
uid=0
euid=0
gid=0
egid=0
-rwxrwxr-x 1 Newuser Newuser 5416 11-10 22:02 getids2
[Newuser@localhosthome]$ ./getids2
pid=16117
ppid=15967
uid=501
euid=501
gid=501
egid=501
-rwsrwxr-x 1 Newuser Newuser 5416 11-10 22:02 getids2
[Newuser@localhost home]$ ./getids2
pid=16310
ppid=16241
uid=501
euid=501
gid=501
egid=501
-rwsrwxr-x 1 Newuser Newuser 5416 11-10 22:02 getids2
[root@localhost home]# ./getids2
pid=16350
ppid=16329
uid=0
euid=501
gid=0
egid=0