Linux基础10 特殊权限suid, sgid, sbit; 权限属性lsattr, chattr; 进程掩码umask, 访问控制列表 ACL
一.特殊权限:
1.suid(4000)
前提:进程有属主和属组;文件有属主和属组
任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组
进程访问文件时的权限,取决于进程的发起者
二进制的可执行文件上SUID权限功能:
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属主为原程序文件的属主
SUID只对二进制可执行程序有效
SUID设置在目录上无意义
setuid 使用该命令相当于这个命令的所有者
u+s
SetUID(suid):会在属主权限位的执行权限上写个s
如果该属主权限位上有执行权限,则:s (小写)
如果该属主权限位上没有执行权限,则:S (大写)
授权方式:
chmod u+s filename chmod 4755 filename # 相当于suid权限再加上755权限
SetUID总结:
1.让普通用户对可执行的二进制文件,临时拥有二进制文件的属主权限
2.如果设置的二进制文件没有执行权限,那么suid的权限显示就是S
3.特殊权限suid仅对二进制可执行程序有效,其他文件或目录则无效
注意:suid极其危险,不信可以尝试对vim或者rm命令进行设定suid
2.sgid(2000)
setgid 在创建新的文件或目录时,属组默认属于设置的属组
g+s
[root@oldboyedu ~]# ll /bin/write -rwxr-sr-x. 1 root tty 19624 Oct 31 2018 /bin/write
如果该属组权限位上有执行权限,则:s
如果该属组权限位上没有执行权限,则:S
[root@db04 ~]# chmod 2755 /tmp/test/ [root@db04 ~]# chmod g+s /tmp/test/
SetGID的作用
1.针对用户组权限位修改,用户创建的目录或文件所属组和该目录的所属组一致。
2.当某个目录设置了sgid后,在该目录中新建的文件不在是创建该文件的默认所属组
3.使用sgid可以使得多个用户之间共享一个目录的所有文件变得简单。
3.sbit
具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
在目录设置Sticky 位,只有文件的所有者或 root 可以删除该文件
sticky 设置在文件上无意义
stick 粘滞位t,所有用户只能管理自己文件
o+t
粘滞位:
[root@oldboyedu ~]# ll -d /tmp/ # 如果一个目录权限是777,就是绿色(如果有粘滞位,字变为黑色) drwxrwxrwt. 8 root root 105 Jul 2 10:15 /tmp/
如果该其他用户权限位上有执行权限,则:t
如果该其它用户权限位上没有执行权限,则:T
授权方式:
[root@db04 ~]# chmod 1755 /opt [root@db04 ~]# chmod o+t /opt
sticky(SI TI KI)粘滞,目前只对目录有效,作用如下:
普通用户对该目录拥有w和x权限,即普通用户可以在此目录中拥有写入权限,如果没有粘滞位,那么普通用户拥有w权限,就可以删除此目录下的所有文件,包括其他用户建立的文件。但是一旦被赋予了粘滞位,除了root可以删除所有文件,普通用户就算有w权限也只能删除自己建立的文件,而不能删除其他用户建立的文件。
系统中存在的/tmp目录是经典的粘滞位目录,谁都有写权限,因此安全成问题,常常是木马第一手跳板。
特殊权限总结:
1.SUID
主要是对命令,或者二进制文件,以该二进制文件的属主权限来执行该文件 命令:passwd
2.SGID
主要是针对目录进行授权,共享目录
3.SBIT
粘滞位,即便是该目录拥有w权限,但是除了root用户,其他用户只能对自己的文件进行删除、移动操作
一个普通用户:zls 属于 oldboyedu这个组
一个文件权限:rwxrw-r-x root.oldboyedu filename1
r:读 4
w:写 2
x:执行 1
suid:4000
sgid:2000
t:1000
二.Linux权限属性chattr概述:凌驾于r w x suid sgid t 之上的权限
lsattr:
查看特殊权限
lasttr filename
chattr:
设置特殊权限
i:锁定文件,不能编辑,不能修改,不能删除,不能移动,可以cp, 可以看, 可以执行
a:仅可以追加文件,不能编辑,不能删除,不能移动,可以执行
[root@ubuntu2204 0508]# chattr +i a.txt #设置不可删除 #查看特殊属性 [root@ubuntu2204 0508]# lsattr a.txt ----i---------e------- a.txt # i 是手动设置的, e是文件系统自带的, [root@ubuntu2204 0508]# rm -rf a.txt rm: cannot remove 'a.txt': Operation not permitted #可复制(复制出来的文件可以正常操作) [root@ubuntu2204 0508]# cp a.txt b.txt #+a一般用于日志文件 #可以追加,但不能覆盖,不可删,不可移动 [root@ubuntu2204 0508]# chattr +a a.txt
访问控制列表 ACL
ACL权限功能
rwx 权限体系中,仅仅只能将用户分成三种角色,如果要对单独用户设置额外的权限,则无法完成;
而ACL可以单独对指定的用户设定各不相同的权限;提供颗粒度更细的权限控制;
CentOS7 默认创建的xfs和ext4文件系统具有ACL功能
CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加
ACL生效顺序:
所有者,自定义用户,所属组,自定义组,其他人
ACL相关命令
setfacl 可设置ACL权限
getfacl 可查看设置的ACL权限
#安装acl [root@ubuntu ~]#apt install acl setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ... #常用选项 -m|--modify=acl #修改acl权限 -M|--modify-file=file #从文件读取规则 -x|--remove=acl #删除文件acl 权限 -X|--remove-file=file #从文件读取规则 -b|--remove-all #删除文件所有acl权限 -k|--remove-default #删除默认acl规则 --set=acl #用新规则替换旧规则,会删除原有ACL项,用新的替代,一定要包含 UGO的设置,不能象 -m一样只有 ACL --set-file=file #从文件读取新规则 --mask #重新计算mask值 -n|--no-mask #不重新计算mask值 -d|--default #在目录上设置默认acl -R|--recursive #递归执行 -L|--logical #将acl 应用在软链接指向的目标文件上,与-R一起使用 -P|--physical #将acl 不应用在软链接指向的目标文件上,与-R一起使用
[root@ubuntu2204 tmp]# ll f1 -rw-r--r-- 1 root root 5 May 9 23:22 f1 [root@ubuntu2204 tmp]# su - tom -c "cat /tmp/f1" abcd #无 acl 设置 [root@ubuntu2204 tmp]# getfacl f1 # file: f1 # owner: root # group: root user::rw-
group::r-- other::r-- #other 用户可读 [root@ubuntu2204 tmp]# su - tom -c "cat /tmp/f1" abcd #设置 tom 无任何权限 [root@ubuntu2204 tmp]# setfacl -m u:tom:- f1 [root@ubuntu2204 tmp]# getfacl f1 # file: f1 # owner: root # group: root user::rw-
user:tom:--- group::r-- mask::r-- #mask其实是所有自定义人和组权限的总和 other::r-- #查看文件,多了一个小 + [root@ubuntu2204 tmp]# ll f1 -rw-r--r--+ 1 root root 5 May 9 23:22 f1 #tom 己经不可读 [root@ubuntu2204 tmp]# su - tom -c "cat /tmp/f1" cat: /tmp/f1: Permission denied #其它other可读 [root@ubuntu2204 tmp]# su - jose -c "cat /tmp/f1" abcd #移除ACL权限 [root@ubuntu2204 tmp]# setfacl -x u:mage f1
mask 权限
- mask只影响除所有者和other的之外的人和组的最大权限
- mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)
- 用户或组的设置必须存在于mask权限设定范围内才会生效
setfacl -m mask::rx file
对于脚本程序来讲,必须先要有读权限,才能执行。
三.Linux进程掩码umask
查看当前系统的umask:默认是0022
作用:创建目录或者文件时,设置默认权限
[root@oldboyedu ~]# umask 0022
目录:0777-0022=0755 # 目录权限为0777-umask的值
0777-0023=0754
文件:0666-0022=0644 # 文件权限为0666-umask的值(注:文件算下来的值哪一位是奇数,就在哪一位上加一,特殊权限位除外)
umask=0024
目录:0777-0024=0753
文件:0666-0024=0642
umask=0023
目录:0777-0023=0754
文件:0666-0023=064(3+1)# 文件中的奇数位都需要+1
umask=051
目录:0777-0051=0726
文件:0666-0051=06(1+1)(5+1)
[root@oldboyedu ~]# umask 0775 # 修改umask,输入775也行,默认不设置特殊权限位,这样设置是临时的,重启恢复默认值,永久修改改配置文件 [root@oldboyedu ~]# mkdir zls8 0002 [root@oldboyedu ~]# touch oldboy8 0-1-11 # -1是奇数所以+1 0002 [root@oldboyedu ~]# umask 0657 [root@oldboyedu ~]# mkdir zls9 0120 [root@oldboyedu ~]# touch oldboy9 0020