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

 

posted @ 2022-11-09 17:22  战斗小人  阅读(199)  评论(0编辑  收藏  举报