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