一:前言
进程有属主和属组;文件也有属主和属组;
(1)任何一个可执行程序文件能不能启动为进程,取决于发起者对执行程序是否拥有执行权限
(2)启动为进程后,其进程的属主为发起者,进程的属组为发起者的所属的组
(3)进程访问文件时的权限,取决于进程的发起者
(a)进程的发起者,是文件的属主,则应用文件属主权限
(b)进程的发起者,属于文件的属组,则应用文件属组权限
(3)都不是的话,则应用文件其他权限
二:SUID
suid位置表示任何用户都可以使用所有者的权限执行该文件,但这些权限不会超出该文件的使用范围
1. 权限的设定方法
a. 设置SUID位,在常规权限之前输入4,如之前的644表示为4644
b. 字母表示 chmod u+s filenam
2. SUID工作原理
a.环境前提:
1.linux中有一个二进制程序cat,属主属组均为root
2.linux中有一个系统文件/etc/shadow,属主属组均为root
3.我们创建一个普通用户叫user1
4.user1具有对cat的执行权限
5.user1 不具有对/etc/shadow的任何权限
b.默认情况下
1.user1执行cat,系统创建一个cat进程,进程的属主属组取程序发起者,也就是user1:user1
2.cat进程访问/etc/shadow,由于进程属主属组是user1:user1,与/etc/shadow的属组属主都不匹配,所以被拒绝访问.
c.给cat设置SUID之后
1.user1执行cat.系统创建一个cat进程,进程的属主取cat的属主,属组取程序发起者,就是root:user1
2.cat进程访问/etc/shadow,由于进程属主是root,与/etc/shadow的属主匹配,所以被允许访问.
3. 举例
使用passwd命令修改/etc/shadow文件的内容
/etc/shadow对普通用户没有任何权限(640),passwd命令设置了SUID位;当普通用户运行passwd命令时,系统创建的passwd进行的属主由默认程序的发起者变为了passwd的属主root ,所以普通用户就是以root的权限修改/etc/shadow.
4. 查找对于root用户具有权限4000的命令
三:SGID
1. 权限的设定方法
a. 要设置SGID位,在常规权限之前输入2
b. 字母表示 chmod g+s dir/filenam
2. 相关说明
a.作用在二进制程序上,执行sgid权限的程序,用户将继承程序的所属组权限
b. 作用在目录上时,此文件夹下的所用用户新建文件都自动继承此目录的用户组
四:Sticky
1. 权限设定方法
a. 要设置sticky位,在常规权限之前输入1
b. 字母表示 chmod o+t dir
2. 相关说明
a.对于一个多人可写的目录,如果设置了sticky,每个用户仅能删除和改名自己的文件或目录
b. 只能作用在目录上,普通文件设置无意义,会被linux内核忽略
c. 用户在sticky权限的目录下新建的目录不会自动继承sticky权限
五:总结
SUID:作用于文件(二进制程序)
此用户将继承程序的所有者权限
SGID:租用用于文件(二进制程序)和目录
a.对于文件:此用户将继承此程序所属组的权限
b.对于目录:此文件夹所用用户新建文件都自动继承此目录的用户组
Sticky:作用域目录
设定后,目录中的用户只能删除,移动或改名自己的文件或目录
二进制文件 |
目录 |
|
SUID |
此用户将继承此程序的所有者权限 |
无意义 |
SGID |
此用户将继承此程序的所属组权限 |
此目录下所有用户新建文件都自动继承此目录的用户组 |
Sticky |
无意义 |
目录中每个用户仅能删除、移动或改名自己的文件或目录 |