前言:
Linux系统上的特殊权限有三种:SUID , SGID , STICKY ;
关键词:SUID , SGID , STICKY , facl ;
=================================================
1、安全上下文:
1.1 进程以某用户的身份运行;进程是发起此进程的用户的代理,因此以此用户的身份和权限完成所有操作;
1.2 权限匹配模型:
>> 判断进程的属主,看是否为被访问的文件的属主;如果是,则应用属主的权限;否则,进入下一步判断;
>> 判断进程的属组,是否属于被访问的文件的属组;如果是,则应用属组的权限;否则,进入下一步判断;
>> 应用other的权限;
2、SUID
默认情况下:用户发起的进程,进程的属主是其发起者;因此,进程以其发起者的身份运行;
SUID的功用:
用户运行某程序时,如果此程序拥有SUID权限,那么程序运行为进程时,进程的属主不是发起者,而是程序文件本身的属主;
管理文件的SUID权限:
chmod u+|-s FILE …
SUID的展示位置:属主的执行权限位;
>> 如果属主原本有执行权限,则显示为小写s;
>> 如果属主原本没有执行权限,则显示为大写S;
3、SGID
SGID的功用:
当目录的属组有写权限,且有SGID权限时,以属组身份在此目录中新建的文件或目录的属组不是用户的基本组,而是此目录的属组;
管理文件的SGID权限:
chmod g+|-s FILE …
SGID的展示位置:属组的执行权限位;
>> 如果属组原本有执行权限,则显示为小写s;
>> 如果属组原本没有执行权限,则显示为大写S;
4、STICKY
STICKY的功用:
对于属组或全局可写的目录,组内成员或系统上的用户都能在此目录上新建文件或删除所有的已有文件;
如果为此目录设置STICKY权限,则用户能创建新文件、及只能删除自己的文件;
管理文件的STICKY权限:
chmod o+|-t FILE …
STICKY的展示位置:其他用户的执行权限位;
>> 如果其他用户原本有执行权限,则显示为小写t;
>> 如果其他用户原本没有执行权限,则显示为大写T;
系统上的/tmp和/var/tmp默认带有STICKY权限;
===============
管理特殊权限的另一种方法:跟(ugo类似)
4 : 2 : 1
SUID:SGID:STICKY
chmod 1664 表示设置STICKY权限位,ugo的权限分别为:rw,rw,r;
chmod 2771 表示设置SGID权限位,ugo权限分别为:rwx,rwx,r;
chmod 6777 表示设置SUID,SGID权限位,ugo权限分别为:rwx,rwx,rwx;
5、facl : file access control lists (文件访问控制列表)
facl 是文件的额外赋权机制:
在原来的ugo之外,让文件或目录的属主(特指普通用户,root用户的文件或目录不增加赋权)赋权给另外的一些用户;
查看文件或目录的facl权限:
~]# getfacl FILENAME ;
设置文件或目录的facl权限:可以给用户或组赋权;
~]# setfacl -m u:USERNAME:MODE FILENAME …
~]# setfacl -m g:GROUPNAME:MODE FILENAME …
撤销赋权:
~]# setfacl -x u:USERNAME FILENAME …
~]# setfacl -x g:GROUPNAME FILENAME …
facl举例说明:
[user1@localhost test]$ ll total 0 -rw-r--r-- 1 user1 user1 0 May 1 20:41 a -rw-rw-rw- 1 bin bin 0 May 1 20:41 b.backup -r--r----- 1 root root 0 May 1 20:41 c -rwxrwxrwx 1 bin bin 0 May 1 20:41 d.backup -rwxrwxr-x 1 root root 0 May 1 20:41 e -rw-r--r-- 1 user2 user2 0 May 1 20:41 f -rw-r--r-- 1 user3 user3 0 May 1 22:13 g -rw-r--r-- 1 user3 user3 0 May 1 22:13 h [user1@localhost test]$ [user1@localhost test]$ whoami user1 [user1@localhost test]$ [user1@localhost test]$ echo 111 >> f 默认情况下,user1对 f,g 文件是没有写权限的; -bash: f: Permission denied [user1@localhost test]$ echo 111 >> g -bash: g: Permission denied [user1@localhost test]$ user2用户(f文件的属主)对文件设置facl权限:user1用户对文件f有读写权限;设置之后,user1就能对此文件做写操作; --------------------------------------------------------------------------------------------------- [user2@localhost test]$ getfacl f # file: f # owner: user2 # group: user2 user::rw- group::r-- other::r-- [user2@localhost test]$ setfacl -m u:user1:rw f [user2@localhost test]$ [user1@localhost test]$ echo 111 >> f [user1@localhost test]$ [user1@localhost test]$ more f 111 [user1@localhost test]$ user3用户(f文件的属主)对文件设置facl权限:user1组对文件g有读写权限;设置之后,user1组成员就能对此文件做写操作; ------------------------------------------------------------------------------------------------------- [user3@localhost test]$ [user3@localhost test]$ setfacl -m g:user1:rw g [user3@localhost test]$ [user1@localhost test]$ echo 111 >> g [user1@localhost test]$ [user1@localhost test]$ more g 111 [user1@localhost test]$ 对文件设置facl权限后,在ugo权限位后面会多一个'+'号显示,表示有对另外一些用户或组做了额外的赋权操作; ------------------------------------------------------------------------------------------- [root@localhost test]# [root@localhost test]# ll total 12 -rw-r--r-- 1 user1 user1 0 May 1 20:41 a -rw-rw-rw- 1 bin bin 0 May 1 20:41 b.backup -r--r----- 1 root root 0 May 1 20:41 c -rwxrwxrwx 1 bin bin 0 May 1 20:41 d.backup -rwxrwxr-x 1 root root 0 May 1 20:41 e -rw-rw-r--+ 1 user2 user2 4 May 2 09:40 f -rw-rw-r--+ 1 user3 user3 4 May 2 09:42 g -rw-r--r-- 1 user3 user3 9 May 2 09:54 h [root@localhost test]#
如果设置了facl权限,则权限的应用顺序为:
属主 > facl 定义的 u 权限 > 属组 > facl定义的 g 权限 > 其他用户的权限;