一:linux UID,GID,EUID,EGID,SUID,SGID快速理解:
1. UID/GID 实际用户ID和实际组ID,即登陆时候的用户名,比如我是lirobins登陆,那么UID/GID 为lirobins/lirobins
2. EUID/EGID 有效的用户ID和有效的组ID,它们指定了访问目标的权限,SUID,SGID的设置(如setuid()函数或者chmod命令)会影响这个值。
3. SUID/SGID 针对文件而讲述的概念,他可以修改当前进程的EUID/EGID
二:UINX 权限为讲解:
S G T R W X R W X R W X
s - set user id enable
g - set user group enble
t - sticky
主要讲解s/g enable
实例:
chmod 4777 file
file文件的属性为rwsrwxrwx
chmod 2777 file
file文件属性为rwxrwsrwx
三: 分析方法:
对它们的使用就是要始终建立UID/GID/EGID/EUID的当前值是如何的
实例1:
1)有程序apps要执行,当前登录用户为lirobins,apps文件的ls -l 后的用户为lirobins,组为lirobins
此时UID=lirobins,GID=lirobins,EUID=lirobins,EGID=lirobins
2)现在apps程序要访问文件rong_file,rong_file 文件的ls -l后的用户为rong,组为home,按照当前现状,lirobins用户访问不了rong的
3)如果apps源代码里面增加了如setuid/setgid()函数之后,诸如如下
SUID 为rong的ID,那么此时apps程序(lirobins的进程),UID=lirobins,EUID=rong, GID=lirobins, EGID=liroibns,此时
apps程序有了rong的权限,当然就可以访问rong_file了
4)同理,如果apps程序(lirobins的进程),SGID设置了home,那么UID=lirobins,EUID=lirobins, GID=lirobins, EGID=home,此时
apps程序也有了rong的权限,因为他们同组吗,当然就可以访问rong_file了
实例2:
1)有程序apps要执行,当前登录用户为lirobins,apps文件的ls -l 后的用户为root,组为root,mode为rwsr--r--
此时UID=lirobins,GID=lirobins,EUID=root,EGID=lirobins
2)此时lirobins可以执行apps程序了,如果apps文件变为rwxr--r-- root root, 那么lirobins用户但让不能访问apps文件,因为他没有root权限,
实例3:这个例子有点绕,如果理解了实例1和实例2,小菜一碟
UNIX系统有一个/dev/kmem的设备文件,是一个字符设备文件,里面存储了核心程序要访问的数据,包括用户的口令。所以这个文件不能给一般的用户读写,权限设为:cr--r----- 1 root system 2, 1 May 25 1998 kmem
但ps等程序要读这个文件,而ps的权限设置如下:
-r-xr-sr-x 1 bin system 59346 Apr 05 1998 ps
这
是一个设置了SGID的程序,而ps的用户是bin,不是root,所以不能设置SUID来访问kmem,但大家注意了,bin和root都属于
system组,而且ps设置了SGID,一般用户执行ps,就会获得system组用户的权限,而文件kmem的同组用户的权限是可读,所以一般用户执
行ps就没问题了。
四:总结,SUID/SGID就是向登陆用户提供了一种能访问文件的权限能力。