linux中实现灵活的特殊权限管理ACL,以及ACL权限判断顺序!
为什么要使用ACL?在linux中,我们可以使用:”ll 文件名“来查看文件的权限。
[root@Centos6 ~]# ll 1.txt
---x-wxr-x. 1 zhangsan zhangsan 9 Jul 19 13:47 1.txt
[root@Centos6 ~]# getent group zhangsan
zhangsan:x:522:
[root@Centos6 ~]# chmod 770 1.txt
[root@Centos6 ~]# ll 1.txt
-rwxrwx---. 1 zhangsan zhangsan 9 Jul 19 13:47 1.txt
[root@Centos6 ~]#
我们可以看出对于1.txt这个文件只有owner:zhangsan以及zhangsan组里面的人可以访问该文件,其他人不能访问。如果这时有个普通用户李四想访问这个文件,我们有什么办法呢?
1:我们可以
[root@Centos6 ~]# chown lisi 1.txt
[root@Centos6 ~]# ll 1.txt
-rwxrwx---. 1 lisi zhangsan 9 Jul 19 13:47 1.txt
[root@Centos6 ~]#
改变1.txt的owner,使zhangsan变为李四,这样李四属于文件owner自然可以切换到lisi用户下来访问1.txt
缺点:改变太大,对于很多重要文件,不能直接改变owner.
2:我们可以
[root@Centos6 ~]# gpasswd -a lisi zhangsan
Adding user lisi to group zhangsan
[root@Centos6 ~]# getent group zhangsan
zhangsan:x:522:lisi
将李四以附加组方式加入zhangsan组中,这样李四属于文件group自然可以切换到lisi用户下来访问1.txt
缺点:李四这时候属于zhangsan组里面的人,不仅能查看1.txt,所有属于zhangsan组里的其他文件,李四都拥有其相同权利。
3:我们可以
[root@Centos6 ~]# chmod 777 1.txt
[root@Centos6 ~]# ll 1.txt
-rwxrwxrwx. 1 lisi zhangsan 9 Jul 19 13:47 1.txt
[root@Centos6 ~]#
改变1.txt的权限,使others都可以来访问这个文件,当然李四也可以。
缺点:任何人都可以拥有其other位的权利,重要文件毫无隐藏性。
4:我们可以
当1.txt为一个可执行的二进制文件时,我们也可以 chmod u+s ,使李四临时拥有张三(owner)的权利。
我们也可以chmod g+s 当对于一个可执行的二进制文件作用了sgid之后,任何人在执行该文件时,临时拥有其所有组的权限。这样,李四就临时属于张三组里面的人,可以对文件执行group的权利。
缺点:大部分文件都不是可执行的二进制文件。所以临时拥有其owner,或者group的权利也不可行。
所以最好的方法就是:我们可以让李四不属于任何一个组,只是以单用户的身份被赋予特定权限。这时我们就可以用ACL来帮助我们实现文件权限的灵活管理。
acl 开启acl的方式 centos7 默认支持acl centos6及之前,操作系统安装时所创建的文件系统默认支持acl,而操作安装之后使用mkfs格式化的文件系统默认未开启 acl,需要手工开启,方法如下: 第一种. tune2fs -o acl /dev/sda5 第二种. mount -o acl /dev/sda5 /app
最常用的有以下2个命令:
- getfacl: 获取文件或目录的ACL设置信息 命令: getfacl [-bkndRLP] { -m|-M|-x|-X ... } file ... 参数: -a , --access:显示文件或目录的访问控制列表 -d , --default:显示文件或目录的默认(缺省)的访问控制列表 -c , --omit-header:不显示默认的访问控制列表 -R , --recursive:操作递归到子目录
我们可以通过ACL来赋予李四r-x权利具体操作如下:
[root@Centos6 ~]# ll 1.txt
-rwxrwx---. 1 zhangsan zhangsan 9 Jul 19 13:47 1.txt
[root@Centos6 ~]# groups zhangsan
zhangsan : zhangsan
[root@Centos6 ~]# groups lisi
lisi : lisi
[root@Centos6 ~]#
1.txt的owner属于张三 group 属于张三组,且zhangsan组里只有张三,other位权限为空,
[lisi@Centos6 ~]$ ls /home/zhangsan/
ls: cannot open directory /home/zhangsan/: Permission denied
[lisi@Centos6 ~]$ exit
我们给李四加上ACL权限,
[zhangsan@Centos6 /home]$ setfacl -m u:lisi:rx /home/zhangsan/1.txt
[zhangsan@Centos6 ~]$ ll /home/zhangsan/
total 8
-rw-rwxr--+ 1 zhangsan zhangsan 0 Jul 18 12:10 1.txt
drwxrwxr-x. 2 zhangsan zhangsan 4096 Jul 18 13:13 qjc
[zhangsan@Centos6 ~]$
查看设置好的ACL
[zhangsan@Centos6 ~]$ getfacl /home/zhangsan/1.txt
getfacl: Removing leading '/' from absolute path names
# file: home/zhangsan/1.txt
# owner: zhangsan
# group: zhangsan
user::rw-
user:lisi:r-x
group::rw-
mask::rwx
other::r--
[zhangsan@Centos6 ~]$
退出切换lisi用户查看张三家目录中的1.txt,查看成功。
[lisi@Centos6 ~]$ cat /home//zhangsan/1.txt
ohello
[lisi@Centos6 ~]$
删除ACL进行验证
[zhangsan@Centos6 ~]$ setfacl -b /home/zhangsan/1.txt
[zhangsan@Centos6 ~]$ exit
logout
[root@Centos6 ~]# su - lisi
[lisi@Centos6 ~]$ cat /home/zhangsan/1.txt
cat: /home/zhangsan/1.txt: Permission denied
[lisi@Centos6 ~]$
验证成功。
接下来进行ACL的权限判断进行比较:
具体包括:user、ACL user、group、other
先来比较owner与ACL owner。
我们继续利用上面的例子,
[zhangsan@Centos6 ~]$ setfacl -m u:zhangsan:rx /home/zhangsan/1.txt
[zhangsan@Centos6 ~]$ ll /home/zhangsan/1.txt
----rwx---+ 1 zhangsan zhangsan 9 Jul 20 00:44 /home/zhangsan/1.txt
[zhangsan@Centos6 ~]$ getfacl /home/zhangsan/1.txt
getfacl: Removing leading '/' from absolute path names
# file: home/zhangsan/1.txt
# owner: zhangsan
# group: zhangsan
user::---
user:zhangsan:r-x
group::rwx
mask::rwx
other::---
[zhangsan@Centos6 ~]$ cat /home/zhangsan/1.txt
cat: /home/zhangsan/1.txt: Permission denied
[zhangsan@Centos6 ~]$
将user权限设为:---,ACL user权限设为:rx 表示长列出,结果发现被拒绝,说明user权限>ACL user
接下来看ACL user 与group 的比较:
[zhangsan@Centos6 ~]$ setfacl -m u:lisi:--- /home/zhangsan/1.txt
[zhangsan@Centos6 ~]$ getfacl /home/zhangsan/1.txt
getfacl: Removing leading '/' from absolute path names
# file: home/zhangsan/1.txt
# owner: zhangsan
# group: zhangsan
user::---
user:zhangsan:r-x
user:lisi:---
group::rwx
mask::rwx
other::---
[zhangsan@Centos6 ~]$ exit
logout
[root@Centos6 ~]# su - lisi
[lisi@Centos6 ~]$ cat /home/zhangsan/1.txt
cat: /home/zhangsan/1.txt: Permission denied
将lisi加入zhangsan组,将1.txt group权限设置为:rwx,将lisi加入 ACL user 权限设为 ---,切换到lisi用户,发现权限不够,表明,李四的ACL user 权限>lisi 所在的组张三的权限。
group 本来就大于 other的权限。所以它们的权限为:owner > acl user > group > other
- 升级Nginx1.9.5以上版本,开启博客网站http2.0时代
- Oracle Data Guard压缩归档测试(二)(r12笔记第27天)
- Oracle Data Guard压缩归档效果对比(r12笔记第26天)
- PHP7.0正式版编译安装升级及WordPress问题解决分享
- MySQL自增列的重复值问题(r12笔记第25天)
- 借助腾讯云CDN开启全站https及问题解决分享
- 分分钟搭建MySQL Group Replication测试环境(二)(r12笔记第41天)
- php5编译安装常见错误和解决办法集锦
- MySQL自增列主从不一致的测试(r12笔记第37天)
- 分享Mac/Linux系统Shell终端利器SecureCRT以及注册破解方法
- MySQL中GTID和自增列的数据测试(r12笔记第38天)
- 分享一个入门级可控多线程shell脚本方案
- PhalGo-介绍
- 实测Nginx服务器开启pagespeed加速效果
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 引号吃掉了我的数据~~~
- 每日一题 | 召唤兽问题
- WMI ——重写版
- LeetCode009|只出现一次的数字
- 丢弃掉那些 BeanUtils 工具类吧,MapStruct 是真香!!!
- 还在「黑盒炼丹」? 教你如何实现一行代码透视炼丹过程
- SpringCloud Alibaba微服务实战十九 - 集成RBAC授权
- 混合算法(GA+TS)求解作业车间调度问题(JSP)-禁忌搜索部分
- 打卡群刷题总结0810——从前序与中序遍历序列构造二叉树
- JavaScript性能优化
- Python+Excel+Word一秒制作百份合同
- SQL 订单揽收统计
- LeetCode11|搜索二维矩阵
- LeetCode14|合并排序的数组
- LeetCode12|两个数组的交集