1.ACL权限
1.1ACL概述
ACL概述: ACL是用于解决对文件身份不足的问题
1.2开启ACL
dumpe2fs -h /dev/sda3
#dumpe2fs命令是查询指定分区详细文件系统信息的命令
选项:
-h: 仅显示超级块中信息, 而不显示磁盘块组的详细信息
如果没有开启, 手工开启分区的ACL权限:
mount -o remount, acl /
也可以通过修改/etc/fstab文件, 永久开启ACL权限
vim /etc/fstab
UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defaults, acl
mount -o remount /
1.3ACL基本命令
getfacl 文件名: 查询文件的ACL权限
setfacl 选项 文件名: 设定ACL权限
选项:
-m: 设定ACL权限
-b: 删除ACL权限
-x:用户 删除单个用户的ACL权限
setfacl -m u:用户名:权限 文件名
setfacl -m g:组名:权限 文件名
setfacl -m d:u:用户名:权限 -R 目录: ACL默认权限, 只对以后新建的文件生效
1.4最大有效权限mask
setfacl -m m:rx 文件/目录
1.5删除ACL权限
setfacl -x u:用户名 文件或目录: 删除文件或目录的ACL权限
setfacl -b 目录或文件: 删除文件的所有ACL权限
2.sudo
sudo: 给普通用户赋予部分管理员权限
在/usr/sbin/下的命令只有超级用户才能使用, 我们使用这个命令来使普通用户执行部分超级用户才能执行的命令
2.1root身份
visudo赋予普通用户权限命令, 命令执行后和vi一样使用
root ALL=(ALL) ALL
#用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
# %where ALL=(ALL) ALL
#%组名 被管理主机的地址=(可使用身份) 授权命令(绝对路径)
- 用户名/组名: 代表root给哪个用户或用户组赋予命令, 注意组名前加"%"
- 用户可以用指定的命令管理指定IP地址的服务器. 如果写ALL, 代表可以管理任何主机; 如果写固定的IP, 代表用户可以管理指定IP地址的服务器(这个IP地址表示你可以管理哪个主机的IP地址, 只看查看man 5 sudoers
- 可使用身份: 就是把来源用户切换成什么身份使用. (ALL)代表可以切换成任意身份
- 授权命令: 代表root把什么命令授权给普通用户. 默认时ALL代表任何命令. 注意命令写成绝对路径
2.2举例
1)授权user1可以重启服务器, 则root用户的操作是:
visudo 编辑相关文件
user1 ALL=(ALL) /sbin/shutdown -r now
sudo -l 查看可用的授权
2)授权user1用户可以添加其他普通用户
visudo 编辑相应的文件
user1 ALL=(ALL) /usr/bin/useradd
user1 ALL=(ALL) /usr/bin/passwd [A-Za-z]*, !/user/bin/passwd "", !/usr/bin/passwd root
3.文件特殊权限SetUID, SetGID, Sticky BIT
3.1SetUID
1)SetUID是什么
SetUID的功能可以这样理解:
- 只有可以执行二进制程序逞能设定SUID权限
- 命令执行者要对程序拥有x(执行)权限
- 命令执行者在执行该程序时获得该程序文件属主的身份(其他用户在执行此文件时, 可以以文件所有者的身份进行执行)
- SetUID权限只在程序执行过程中生效, 当程序执行结束身份失效
2)举例
/usr/bin/passwd命令拥有特殊权限SetUID, 也就是属主的权限位的执行权限上是s. 可以这样这样理解它: 当一个具有执行权限的文件设置SetUID权限后, 用户执行这个文件时将以文件所有者的身份执行. /usr/bin/passwd命令就具有SetUID权限, 所有者为root. 当普通用户使用passwd更改自己密码的时候, 那一瞬间就能以超级用户的身份进行执行, 并修改相应的文件(如果没有SetUID的权限, 用户无法修改文件, 从而无法修改自身的密码), 当命令执行结束后, 身份也会随之消失
3)危险的SetUID
如果我们将/usr/bin/vim中的文件修改成SetUID, 那么其他用户都能修改任何文件, 这是很危险的
4)几点注意事项
- 因为SetUID能让其他用户以属主(root)的身份执行此文件, 所以我们对它进行管理, 防止滥用. 可以对系统中默认的SetUID权限的文件做一个列表, 定期检查是否有新的文件有此权限, 从而防止滥用
- 如果文件没有执行权限, 我们"chmod u+s 文件名", 我们会发现权限模式是"rwSr--r--"是大S, 是不能以属主的身份执行的
- SetUID只能针对文件
3.2SetGID
1)针对文件的作用
- 只有执行二进制程序才能设置SetGID权限
- 命令执行者要对该程序拥有x权限
- 命令执行在执行程序的时候, 组身份升级为该文件的属组
- SetGID权限同样只能在该程序执行过程中有效
当普通用户(如user1)执行locate命令时, 会发生如下事情:
- /usr/bin/locate是可执行二进制程序, 可以赋予SetGID
- 执行用户需要对它有执行的权限
- 执行命令时, 其他用户的组身份会升级为slocate, 并去/var/lib/mlocate/mlocate.db文件中查找相应的信息
- 命令结束后, 组身份又会变为有效组的身份
2)针对目录的作用
- 普通用户对此目录拥有rx权限, 才能进入此目录
- 普通用户在此目录中的有效组会变成此目录的所属组
- 若普通用户对此目录拥有w权限时, 新建的文件的默认属组是这个目录的属组
3.3文件特殊权限之Sticky BIT
Sticky BIT粘着位, 也称为SBIT. 这个只能针对目录
- 目前只针对目录有效
- 普通用户对该目录拥有w和x权限
- 普通用户只能针对这个目录中自己创建的文件才有删除权力
举例: 比如班级的老师创建了一个目录/test, 需要全班的同学(是一组)在这个目录中进行提交, 此时我们只能提交或修改自己的作业, 不能删除其他人的作业
3.4设定文件特殊权限
- 4代表SUID
- 2代表SGID
- 1代表SBIT
4.文件系统属性chattr权限
4.1命令格式
chattr [+-=] [选项] 文件或目录名
选项:
+: 增加权限
-: 删除权限
=: 赋予权限
i: 如果对文件设置i属性, 那么不允许对文件进行删除, 改名, 也不能添加和修改数据; 如果对目录设置i属性, 那么只能修改目录下文件数据, 但不允许建立和删除文件
a: 如果对文件设置a属性, 那么只能在文件中增加数据, 但是不能删除也不能修改数据; 如果对目录设置a属性, 那么值允许在目录中建立和修改文件, 但是不允许删除
e: Linux中绝大多数文件都默认拥有e属性. 表示该文件是使用ext文件系统进行储存的, 而且不能使用"chattr -e"命令取消e属性
4.2查看文件系统属性lsattr
lsattr 选项 文件名
[选项]
-a: 显示所有文件和目录
-d: 如果是目录, 仅列出目录本身的性质, 而不是子文件的
4.3举例
i属性
a属性