这里有几个方面
- ACL权限
- 文件特殊权限
- 文件系统属性chattr权限
- 系统命名sudo权限
1 ACL权限
专门用于解决身份不足的问题,如所有者,所属组,其它人。这只有三个身份,对于实际复杂实际问题,是不够的。ACL权限可以对某个文件针对单个用户进行权限分配。但是ACL权限和分区有关,dumpe2fs -h /dev/sda3
可以查看sda3
这个分区是否支持ACL权限。如果这个命令输出中包含Default mount options: user_xattr acl
.说明分区支持ACL,分区默认都支持ACL。
如果分区不支持ACL的话,可以去开启它。有两种类型的命令
1 临时开启命令 如开启根目录:mount -o remount,acl /
,这个命令表示重新挂载根分区,并挂载加入ACL权限。
2 永久开启ACL权限。修改/etc/fstab
文件,这个文件是系统开机自动挂载文件,在其中的default后面加逗号和acl(如果写错系统会崩溃)
如:default,acl
可以通过getfacl
和setfacl
来查看和设置文件的acl权限。格式如下:
getfacl 文件名
setfacl 选项 文件名
- -m 设定ACL权限,如:
setfacl -m u:username:rw
表示给用户username设置读写权限。如果是setfacl -m g:groupname:rw
则表示给组groupname设置读写权限。如果是setfacl -m m:rw
表示给最大权限读和写。 - -x 删除指定ACL权限
- -b 删除所有ACL权限
- -d 设定默认acl权限,如
serfacl -m d:u:用户名:权限 文件名
,默认acl权限,那么父目录中所有的新建目录的子文件都会继承父目录的acl权限。 - -k 删除默认acl权限
- -R 递归设定acl权限
最大有效权限,mask是用来指定最大有效权限,如果给用户赋予了ACL权限,是需要和mask的权限相与,才能得到用户的真正的权限。
2 文件特殊权限
分为三个部分,SetUID,SetGID,Sticky BIT.如下面的命名:
$ ll /usr/bin/passwd -rws-xr-x. 1. root root 2323 Apr & 2020 /user/bin/passwd
SetUID、SetGID和Sticky BIT分别对应U,G,O的rws.
2.1 对于SetUID的功能,
- 只有可以执行的二进制程序才能设定SUID权限
- 命令执行者要对该程序拥有
x
(执行)权限 - 命令执行者在执行该程序时,获得该程序文件属主的身份(可以理解为在执行程序的过程中“灵魂附体”为该程序文件的属主)
- SetUID权限只在程序执行的过程中有效,即身份改变只有在程序执行的过程中。
passwd
命令拥有SetUID的 权限,所以普通用户可以修改自己的密码;cat没有SetUID权限,所以普通用户不能查看/etc/shadow
文件内容。
设定SetUID的方法
4代表SUID
,如chmod 4755 文件名
或者chmod u+s 文件名
,如果要取消SetUID,直接使用chmod 755 文件名
或者chmod u-s 文件名
即可。
2.2 对于SetGID的功能
对于目录的作用
- 普通用户必须对此目录拥有r和x权限,才能进入此目录。
- 普通用户在此目录中的有效组会变成此目录的属组
- 若普通用户对此目录拥有w权限,新建的文件的默认属组是这个目录的属组。(见b站的12分到13分钟视频)
对于文件的作用
- 只有可执行的二进制程序才能设置SGID权限
- 命令执行者要对该程序拥有x权限
- 命令执行在执行程序的时候,组身份升级为该程序的文件属组
- SetUID权限同样只在该程序执行过程中有效,即,组身份改变只有在程序执行过程中有效。
例子为下面的命令
ll /usr/bin/locate
-rwx--s--x 1 root slocate 2323232 8月 23 2020 /usr/bin/locate
2代表SGID
,如chmod 2755 文件名或者目录名
,也可以通过chomod g+s 目录名或者文件名
来给目录或者文件加SGID权限。
2.3 SBIT粘着为的作用
- 粘着位目前只对目录有效
- 普通用户首先应该对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限
- 如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件,一段赋予了粘着位,除了root用户可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件。
1代表SBIT
,如chmod 1644 目录名
或者chmod o+t 目录名
用来设置粘着位,只能root用户才能赋予此权限;chmod 777 目录名
或者chmod o-t 目录名
表示取消粘着位。
3 文件系统属性ahattr权限
chattr的命令格式为
chattr [-+=] [选项] 文件或者目录名
, +表示增加权限,- 表示删除权限,= 表示等于某权限。
选项包含
- i,如果文件设置i属性,那么不允许对文件进行删除,改名,也不能添加和修改数据;如果对目录设置i属性,那么只能修改目录下文件的数据,但不允许建立和删除文件,root用户也会被限制。
- a,如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除数据也不能修改数据;如果对目录设置a权限,那么只允许在目录中建立和修改文件,但是不允许删除。
查看文件系统属性
# lsattr 选项 文件名
,选项有
- -a,显示所有文件和目录
- -d,若目标是目录,仅列出目录本身的属性,而不是子文件的属性。
4 系统命令sudo权限
root把一部分本来只能有超级用户执行的命令赋予普通用户执行,sudo的操作对象是系统命令(/usr/sbin/目录下或者/sbin/目录下的命令)。
sudo的使用
使用命令visudo
,这个命令实际修改的是/etc/sudoers
文件,这个文件中的内容截取如下
# 下面表示:被赋予权限的用户名 被管理的主机的地址=(可使用身份) 授权的命令(需要绝对路径)
username ALL=(ALL) ALL
# 下面表示:被赋予权限的组名 被管理的主机的地址=(可使用身份) 授权的命令(需要绝对路径)
%groupname ALL=(ALL) ALL
# 下面是一个例子表示,管理员赋予用户sc在任何被访问ip主机上执行`/sbin/shutdown -r now`命令。
# 上面的命令写的越简单,sc的权限越大,如果写的具体,那么只能执行这个具体的命令。
sc ALL=/sbin/shutdown -r now