文件的特殊权限:SUID SGID sTicky 及文件扩展权限 ACL

7.2    文件的特殊权限:SUID SGID sTicky 及文件扩展权限 ACL 

其实文件不目录设置不止这些,还有所谓的特殊权限。由于特殊权限会拥有一些“特权”,以上描述了 umask 掩码的 3 位,实际上是 4 位,umask 掩码的第 1 位表示 SUID、SGID、sTicky  特殊权限。 

7.2.1    文件的特殊权限:SUID、SGID、sTicky 

SUID(set uid 设置用户 ID):限定:只能设置在二进制可执行程序上面。对目录设置无效。 

功能:程序运行时的权限从执行者变更成程序所有者的权限。 

SGID:限定:既可以给二进制可执行程序设置,也可以对目录设置。 

功能:在设置了 SGID 权限的目录下建立文件时,新创建的文件的所属组会继承上级目录的所属组。 

sTicky:粘滞位权限是针对目录的对文件无效,也叫防删除位。 

这 3 个特殊权限对应的数值为,如表  7-5  所示。 

SUID

SGID

Stickybit

u+s或u=4

g+s或g=2

o+t或o=1

表  7-5  特殊权限数值对照表 

1)   SUID :

SUID 属性一般用在可执行文件上,当用户执行该文件时,会临时拥有该执行文件的所有者权限。使用”ls  -l”  或者”ll”命令浏览文件时,如果可执行文件所有者权限的第三位是一个小写的”s”,就表明该执行文件拥有 SUID 属性,比如/usr/bin/passwd 文件,如图  7-3  所示。 

image.png

图  7-3  拥有 SUID 属性 

 注:赋予 SUID 权限后,该权限需占用所属主的 x 权限位,如果文件本身的所属主权限具有 x 权限时,那举将会显示为  s  ,如果没有 x 权限,则显示为  S 。 

互动:  普通用户 mk,没有对 shadow 文件写入的权限,  但是 mk 用户使用 passwd 修改自己密码时,可以修改 shadow 文件中的内容,这是什么原因? 

[root@xuegod63 ~]# ll /etc/shadow      #以长格式查看/etc/shadow,权限为 000。 

----------. 1 root root 1179 9 月    19 2017 /etc/shadow 

[root@xuegod63 ~]# su - mk       #切换 mk 普通用户登彔。 

上一次登彔:二  5 月    8 21:07:24 CST 2018pts/0  上 

[mk@xuegod63 ~]$ passwd         #修改密码。 

更改用户  mk  的密码  。 

为  mk  更改  STRESS  密码。 

(当前)UNIX  密码:123456      #输入当前用户密码。 

新的  密码:xuegod*666       #输入新密码。 

重新输入新的  密码:xuegod*666    #再次输入新密码。 

passwd:所有的身份验证令牌已经成功更新。 

[root@xuegod63 ~]# vim /etc/shadow    #查看 shadow 文件已经被 mk 用户修改成功。 

因为 mk 用户执行 passwd 命令时,权限会提升成 root 用户,所以可以修改成功。

 

例 7.11:赋值 SUID 权限 

[root@xuegod63 ~]# useradd mk    #创建 mk 普通用户,如有该用户则不需创建。 

[root@xuegod63 ~]# su - mk     #切换 mk 普通用户登彔。 

[root@xuegod63 ~]$ less /etc/shadow        #看不到内容。 

[root@xuegod63 ~]$ su - root      #切换到 root 用户。 

[root@xuegod63 ~]# chmod u+s /usr/bin/less      #给一个 suid 权限。 

[root@xuegod63 ~]# su - mk     #切换 mk 普通用户登彔。 

[mk@xuegod63 ~]$ less /etc/shadow     #使用 less 命令查看/etc/shadow 文件可以看到了。 

查看 u+s 后的效果: 

[root@xuegod63 ~]# ll /usr/bin/less          #以长格式查看/usr/bin/less 文件,权限为 rwsr-xr-x 

-rwsr-xr-x 1 root root 154536 Sep 26    2011 /usr/bin/less 

[root@xuegod63 ~]# ps -axu | grep less 

root          43407    0.0    0.0 110260      980 pts/0        S+      22:30      0:00 less /etc/shadow 

另外: 

[root@xuegod63 ~]# chmod 4755 /usr/bin/less    #等同于  chmod u+s /usr/bin/less 

2)   SGID: 

限定:既可以给二进制可执行程序设置,也可以给目录设置。 

功能:在设置了 SGID 权限的目录下建立文件时,新创建的文件的所属组会继承上级目录的权限。 

注:赋予 SGID 权限后,该权限需占用所属组的 x 权限位,如果文件本身的所属组权限具有 x 权限时,那举将会显示为  s  ,如果没有 x 权限,则显示为  S  。 

[root@xuegod63 ~]# mkdir test      #创建 test 目录。 

[root@xuegod63 ~]# ll -d test      #以长格式查看目录,权限为 rwxr-xr-x。 

drwxr-xr-x 2 root root 4096 Jan 24 20:14 test 

[root@xuegod63 ~]# chmod g+s test    #赋予 SGID 权限。 

[root@xuegod63 ~]# ll -d test      #以长格式查看目录,权限为 rwxr-sr-x  。 

drwxr-sr-x 2 root root 4096 Jan 24 20:14 test 

测试:sgid 效果。 

[root@xuegod63 ~]# chown :bin test/    #修改 test 目录属组为 bin 用户组。 

[root@xuegod63 ~]# touch test/a.txt    #在 test 目录创建 a.txt 文件。 

[root@xuegod63 ~]# ll !$        #以长格式查看文件,属组为 bin 用户组。 

ll test/a.txt 

-rw-r--r-- 1 root bin 0 Jan 24 20:15 test/a.txt 

3)   Stickybit 

限定:只作用于目录。 

功能:在一个公共目录,每个用户都可创建文件,但只能删除自己的文件,不能删除其他用户的文件。 

注:赋予 sTicky 权限后,该权限需占用其他用户的 x 权限位,如果目录本身的其他用户权限具有 x 权限时,那举将会显示为  t  ,如果没有 x 权限,则显示为  T。 

例 7.12:  系统中的 tmp 目录本身就具有 sTicky 权限。 

[root@xuegod63 ~]# ll -d /tmp/      #以长格式查看/tmp 目录,默认权限为 rwxrwxrwt 

drwxrwxrwt. 11 root root 4096 Jan 24 19:41 /tmp/ 

赋予 Stickybit 权限用法: 

[root@xuegod63 ~]# chmod o+t /tmp/test/   #赋予 Stickybit 权限。 

7.2.2    文件扩展权限 ACL 

扩展 ACL:access control list。 

     设置 FACL 相关命令: 

               setfacl  命令        用于设置 FACL 权限。 

               getfacl  命令        用于查看 FACL 权限。 

命令使用格式setfacl -m u:用户名称:权限  文件名称   #指定用户的权限。 

setfacl -m g:用户名称:权限  文件名称   #指定组的权限。 

setfacl -x u:用户名称  文件名称        #取消用户的权限。 

setfacl -x g:用户名称  文件名称       #取消组的权限。 

注意:setfacl 设定了权限时,是没有相关修改权限的参数,也就是说明权限设定后不支持修改或调整权限,但可以通过重新指定权限进行调整权限,例:指定了 rwx 权限时,想要去掉 x 权限,那就需要重新赋予 rw 即可。 

       setfacl  命令选项: 

               -m        设定权限(通常需要带上 u/g 标识指定权限)。 

                      u:USERNAME:PERM          # u 表示标识用户设定权限:指定用户名称:设定的权限,三者之间用:冒号分隔。 

                      g:GROUPNAME:PERM        # g 表示标识组设定权限:指定组的名称:设定的权限,三者之间用:冒号分隔。 

               -x         取消设定。 

d:  该参数不需要使用  -  指定,使用时加在 u:  或 d:  前面,针对目录时使用。 

getfacl 命令用于查看 facl 权限。 

命令使用格式:getfacl  文件名称 

例 7.13:设置用户 mk 对文件 a.txt 拥有的 rwx 权限  ,mk 不属于 a.txt 的所属主和组,mk 是 other。怎么做? 

[root@xuegod63 ~]# touch /tmp/a.txt    #创建 a.txt 文件。 

[root@xuegod63 ~]# getfacl /tmp/a.txt   #查看 a.txt 的 ACL 权限。 

getfacl: Removing leading '/' from absolute path names 

# file: tmp/a.txt    #文件名称。 

# owner: root      #所属主。 

# group: root      #所属组。 

user::rw-        #属主的权限。 

group::r--        #属组的权限。 

other::r--        #其他用户的权限。 

[root@xuegod63 ~]# setfacl -m u:mk:rwx /tmp/a.txt          #u:设置某个用户拥有的权限。 

[root@xuegod63 ~]# getfacl    /tmp/a.txt          #查看 a.txt 的 ACL 权限。 

getfacl: Removing leading '/' from absolute path names 

... 

user::rw- 

user:mk:rwx      #此时属主的权限中有 mk 用户了。

[root@xuegod63 ~]# su - mk     #切换 mk 用户登彔。 

[mk@xuegod63 ~]$ vim /tmp/a.txt      #尝试编辑 a.txt。 

[mk@xuegod63 ~]$ ll /tmp/a.txt      #以长格式查看,权限为 rw-rwxr--+。 

-rw-rwxr--+ 1 root root 8 5 月      8 22:42 /tmp/a.txt 

例 7.14:给目录加扩展权限。 

[root@xuegod63 ~]# mkdir /tmp/test   

[root@xuegod63 ~]# setfacl -m d:u:mk:rwx /tmp/test      # -d default  设置默认 acl,对目录有效,此目录下新建的目录或文件都继承此 acl 权限。 

例 7.15:测试一下  -d  参数: 

[root@xuegod63 ~]# mkdir /tmp/test   

[root@xuegod63 ~]# setfacl -m d:u:mk:rwx /tmp/test      #使用 d 参数。 

[root@xuegod63 ~]# getfacl /tmp/test/          #查看/tmp/test 目录 ACL。 

getfacl: Removing leading '/' from absolute path names 

# file: tmp/test/ 

# owner: root 

# group: root 

user::rwx 

group::r-x 

other::r-x 

default:user::rwx 

default:user:mk:rwx 

default:group::r-x 

default:mask::rwx 

default:other::r-x 

[root@xuegod63 ~]# touch /tmp/test/a.txt    #在 test 目录下创建 a.txt。 

[root@xuegod63 ~]# mkdir /tmp/test/data    #在 test 目录下创建 data 目录。 

[root@xuegod63 ~]# getfacl /tmp/test/a.txt        #因为-d 参数,所以 test 下所有创建的文。件和目录都继承了默认的 acl 权限。 

getfacl: Removing leading '/' from absolute path names 

# file: tmp/test/a.txt 

# owner: root 

# group: root 

user::rw- 

user:mk:rwx      #effective:rw- 

group::r-x     #effective:r-- 

mask::rw- 

other::r-- 

[root@xuegod63 ~]# getfacl /tmp/test/data   #查看 data 目录 ACL 权限。

getfacl: Removing leading '/' from absolute path names 

# file: tmp/test/data 

# owner: root 

# group: root 

user::rwx 

user:mk:rwx 

group::r-x 

mask::rwx 

other::r-x 

default:user::rwx 

default:user:mk:rwx 

default:group::r-x 

default:mask::rwx 

default:other::r-x 

例 7.16:给目录下所有文件都加扩展权限。 

[root@xuegod63 ~]# setfacl -R -m u:lee:rw- testdirectory/       #-R 一定要在-m 前面,表示目录下所有文件。 

[root@xuegod63 ~]# setfacl -x u:mk /tmp/a.txt                    #  去掉单个权限。 

[root@xuegod63 ~]# setfacl -b    /tmp/a.txt                            #  去掉所有 acl 权限。

版权声明:
作者:WaterBear
链接:https://l-t.top/1263.html
来源:雷霆运维
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>