Linux访问控制列表(Access Control List,简称ACL)

摘要:
否则,将追究法律责任。

Linux访问控制列表(Access Control List,简称ACL)

作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.ACL概述

ACL:Access Control List,实现灵活的权限管理
  
除了文件的所有者,所属组和其它人,可以对更多的用户设置权限   
CentOS7 默认创建的xfs和ext4文件系统具有ACL功能   
CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加     tune2fs –o acl
/dev/sdb1     mount –o acl /dev/sdb1 /mnt/test   
ACL生效顺序:所有者,自定义用户,自定义组,其他人

二.为jason用户对某个文件设置ACL权限

[root@node101.yinzhengjie.org.cn ~]# ll /data/
total 4
-rw-r--r--. 1 jason devops  0 Sep 10 06:34jason.txt
-rw-r--r--. 1 root  devops 22 Sep 10 07:44root.txt
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# setfacl -m u:jason:- /data/root.txt       #这里我们对jason用户设置的权限为空("-"),即无权限访问"/data/root.txt"文件。
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# ll /data/
total 4
-rw-r--r--. 1 jason devops  0 Sep 10 06:34jason.txt
-rw-r--r--+ 1 root  devops 22 Sep 10 07:44root.txt                    #大家注意,该文件设置后属性后面的"."变成了"+",说明设置ACL权限啦
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt                #我们可以使用该命令查看相应的ACL设置
getfacl: Removing leading '/'from absolute path names
# file: data/root.txt
# owner: root
# group: devops
user::rw-
user:jason:---    #我们发现jason用户对该文件的权限为0
group::r--
mask::r--
other::r--
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# su -l jason
Last login: Tue Sep 10 06:34:17 PDT 2019 on pts/0
[jason@node101.yinzhengjie.org.cn ~]$ 
[jason@node101.yinzhengjie.org.cn ~]$ ll /data/root.txt 
-rw-r--r--+ 1 root devops 22 Sep 10 07:44 /data/root.txt
[jason@node101.yinzhengjie.org.cn ~]$ 
[jason@node101.yinzhengjie.org.cn ~]$ cat /data/root.txt 
cat: /data/root.txt: Permission denied
[jason@node101.yinzhengjie.org.cn ~]$ 
[jason@node101.yinzhengjie.org.cn ~]$ echo "尹正杰到此一游">> /data/root.txt 
-bash: /data/root.txt: Permission denied
[jason@node101.yinzhengjie.org.cn ~]$ 

三.为属组对某个文件设置ACL权限

[root@node101.yinzhengjie.org.cn ~]# groupadd devops
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# idjason
uid=10086(jason) gid=10086(jason) groups=10086(jason)
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# usermod -G devops  jason          #为了测试,我们将jason用户加入devops组
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# idjason
uid=10086(jason) gid=10086(jason) groups=10086(jason),10097(devops)
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# ll /data/
total 4
-rw-r--r--. 1 root root 22 Oct  9 05:53root.txt
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/
getfacl: Removing leading '/'from absolute path names
# file: data/
# owner: root
# group: root
# flags: --t
user::rwx
group::r-x
other::rwx
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt 
getfacl: Removing leading '/'from absolute path names
# file: data/root.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# su -l jason
Last login: Wed Oct  9 05:58:25 CST 2019 on pts/1
[jason@node101.yinzhengjie.org.cn ~]$ 
[jason@node101.yinzhengjie.org.cn ~]$ cat /data/root.txt 
尹正杰到此一游
[jason@node101.yinzhengjie.org.cn ~]$ 
[jason@node101.yinzhengjie.org.cn ~]$ echo "jason到此一游" >> /data/root.txt         #我们发现没有设置ACL权限无法写入数据。
-bash: /data/root.txt: Permission denied
[jason@node101.yinzhengjie.org.cn ~]$ 
[jason@node101.yinzhengjie.org.cn ~]$ exit 
logout
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# setfacl -m g:devops:rw /data/root.txt         #我们为devops组添加读写权限
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt 
getfacl: Removing leading '/'from absolute path names
# file: data/root.txt
# owner: root
# group: root
user::rw-
group::r--
group:devops:rw-
mask::rw-
other::r--
[root@node101.yinzhengjie.org.cn ~]# 
[jason@node101.yinzhengjie.org.cn ~]$ echo "jason到此一游" >> /data/root.txt          #再次写入数据,发现数据写入成功啦!
[jason@node101.yinzhengjie.org.cn ~]$ 
[jason@node101.yinzhengjie.org.cn ~]$ cat /data/root.txt 
尹正杰到此一游
jason到此一游
[jason@node101.yinzhengjie.org.cn ~]$ 

四.将一个文件的权限复制给另一个文件权限

[root@node101.yinzhengjie.org.cn ~]# setfacl -m u:jason:rw /data/root.txt 
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt 
getfacl: Removing leading '/'from absolute path names
# file: data/root.txt
# owner: root
# group: root
user::rw-
user:jason:rw-
group::r--
group:devops:rw-
mask::rw-
other::r--
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# touch /data/a.txt
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/a.txt 
getfacl: Removing leading '/'from absolute path names
# file: data/a.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt | setfacl --set-file=- /data/a.txt      #将/data/root.txt文件权限复制给/data/a.txt文件
getfacl: Removing leading '/'from absolute path names
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/a.txt 
getfacl: Removing leading '/'from absolute path names
# file: data/a.txt
# owner: root
# group: root
user::rw-
user:jason:rw-
group::r--
group:devops:rw-
mask::rw-
other::r--
[root@node101.yinzhengjie.org.cn ~]# 

五.清除ACL权限

1>.清除指定用户的ACL权限

[root@node101.yinzhengjie.org.cn ~]# getfacl /data/a.txt 
getfacl: Removing leading '/'from absolute path names
# file: data/a.txt
# owner: root
# group: root
user::rw-
user:jason:rw-
group::r--
group:devops:rw-
mask::rw-
other::r--
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# setfacl -x u:jason /data/a.txt         #清除jason用户的ACL权限。
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/a.txt 
getfacl: Removing leading '/'from absolute path names
# file: data/a.txt
# owner: root
# group: root
user::rw-
group::r--
group:devops:rw-
mask::rw-
other::r--
[root@node101.yinzhengjie.org.cn ~]# 

2>.清除指定组的ACL权限

1 [root@node101.yinzhengjie.org.cn ~]# getfacl /data/a.txt 
2 getfacl: Removing leading '/'from absolute path names
3 # file: data/a.txt
4 # owner: root
5 # group: root
6 user::rw-
7 group::r--
8 group:devops:rw-
9 mask::rw-
10 other::r--
11 
12 [root@node101.yinzhengjie.org.cn ~]# 
13 [root@node101.yinzhengjie.org.cn ~]# setfacl -x g:devops /data/a.txt       #仅仅清除掉devops组的ACL权限
14 [root@node101.yinzhengjie.org.cn ~]# 
15 [root@node101.yinzhengjie.org.cn ~]# getfacl /data/a.txt 
16 getfacl: Removing leading '/'from absolute path names
17 # file: data/a.txt
18 # owner: root
19 # group: root
20 user::rw-
21 group::r--
22 mask::r--
23 other::r--
24 
25 [root@node101.yinzhengjie.org.cn ~]# 
26 [root@node101.yinzhengjie.org.cn ~]# 

3>.清除所有ACL权限

[root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt 
getfacl: Removing leading '/'from absolute path names
# file: data/root.txt
# owner: root
# group: root
user::rw-
user:jason:rw-
group::r--
group:devops:rw-
mask::rw-
other::r--
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# setfacl -b /data/root.txt         #清除所有ACL权限
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt 
getfacl: Removing leading '/'from absolute path names
# file: data/root.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# 

六.访问控制列表的注意事项

1>.mask只影响除所有者和other的之外的人和组的最大权限

[root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt 
getfacl: Removing leading '/'from absolute path names
# file: data/root.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# setfacl -m mask::rw /data/root.txt     #mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission),用户和组的设置必须存在于mask权限设定范围内才会生效。
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt 
getfacl: Removing leading '/'from absolute path names
# file: data/root.txt
# owner: root
# group: root
user::rw-
group::r--
mask::rw-
other::r--
[root@node101.yinzhengjie.org.cn ~]# 

2>.--set选项会把原来又的ACL选项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能像-m一样只是添加ACL就可以

[root@node101.yinzhengjie.org.cn ~]# setfacl -b /data/root.txt 
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt 
getfacl: Removing leading '/'from absolute path names
# file: data/root.txt
# owner: root
# group: root
user::rw-
group::r--
other::---
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# setfacl --set u::rw,u:jason:rw,g::r,o::- /data/root.txt 
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt 
getfacl: Removing leading '/'from absolute path names
# file: data/root.txt
# owner: root
# group: root
user::rw-
user:jason:rw-
group::r--
mask::rw-
other::---
[root@node101.yinzhengjie.org.cn ~]# 

3>.备份和恢复ACL(主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息)

[root@node101.yinzhengjie.org.cn ~]# getfacl -R /data/ >acl.txt        #备份某个目录的文件ACL权限
getfacl: Removing leading '/'from absolute path names
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# catacl.txt                   #查看备份目录的ACL权限信息
# file: data/
# owner: root
# group: root
# flags: --t
user::rwx
group::r-x
other::rwx
# file: data//root.txt
# owner: root
# group: root
user::rw-
user:jason:rw-
group::r--
mask::rw-
other::---
# file: data//a.txt
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# setfacl -R --set-file=acl.txt /data/#恢复指定目录的ACL权限
[root@node101.yinzhengjie.org.cn ~]# 

七.小试牛刀

1>.在/testdir/dir里创建新文件自动属于webs组,组apps的成员如tomcat能对这些新文件有读写权限,组dbs的成员如:mysql只能对新文件有读权限,其它用户(不属于webs,apps,dbs)不能访问这个文件夹
2>.备份/testdir/dir里所有文件的ACL权限到/root/acl.txt中,清除/test/dir中所有ACL权限,最后还原ACL权限。

免责声明:文章转载自《Linux访问控制列表(Access Control List,简称ACL)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android 使用GPS定位获取经纬度的方法R数据挖掘 第一篇:聚类分析(划分)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

(二)docker的部署安装,配置,基础命令

一、docker 的安装部署 这里不过多介绍,下面这两个linux发型版 安装可以参考 ubuntu的 docker-ce安装 centos7的 docker-ce安装 二.docker配置文件 重要参数解释: OPTIONS 用来控制Docker Daemon进程参数 -H 表示Docker Daemon绑定的地址, -H=unix:///var/r...

CentOS日常维护及常用脚本

[root@192-16.x.x xiewenming]# curl myip.ipip.net 当前 IP:42.62.x.x 来自于:中国 北京 北京 联通/电信 www.17ce.com cdn解析网站测试 如果遇到 -bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8...

Gitlab--安装及汉化

简介 gitlab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git 项目仓库,可通过Web界面迚行访问公开的戒者私人项目。Ruby on Rails 是一个可以使你开发、部署、维护 web 应用程序变得简单的框架。GitLab 拥有与Github 类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常...

chmod 777 修改权限

http://william71.blogbus.com/logs/33484772.html在Unix和Linux的各种操作系统下,每个文件(文件夹也被看作是文件)都按读、写、运行设定权限。例如我用ls -l命令列文件表时,得到如下输出:-rw-r--r-- 1 apple users 2254 2006-05-20 13:47 tt.htm从第二个字符...

SVN服务器安装与本地连接

SVN服务器安装与本地连接 系统环境 Centos7 查看是否安装了低版本SVN [root@svn-server ~]# rpm -qa subversion 卸载旧版本SVN [root@svn-server ~]# yum remove subversion 安装 [root@svn-server ~]# yum install httpd http...

rootkit:实现隐藏进程

实现隐藏进程一般有两个方法: 1,把要隐藏的进程PID设置为0,因为系统默认是不显示PID为0的进程。 2,修改系统调用sys_getdents()。 Linux系统中用来查询文件信息的系统调用是sys_getdents,这一点可以通过strace来观察到,例如strace ls 将列出命令ls用到的系统调用,从中可以发现ls是通过getdents系统调用...