权限管理
linux安全上下文
前提:进程有属主和属组;文件有属主和属组
- 任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有可执行权限;
- 启动为进程后,其进程的属主为发起者,属组为发起者所属的组
- 进程访问文件时的权限取决于进程的发起者:
- 进程的发起者是文件的属主时,则应用文件属主权限
- 进程的发起者是文件的属组时,则应用文件属组权限
- 应用文件“其它”权限
特殊权限
linux默认权限是根据linux安全上下文的方式来控制的,而特殊权限的存在打破了linux安全上下文的规则。
SUID(4) //运行程序时,这个程序启动的进程的属主是程序文件自身的属主,而不是启动者为属主
chmod u+s file
chmod u-s file
//如果file本身原来就有执行权限,则SUID显示为s,否则显示为S
[root@wcluser ~]# ll /usr/bin/vim
-rwxr-xr-x. 1 root root 3525384 7月 23 2019 /usr/bin/vim
用普通用户执行vim
[wcl@wcluser ~]$ vim /usr/bin/vim
通过查看进程可以看到通过普通用户打开vim此时的进程发起者是普通用户
[root@wcluser ~]# ps -ef | grep vim
wcl 2053 1922 0 09:30 pts/1 00:00:00 vim /root/anaconda-ks.cfg
root 2055 1968 0 09:30 pts/2 00:00:00 grep --color=auto vim
给passwd设置SUID特殊权限
[root@wcluser ~]# chmod u+s /usr/bin/vim
[root@wcluser ~]# ll /usr/bin/vim
-rwsr-xr-x. 1 root root 3525384 7月 23 2019 /usr/bin/vim #属主的可执行权限变为s说明文件本身具有可执行权限
用普通用户重新查看
[wcl@wcluser ~]$ vim /usr/bin/vim
通过查看进程发现即使是普通用户启动的vim但是进程发起者仍旧是root
[root@wcluser ~]# ps -ef | grep vim
root 2048 1922 0 09:30 pts/1 00:00:00 vim /root/anaconda-ks.cfg
root 2050 1968 0 09:30 pts/2 00:00:00 grep --color=auto vim
SGID(2) //运行程序时,这个程序启动的进程的属组是程序文件自身的属组,而不是启动者所属的基本组
//默认情况下,用户创建文件时,其属组为此用户所属的基本组;
//一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件或目录,其所属的组
//为此设定了SGID的目录的属组
chmod g+s DIR
chmod g-s DIR
//如果file本身原来就有执行权限,则SGID显示为s,否则显示为S
给/root赋予可写可执行权限
[root@wcluser ~]