7.2 文件的特殊权限:suid sgid sticky和文件扩展权限ACL

其实文件与目录设置不止这些,还有所谓的特殊权限。由于特殊权限会拥有一些“特权”.
特殊权限:


7.2.1  文件的特殊权限:suid sgid sticky

1、SUID(set uid设置用户ID):限定:只能设置在二进制可执行程序上面。对目录设置无效
功能:程序运行时的权限从执行者变更成程序所有者的权限


2、SGID:限定:既可以给二进制可执行程序设置,也可以对目录设置
功能:在设置了SGID权限的目录下建立文件时,新创建的文件的所属组会,继承上级目录的所属组


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


这3个特殊权限对应的数值为
SUID    SGID    Stickybit
u+s或u=4    g+s或g=2    o+t或o=1
SUID属性一般用在可执行文件上,当用户执行该文件时,会临时拥有该执行文件的所有者权限。使用”ls -l” 或者”ll” 命令浏览文件时,如果可执行文件所有者权限的第三位是一个小写的”s”,就表明该执行文件拥有SUID属性。比如/usr/bin/passwd文件
 
互动: 普通用户mk,没有对shadow文件写入的权限, 但是mk用户使用passwd修改自己密码时,可以修改shadow文件中的内容,这是什么原因?

[root@xuegod63 ~]# ll /etc/shadow
----------. 1 root root 1179 9月  19 2017 /etc/shadow
[root@xuegod63 ~]# su - 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用户,所以可以修改成功。

例2:

[root@xuegod63 ~]# useradd mk
[root@xuegod63 ~]# su - mk
[root@xuegod63 ~]$less /etc/shadow  #看不到内容
[root@xuegod63 ~]# su - root
[root@xuegod63 ~]# chmod u+s /usr/bin/less  #切换到root,给一个suid权限
[root@xuegod63 ~]# su - mk
[mk@xuegod63 ~]$ less /etc/shadow  #看到

查看u+s后的效果:

[root@xuegod63 ~]# ll /usr/bin/less
-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

SGID:
限定:既可以给二进制可执行程序设置,也可以给目录设置。
功能:在设置了SGID权限的目录下建立文件时,新创建的文件的所属组会继承上级目录的权限。

[root@xuegod63 ~]# mkdir test
[root@xuegod63 ~]# ll -d test
drwxr-xr-x 2 root root 4096 Jan 24 20:14 test
[root@xuegod63 ~]# chmod g+s test
[root@xuegod63 ~]# !ll
ll -d test
drwxr-sr-x 2 root root 4096 Jan 24 20:14 test

测试:sgid效果

[root@xuegod63 ~]# chown :bin test/
[root@xuegod63 ~]# touch test/a.txt
[root@xuegod63 ~]# ll !$
ll test/a.txt
-rw-r--r-- 1 root bin 0 Jan 24 20:15 test/a.txt

Stickybit
限定:只作用于目录
功能:目录下创建的文件只有root、文件创建者、目录所有者才能删除。
例: 系统中的tmp目录就是这样

[root@xuegod63 ~]# ll -d /tmp/
drwxrwxrwt. 11 root root 4096 Jan 24 19:41 /tmp/

用法:
chmod o+t /tmp/test/


7.2.1  文件扩展权限ACL

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

[root@xuegod63 ~]# touch /tmp/a.txt
[root@xuegod63 ~]# getfacl  /tmp/a.txt
getfacl: Removing leading '/' from absolute path names
# file: tmp/a.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--

#setfacl -m u:mk:rwx   /tmp/a.txt     u : 设置某个用户拥有的权限

[root@xuegod63 ~]# getfacl  /tmp/a.txt
getfacl: Removing leading '/' from absolute path names
...
user::rw-
user:mk:rwx
[mk@xuegod63 ~]$ vim /tmp/a.txt 
[mk@xuegod63 ~]$ ll /tmp/a.txt 
-rw-rwxr--+ 1 root root 8 5月   8 22:42 /tmp/a.txt

例2: 给目录加扩展权限

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

#setfacl -m d:u:mk:rwx    /tmp/test   # -d  default    设置默认acl,对目录有效,此目录下新建的目录或文件都继承此acl权限
例:测试一下 -d 参数:

[root@xuegod63 ~]# mkdir /tmp/test 
[root@xuegod63 ~]# setfacl -m d:u:mk:rwx    /tmp/test 
[root@xuegod63 ~]# getfacl  /tmp/test/
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
[root@xuegod63 ~]# mkdir /tmp/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
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

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

[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权限

 

上一篇:Centos7.5-Linux计划任务与日志的管理


下一篇:linux学习笔记整理(四)