权限管理
环境:CentOS 8
文章目录
ACL权限
- 可读(r):读取文件
- 可写(w):增删改编辑
- 可执行(x):执行一个脚本
- umask
- 用于解决用户对文件身份不足的问题的
开启ACL
//临时生效acl
[root@iZbp10cdilkxcswm4l893lZ ~]# lsblk //查看磁盘
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 40G 0 disk
└─vda1 253:1 0 40G 0 part /
[root@iZbp10cdilkxcswm4l893lZ ~]# dumpe2fs -h /dev/vda1 //dumpe2fs命令是查询指定分区详细文件系统信息的命令
……………………省略部分…………………………
Default mount options: user_xattr acl
……………………省略部分…………………………
[root@iZbp10cdilkxcswm4l893lZ ~]# mount -o remount.acl / //重新挂载根分区,并挂载加入 acl权限
mount: /dev/vda1 is already mounted or / busy
/dev/vda1 is already mounted on /
//-永久挂载生效acl
[root@iZbp10cdilkxcswm4l893lZ ~]# vim /etc/fstab //进入配置文件 在defaults后,加acl
UUID=1114fe9e-2309-4580-b183-d778e6d97397 / ext4 defaults,acl 1 1
[root@iZbp10cdilkxcswm4l893lZ ~]# mount -o remout / //重新挂载文件系统或重启动系统,使修改生效
mount: /dev/vda1 is already mounted or / busy
/dev/vda1 is already mounted on /
ACL基本配置
getfacl
[root@iZbp10cdilkxcswm4l893lZ ~]# getfacl /tmp //查看/tmp 文件的ACL权限
getfacl: Removing leading '/' from absolute path names
# file: tmp
# owner: root
# group: root
# flags: --t
user::rwx
group::rwx
other::rwx
setfacl
#语法:
setfacl -m u:用户名:权限 文件名 //给用户添加权限
setfacl -m g:组名:权限 文件名 //给组添加权限
#选项
-m //设定ACL权限
-b //删除ACL权限
-x(小):用户 //删除单个用户的ACL权限
#举例
[root@iZbp10cdilkxcswm4l893lZ ~]# setfacl -m u:t1:5 /tmp //表示将/tmp目录给t1用户设置权限为5
[root@iZbp10cdilkxcswm4l893lZ ~]# getfacl /tmp //查看/tmp目录下的权限
getfacl: Removing leading '/' from absolute path names
# file: tmp
# owner: root
# group: root
# flags: --t
user::rwx
user:t1:r-x //此时已列出 用户t1 的权限
group::rwx
mask::rwx
other::rwx
//setfacl的递归与默认(若要对目录赋予相关的权限需要将递归和默认都加上)
//递归
[root@iZbp10cdilkxcswm4l893lZ ~]# setfacl -m u:t1:rx -R /tmp //-R为递归只能赋予目录 对先有的文件生效 t1为用户
//默认权限
[root@iZbp10cdilkxcswm4l893lZ ~]# setfacl -m d:u:t1:rwx -R /tmp //d 为默认权限,对/tmp目录下创建的新文件生效
最大有效权限mask
- 就是对用户或来对比mask权限的交集. 默认最大权限为rwx
[root@iZbp10cdilkxcswm4l893lZ ~]# setfacl -m m:rx /tmp //修改/tmp目录的mask权限为 rx
[root@iZbp10cdilkxcswm4l893lZ ~]# getfacl /tmp
getfacl: Removing leading '/' from absolute path names
# file: tmp
# owner: root
# group: root
# flags: --t
user::rwx
user:t1:r-x
group::rwx //effective:r-x //交集所以用户组
mask::r-x //此处为修改后的mask权限
删除ACL权限
-b //删除ACL权限
-x(小):用户 //删除单个用户的ACL权限
[root@iZbp10cdilkxcswm4l893lZ ~]# setfacl -x u:t1 /tmp //删除指定用户和用户组的ACL权限
[root@iZbp10cdilkxcswm4l893lZ ~]# getfacl /tmp //查看之前的赋予/tmp目录的权限
getfacl: Removing leading '/' from absolute path names
# file: tmp
# owner: root
# group: root
# flags: --t
user::rwx
user:t1:rwx
user:t2:rwx
group::rwx
mask::rwx
other::rwx
default:user::rwx
default:user:t1:rwx
default:group::rwx
default:mask::rwx
default:other::rwx
[root@iZbp10cdilkxcswm4l893lZ ~]# setfacl -b /tmp //删除/tmp目录下的所有权限
[root@iZbp10cdilkxcswm4l893lZ ~]# getfacl /tmp //和上面对比发现所有权限被删除了
getfacl: Removing leading '/' from absolute path names
# file: tmp
# owner: root
# group: root
# flags: --t
user::rwx
group::rwx
other::rwx
sudo权限
- 给普通用户授权部分可用命令
[root@iZbp10cdilkxcswm4l893lZ ~]# visudo //进入sudo配置文件下
100 root ALL=(ALL) ALL
101 test1 ALL=(ALL) /sbin/shutdown -r now //表示赋予test1 用户 授权命令必须写绝对路径
//如果赋予组用户权限 组名前面加 “ % ”
[test1@iZbp10cdilkxcswm4l893lZ root]$ sudo -l //查看root赋予test1哪些权限
[sudo] password for test1: //输入密码
Matching Defaults entries for test1 on iZbp10cdilkxcswm4l893lZ:
ser test1 may run the following commands on iZbp10cdilkxcswm4l893lZ:
(ALL) /sbin/shutdown -r now //赋予权限如下
[root@iZbp10cdilkxcswm4l893lZ ~]# su test1 //切换普通用户进行测试
[test1@iZbp10cdilkxcswm4l893lZ root]$ sudo shutdown -r now //要求你执行此命令要输入用户密码,之后就执行了此命令
//举例子:----------给普通用户 paaswd 权限可以修改root密码? 和给普通用户不能修改root密码-------------
可以修改root密码
[root@iZbp10cdilkxcswm4l893lZ ~]# visudo
test1 ALL=(ALL) /usr/bin/passwd //此项能修改root密码建议不要使用
//-----------------------------------------------------------------------------
[root@iZbp10cdilkxcswm4l893lZ ~]# visudo
test1 ALL=/usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd " " , !/usr/bin/passwd root //正则表达式来禁止普通用户修改root密码
[test1@iZbp10cdilkxcswm4l893lZ ~]$ sudo passwd root //切换到普通用户测试发现不能修改密码了
[sudo] password for test1:
Sorry, user test1 is not allowed to execute '/bin/passwd root' as root on iZbp10cdilkxcswm4l893lZ.
文件特殊权限 setUID
SetUID功能
- 只有可以执行的二进制程序才能设定SUID权限
- 命令执行者要对该程序拥有x(执行)权限
- 命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)
- SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
用法:
[root@iZbp10cdilkxcswm4l893lZ ~]# chmod u+s test //增加SetUID
[root@iZbp10cdilkxcswm4l893lZ ~]# chmod u-s test //删除SetUID
SetGID
针对文件的作用
SetGID针对文件生效
- 只有可执行的二进制程序才能设置SGID权限
- 命令执行者要对该程序拥有x(执行)权限
- 命令执行在执行程序的时候,组身份升级为该程序文件的属组
- SetGID权限同样只在该程序执行过程中有效
针对目录的作用
- 普通用户必须有对此目录拥有r和x权限,才能进入此目录
- 普通用户在此目录中的有效组会变成此目录的属组
- 若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组
文件特殊权限之Sticky BIT
粘着位(SBIT)只针对目录有效
- 粘着位针对目录有效
- 普通用户对该目录有w和x权限
- 如果没有粘着位,普通用户拥有w权限,可以删除此目录下所有文件,如果有黏着位,普通用户只能删除自己的创建的文件,不能删除其他人的文件
设定文件特殊权限
特殊权限表示
-
4表示 SUID
-
2表示SGID
-
1代表SBIT
[图]:赋予“ test ” 文件SBIT权限
设定文件系统属性chattr
语法:[root@localhost /]# chattr [+-=] [选项] 文件或目录名
选项 [+-=] 为增加、删除、等于某权限
i //对文件:不允许删除、改名、添加和修改数据 对目录:只能修改目录下文件的数据,不允许建立和删除文件
a //对文件 只能增加数据 其他不能 对目录 只允许修改和建立,不允许删除
e //Linux默认权限为e 表示该文件是使用ext文件系统进行存储的
查看文件系统属性lsattr
[root@localhost /]# lsattr -d test
----i-------------- test
选项
-a //显示所有文件和目录
-d //若目标是目录,仅列出目录本身的属性,而不是子文件的