Centos下ACL(访问控制列表)介绍(转)
我们知道,在Linux操作系统中,传统的权限管理分是以三种身份(属主、属組以及其它人)搭配三种权限(可读、可写以及可执行),并且搭配三种特殊权限(SUID,SGID,SBIT),来实现对系统的安全保护。但是,随着业务和需求的发展和扩大,仅有的这种模式已经不能满足当前复杂环境下的权限控制需求。
比如,当前有一个/data目录,现在需要A組成员能够可写,B組成员仅读,C組成员可读可写可执行,此时怎么办呢?
对于以上的需求,仅仅依托现有的传统权限管理模式,是无法实现的。为了解决该类型的问题,Linux 开发出了一套新的文件系统权限管理方法,叫做 文件访问控制列表 ACL(Access Control Lists)。通过使用 ACL,可以完美解决如上类型的需求问题。
那么下来来看,什么是访问控制列表?
什么是ACL
ACL 是 Access Control List 的缩写,主要目的是针对在传统的三种身份和三种权限之外,提供更加细化的局部权限设定。官方手册来讲,它主要针对用户、用户组、以及掩码方面控制权限。
简单去理解就是,ACL 可以针对单个用户、单个用户组来进行权限细化的控制。而在windows系统上,没有这个ACL,ACL是类Unix(Unix-like)操作系统权限的额外支持项目,因此要使用ACL必须要有文件系统的支持才行。主要包括ReiserFS, EXT2/EXT3/ext4, JFS, XFS等文件系统。
文件系统是否支持ACL
需要注意的是,由于ACL是必须依托文件系统的,因此并不是每个文件系统都支持ACL。比如我们 win 平台的 NTFS 文件系统,FAT32 文件系统是不支持ACL的。在Linux平台上,常见的支持ACL的文件系统有如下几类,如 EXT2/EXT3/ext4, JFS, XFS等等。
那么,如何查看你的系统是否支持 ACL 呢?
我们可以通过如下操作来查看:
[root@lh ~]# tune2fs -l /dev/vda1 | grep optionsDefault mount options: user_xattr acl[root@lh ~]# dumpe2fs /dev/vda1 | grep optionsdumpe2fs 1.41.12 (17-May-2010)Default mount options: user_xattr acl
以上两条命令任选一个即可!
如果在输出的信息,默认挂载选项中有acl这个标识,就代表你的文件系统是支持的。
假设,你的文件系统不支持或者支持但是并没有显示这个acl标识怎么办呢?针对此种情况,我们可以通过使用tune2fs来为他添加,或者mount去添加都可以。
[root@lh ~]# tune2fs -o acl /dev/vda1tune2fs 1.41.12 (17-May-2010)
ACL相关命令详解
介绍完了 ACL 是什么,也说了如何使文件系统支持 ACL 的功能,下面就来说说如何操作。
ACL的相关的操作主要有 3 个命令,分别是 getface、setfacl和chacl,常用的主要是getfacl 和 setfacl。
getfacl 查看文件/目录的ACL设定内容setfacl 设置文件/目录的ACL内容chacl 查看和更改文件/目录的ACL内容,由于日常有setfacl,因此chacl从来不用,故本文不作介绍
getfacl 一般都是直接在后面跟你所要查看的文件或者目录的路径,因此掌握如何查看即可。操作如下:
[root@lh ~]# getfacl /tmpgetfacl: Removing leading ‘/’ from absolute path names# file: tmp# owner: root# group: root# flags: –tuser::rwxgroup::rwxother::rwx[root@lh ~]# getfacl /etc/passwdgetfacl: Removing leading ‘/’ from absolute path names# file: etc/passwd# owner: root# group: rootuser::rw-group::r–other::r–
setfacl 是使用最多的,基本 ACL 方面的操作都是它,因此它的选项也是蛮多的。首先来setfacl的使用语法:
setfacl [-bkRd] [{-m|-x} acl参数] 文件/目录路径选项介绍:-b :删除所有的 acl 参数-k :删除预设的 acl 参数-R :递归设置后面的 acl 参数-d :设置预设的 acl 参数(只对目录有效,在该目录新建的文件也会使用此ACL默认值)-m :设置(修改)后面 acl 参数(添加acl条目)-x :删除后面指定的 acl 参数
ACL 参数主要由3部分组成,组成结构如下:
三种身份:对应身份名:三种权限[u|g|o]:[用户名|用户组名]:[rwx]
实例练习:
下面来看几个实例,来理解学习 ACL 的操作:
现在在/mnt目录,有文件test和目录dir,它们的权限都是600,属主和属組都是root。
[root@lh mnt]# touch test[root@lh mnt]# mkdir dir[root@lh mnt]# chmod 600 test[root@lh mnt]# chmod 600 dir[root@lh mnt]# lltotal 4drw——-. 2 root root 4096 Jul 4 17:56 dir-rw——-. 1 root root 0 Jul 4 17:56 test
现在要求完成如下要求:
1、为文件 test 增加 acl 权限,使 sunsky 用户可以可读可写
[root@lh mnt]# setfacl -m u:sunsky:rw test[root@lh mnt]# getfacl test# file: test# owner: root# group: rootuser::rw-user:sunsky:rw-group::—mask::rw-other::—[root@lh mnt]# su – sunsky # 切换到sunsky用户下,进行测试Wellcome to Linux World[sunsky@lh ~]$ echo 1 >> /mnt/test # 很明显能写入数据[sunsky@lh ~]$ cat /mnt/test
2、为文件 test 增加 acl 权限,使 sun 組的所有用户都能读该文件
[root@lh mnt]# setfacl -m g:sun:r test[root@lh mnt]# getfacl test# file: test# owner: root# group: rootuser::rw-user:sunsky:rw-group::—group:sun:r–mask::rw-other::—[root@lh mnt]# su – sunWellcome to Linux World[sun@lh ~]$ cat /mnt/test # 很明显能查看test文件的内容1[sun@lh ~]$ echo 2 >> /mnt/test # 由于我们没有给sun組成员更改权限,因此不能更改-bash: /mnt/test: Permission denied
3、为目录 dir 增加 acl 权限,使 sun 組的所有用户都能够对该目录可读可写可执行
[root@lh mnt]# setfacl -m g:sun:rwx dir[root@lh mnt]# getfacl dir# file: dir# owner: root# group: rootuser::rw-group::—group:sun:rwxmask::rwxother::—[root@lh mnt]# su – sun # 切换到sun用户下,进行测试[sun@lh ~]$ echo “date” >> /mnt/dir/date.sh[sun@lh ~]$ bash /mnt/dir/date.shFri Jul 4 18:01:48 CST 2014
4、删除文件 test 上,关于 sun 組的 acl 权限
[root@lh mnt]# setfacl -x g:sun test[root@lh mnt]# getfacl test# file: test# owner: root# group: rootuser::rw-user:sunsky:rw-group::—mask::rw-other::—
5、删除目录 dir 的所有 ACL 权限
[root@lh mnt]# setfacl -b dir[root@lh mnt]# getfacl dir# file: dir# owner: root# group: rootuser::rw-group::—other::—
6、为目录 dir 增加默认ACL权限,使 dir 目录下新创建的文件或目录,都默认拥有 sunsky 用户可读可写可执行
[root@lh mnt]# setfacl -m d:u:sunsky:rwx dir[root@lh mnt]# getfacl dir# file: dir# owner: root# group: rootuser::rw-group::—other::—default:user::rw-default:user:sunsky:rwxdefault:group::—default:mask::rwxdefault:other::—[root@lh mnt]# touch /mnt/dir/sunsky[root@lh mnt]# getfacl /mnt/dir/sunskygetfacl: Removing leading ‘/’ from absolute path names# file: mnt/dir/sunsky# owner: root# group: rootuser::rw-user:sunsky:rwx #effective:rw-group::—mask::rw-other::—
在第六题中,我们发现,在user:sunsky:rwx后面多了一个 #effective:rw-,这是为什么呢?我们在切换到sunsky用户下,看看它是否有执行该文件的权限!
[root@lh mnt]# su – sunskyWellcome to Linux World[sunsky@lh ~]$ bash /mnt/dir/sunskybash: /mnt/dir/sunsky: Permission denied
很明显,尽管我们使用setfacl给了sunsky对dir目录下默认新生成的文件可读可写可执行的权限,但是依旧是没有执行权限的。这是为什么呢?
我们发现多了输出#effective:rw-,它是由于什么出来的呢?
effective生效的为rw,他是受我们输出中的mask影响的。但是我们发现,我们并没有设置过mask啊,为啥他默认变成rw了。这里我就来介绍一下mask!
有效权限(mask)就是acl权限设置的极限值,也就是你所设置的acl权限一定是mask的一个子集,如果超出mask范围会将超出的权限去掉,设置格式:m:权限
如果遇到设置的用户权限与 mask 权限冲突,则用户的权限为# effective 权限
那么,一旦一个文件被设置了 ACL,其文件原属组部分的权限将变为 MASK 权限,而并非原来的属组权限。如果其文件原先属組权限为空,那么当你设置了mask权限之后,你的属組权限也相应改变为其mask对应的权限。
下面,我们就继续进行第六题的实验!
[root@lh mnt]# setfacl -m m::rwx /mnt/dir/[root@lh mnt]# getfacl /mnt/dir/getfacl: Removing leading ‘/’ from absolute path names# file: mnt/dir/# owner: root# group: rootuser::rw-group::—mask::rwxother::—default:user::rw-default:user:sunsky:rwxdefault:group::—default:mask::rwxdefault:other::—[root@lh mnt]# su – sunskyWellcome to Linux World[sunsky@lh ~]$ bash /mnt/dir/sunskybash: /mnt/dir/sunsky: Permission denied
奇怪了,为什么我已经更改了mask为rwx了,并且effective也不再出现了,为何现在sunsky依旧拿不到执行权限呢?
我们现在去看下/mnt/dir/sunsky文件的ACL权限吧。
[root@lh mnt]# getfacl /mnt/dir/sunskygetfacl: Removing leading ‘/’ from absolute path names# file: mnt/dir/sunsky# owner: root# group: rootuser::rw-user:sunsky:rwx #effective:rw-group::—mask::rw-other::—
通过查看我们发现,/mnt/dir/sunsky文件中,对于 sunsky的acl权限设置竟然还是 # effective:rw- ,这是为什么呢?
原来,我们刚才修改 /mnt/dir 的 mask 仅仅只针对/mnt/dir目录下新生成的文件有效,并且由于文件在创建时,受到传统权限的 umask 值的影响,已经拥有了属組的权限,所以就使得 ACL 的mask设置失效。因此,此时我们通过使用上面提到的-R 递归选项,将/mnt/dir目录下的所有文件重新修改一次 ACL 的mask权限,就能解决该问题!
[root@lh mnt]# su – sunskyWellcome to Linux World[sunsky@lh ~]$ echo date > /mnt/dir/sunsky[sunsky@lh ~]$ bash /mnt/dir/sunskyFri Jul 4 18:32:11 CST 2014
以上就是 setfacl 的日常管理的所有操作了!相信只要大家将以上的操作掌握,以后只要用到ACL的地方就不会窘迫了。
Centos下ACL(访问控制列表)介绍(转)的更多相关文章
- 高级ACL访问控制列表
实验拓扑: 配置: 基本配置做完之后搭建OSPF网络 R1: ospf 1 area 0 network 10.0.13.0 0.0.0.255 network 1.1.1.1 0.0.0.0 R2: ...
- Kong Gateway - 11 基于网关服务的ACL访问控制列表 黑名单
Kong Gateway - 11 基于网关服务的ACL访问控制列表 黑名单 同一服务名称 book 不允许即创建白名单访问控制列表又创建黑名单访问控制列表 启用服务的白名单&黑名单配置文件时 ...
- CCNA 之 十 ACL 访问控制列表
ACL 访问控制列表 ACL(Access Control List) 接入控制列表 ACL 的量大主要功能: 流量控制 匹配感兴趣流量 标准访问控制列表 只能根据源地址做过滤 针对曾哥协议采取相关动 ...
- 普通ACL访问控制列表
配置OSPF R1: R2: R3: R4: 在R1上查看OSPF的学习 测试R1与R4环回接口连通性 配置普通ACL访问控制列表: 先在R4配置密码用R1与R4建立telnet建立 密码huawei ...
- [转载]ACM(访问控制模型),Security Identifiers(SID),Security Descriptors(安全描述符),ACL(访问控制列表),Access Tokens(访问令牌)
对于<windows核心编程>中的只言片语无法驱散心中的疑惑.就让MSDN中的解释给我们一盏明灯吧.如果要很详细的介绍,还是到MSDN仔细的看吧,我只是大体用容易理解的语言描述一下. wi ...
- 交换路由中期测验20181226(动态路由配置与重分发、NAT转换、ACL访问控制列表)
测试拓扑: 接口配置信息 HostName 接口 IP地址 网关 Server 0 Fa0 172.16.15.1/24 172.16.15.254 Server 1 Fa0 100.2.15.200 ...
- CentOS下crond定时任务详细介绍
目录 1.定时任务crond介绍... 2.crond定时任务限权... 3.Crontab用法... 4.Crontab命令的书写格式... 5.定时服务器时间同步... 6.写定时任务注意点.. ...
- ACL访问控制列表
acl是基于文件系统的,所以支不支持acl在于使用什么文件系统. FAT32文件系统不支持权限,也不区分大小写 如果一个分区不是安装系统时分的分区,是一个新的分区的话,默认是不支持acl CentOS ...
- ensp,acl访问控制列表
ACL分类: 基本ACL 编号范围: 2000-2999 参数:源ip地址 高级ACL 编号范围: 3000-3999 参数:源ip地址,目的ip地址,源端口,目的端口等 二层ACL ...
随机推荐
- centos6.6 安装cacti监控服务器
整理一份cacti的安装步骤.留作笔记和以后参考用. 环境: centos 6.6 -x64 cacti-0.8.8b-cn.tar.gz mysql yum安装即可 yum服务使用centos自带的 ...
- C语言中字符串结束符'\0'
转自:http://www.cnblogs.com/kaituorensheng/archive/2013/12/09/3464462.html 本质 '\0'就是8位的00000000,因为字符类型 ...
- Tortoise SVN 使用帮助
同步至本地:新建文件夹,SNV checkout 输入用户名密码,确认. 上传文件:将要上传的文件放在一个文件夹里,选择要上传的文件所在的文件夹,右键单击,tortoiseSVN,Import,选择要 ...
- 最小化安装centos7不能执行ifconfig命令的解决方法
操作环境 虚拟机:VirtualBox 5.0.4 for Windows 操作系统:CentOS-7-x86_64-Minimal-1503-01.iso 问题描述 登录系统之后,输入ifconfi ...
- JAVA Day8
1. 引用数据类型需要new 2. 字符串使用的3种方式 String s = "hello world"; String s = new String(); String s = ...
- Codeforces118D Caesar's Legions(DP)
题目 Source http://codeforces.com/problemset/problem/118/D Description Gaius Julius Caesar, a famous g ...
- R 语言编码风格指南
R 语言是一门主要用于统计计算和绘图的高级编程语言.这份 R 语言编码风格指南旨在让我们的 R代码更容易阅读.分享和检查.以下规则系与 Google 的 R 用户群体协同设计而成. 概要: R编码风格 ...
- BZOJ3069: [Pa2011]Hard Choice 艰难的选择
Description Byteasar是一个很纠结的人.每次他经过Bytetown的时候都知道有至少2条不同的路径可以选择,这导致他必须花很长时间来决定走哪条路.Byteasar最近听说了Bytet ...
- 为川师大女生支招 15年如何还200W
就在昨儿一条新闻火遍全网,川师大21岁女生樊师贝发帖称,希望有人借她200万,为父母在城里买房15年还清,至于利息“可以用后半生来陪伴你”.她说,六旬父亲要负担家用,哥哥啃老,而她目前一分钱都还没挣到 ...
- CentOS7和win7双系统启动项
1.添加win7启动项编辑文件 /boot/grub2/grub2.conf menuentry 'Windows 7' { insmod ntfs set root='hd0,1' chainloa ...