Linux 特殊权限及 facl 扩展
Linux系统上的特殊权限
安全上下文:
1、进程以某用户的身份运行; 进程是发起此进程用户的代理,因此以此用户的身份和权限完成所有操作;
2、权限匹配模型:
- (1) 判断进程的属主,是否为被访问的文件属主;如果是,则应用属主的权限;否则进入第2步;
- (2) 判断进程的属主,是否属于被访问的文件属组;如果是,则应用属组的权限;否则进入第3步;
- (3) 应用other的权限;
特殊权限包括:SUID, SGID, STICKY
SUID:
- 默认情况下:用户发起的进程,进程的属主是其发起者;因此,其以发起者的身份在运行;
- SUID的功用:用户运行某程序时,如果此程序拥有SUID权限,那么程序运行为进程时,进程的属主不是发起者,而程序文件自己的属主;
管理文件的SUID权限:
# 赋予SUID的权限 chmod u+s FILE... # 收回 SUID的权限 chmod u-s FILE...
展示位置:属主的执行权限位
如果属主原本有执行权限,显示为小写s;
否则,显示为大写S;
SGID:
功用:当目录属组有写权限,且有SGID权限时,那么所有属于此目录的属组,且以属组身份在此目录中新建文件或目录时,新文件的属组不是用户的基本组,而是此目录的属组;
管理文件的SGID权限:
# 赋予SUID 的权限 chmod g+s FILE... # 收回SUID 的权限 chmod g+|-s FILE...
展示位置:属组的执行权限位
如果属组原本有执行权限,显示为小写s;
否则,显示为大写S;
Sticky:
功用:对于属组或全局可写的目录,组内的所有用户或系统上的所有用户对在此目录中都能创建新文件或删除所有的已有文件;如果为此类目录设置Sticky权限,则每个用户能创建新文件,且只能删除自己的文件;
管理文件的Sticky权限:
# 赋予 Sticky 权限 chmod o+|-t FILE... # 收回 Sticky 权限 chmod o+|-t FILE...
展示位置:其它用户的执行权限位
如果其它用户原本有执行权限,显示为小写t;
否则,显示为大写T;
系统上的/tmp和/var/tmp目录默认均有sticky权限;
管理特殊权限的另一方式:
suid sgid sticy 八进制权限
- 0 0 0 0
- 0 0 1 1
- 0 1 0 2
- 0 1 1 3
- 1 0 0 4
- 1 0 1 5
- 1 1 0 6
- 1 1 1 7
基于八进制方式赋权时,可于默认的三位八进制数字左侧再加一位八进制数字;
例如:
chmod 1777
facl (文件访问控制列表)
文件的额外赋权机制:
在原来的u,g,o之外,另一层让普通用户能控制赋权给另外的用户或组的赋权机制;
getfacl命令:
- getfacl FILE...
user:USERNAME:MODE
group:GROUPNAME:MODE
getfacl zhang/
setfacl命令:
赋权给用户:
- setfacl -m u:USERNAME:MODE FILE...
赋权级组:
setfacl -m g:GROUPNAME:MODE FILE...
给 zhang 目录 添加读写的权限的docker组
setfacl -m g:docker:rw zhang/
撤销赋权:
- setfacl -x u:USERNAME FILE...
- setfacl -x g:GROUPNAME FILE...
对于目录 zhang 收回 docker 组的权限
setfacl -x g:docker zhang/