ACL权限管理练习

ACL简介;
权限管理练习

在学习了用户、组和文件对应的User、Group、Others三类用户以及操作权限Excute、Write和Read后我们知道了在文件或文件夹上我们可以分别对三类用户设置不同的权限。
举个例子:

/home/guanyu目录下的4.txt文件

-rwxrw-r–. 1 guanyu shu 7 Aug 30 10:52 4.txt

User:guanyu拥有rwx权限,
Group:shu组用户拥有rw权限;
Others:其他用户拥有r权限。
如果现在Rockets用户James需要对4.txt取得rw权限,我们会想到以下几种办法:
1. 给文件的other类别增加读和写的权限. 这样由于James会被归为other类别,那么
他也将拥有rw权限。
2. 将James加入到shu group. 那么James会被归为group类别,那么他将拥有读写的权限。
3. 设置suid, 使James能够以guanyu的身份对4.txt进行操作,从而获得rw权限。

第一种做法的问题在于所有用户都将对4.txt拥有读写操作,显然这种做法不可取。
第二种做法的问题在于James被赋予了过多的权限.所有属于shu组的文件,James都可以拥
有其等同的权限了。
第三种做法虽然可以达到只限定James用户一人拥有对4.txt文件的rw权限.但是需要
对sudoers文件进行严格的格式控制. 而且当文件数量和用户很多的时候,这种方法就相当地不灵活了。为了方便让某些其他用户获得权限,我们可以单独设置一种权限管理叫ACL。

一、Access Control List (ACL)接入控制列表简介

简单地来说,ACL就是可以设置特定用户或者用户组对于一个文件/文件夹的操作权限。ACL 是由一系列的Access Entry所组成的,每一条Access Entry定义了特定的类别可以对文件拥有的操作权限。Access Entry有三个组成部分:Entry tag type,qualifier(optional),权限。
在下面的例子中,Entry tag type , qualifier(optional)u:James,权限rw。

[root@h(Brad) guanyu]# setfacl -m u:James:rw 4.txt
[root@h(Brad) guanyu]#getfacl 4.txt
# file: 4.txt
# owner: root
# group: root
user::rwx
user:James:rw-
group::rw-
mask::rw-
other::r--

需要掌握的命令也只有三个: getfacl, setfacl, chacl。

二、安装准备、

1.查看ACL安装情况。使用rpm命令,检查系统已经安装acl。

[root@h(Brad) ~]#rpm -qa acl
acl-2.2.49-7.el6.x86_64

2.使用vim编辑/etc/fstab在 /目录 标签default后面添加acl标签。

[root@h(Brad) ~]#vim /etc/fstab
#
# /etc/fstab
Created by anaconda on Mon Aug 28 17:08:51 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=2f1009b9-8157-4711-b605-f8bec7ae0ed6 / ext4 defaults,acl 1 1
UUID=77d9e29e-26d1-440d-a5ed-aa2929977787 /app ext4 defaults 1 2
UUID=8a3fdf1e-c41c-4fe3-ab8f-4269f1532c93 /boot ext4 defaults 1 2
UUID=fb7024d6-6cbc-4b1f-b543-e1637223a20f swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
"/etc/fstab" 16L, 899C written

3.在启用了acl参数之后重新加载/data分区,出现下面的信息代表分区的acl功能已经正常加载。

[root@h(Brad) ~]#mount -o remount /
[root@h(Brad) ~]#cat /etc/mtab |grep /
/dev/sda5 / ext4 rw,acl 0 0

三、操作

1.操作步骤:
1)查看文件权限状态;
2)用户James对4.txt有rw权限;
3)用户组Rockets对4.txt有r权限;
4)设置mask为x;
5)删除4.txt的acl设定,还原成文件的原来权限。

2.操作:
在这里我们用的的命令有
getfacl:查看文件/目录的ACL设定内容
-c过滤文件ugo权限。
setfacl:设置文件/目录的ACL内容
语法:setfacl [-bkRd] [{-m|-x} acl参数] 文件名
-m :设置后续的acl参数
-x :删除后续的acl参数
-b :删除所有的ACL设定参数
-R :递归设置acl参数
-d :设置预设的acl参数(只对目录有效,在该目录新建的文件也会使用此ACL默认值)
-k :删除预设的ACL参数
1)查看4.txt权限状态。

[root@h(Brad) guanyu]#ll 4.txt
-rwxrw—-. 1 root root 237 Sep 1 07:06 4.txt
[root@h(Brad) guanyu]#getfacl 4.txt
# file: 4.txt
# owner: root
# group: root
user::rwx
group::rw-
other::r–

2)让用户James对4.txt有rw权限

[root@h(Brad) guanyu]#setfacl -m u:James:rw 4.txt
[root@h(Brad) guanyu]#ll 4.txt
-rwxrw—-+ 1 root root 237 Sep 1 07:06 4.txt
[root@h(Brad) guanyu]#getfacl 4.txt
# file: 4.txt
# owner: root
# group: root
user::rwx
user:James:rw-
group::r–
mask::rw-
other::—

这时我们就可以看到James用户在ACL里面已经拥有了对文件的读写权限.在文件权限的最后多了一个+号。当任何一个文件拥有了ACL_USER或者ACL_GROUP的值以后我们就可以称它为ACL文件.这个+号就是用来提示我们的。
特别强调如果文件有ACL_MASK值,那么文件权限标识中第二组rw-代表的就是mask值而不再是group 权限了。
当一个文件拥有了ACL_USER或者ACL_GROUP的值时ACL_MASK同时也会被定义,user和group的acl设置了mask的最大值。

3)用户组Rockets对4.txt有r权限;

[root@h(Brad) guanyu]#setfacl -m g:Rockets:r 4.txt
[root@h(Brad) guanyu]#getfacl -c 4.txt
user::rwx
user:James:rw-
group::rw-
group:Rockets:r–
mask::rw-
other::r–

在设置了ACL之后,再设置mask,acl内容和group权限就会被影响。mask的作用是让用户/组对某个文件只有某些权限。mask只对其他用户和组的权限有影响,而对owner和other的权限是没有任何影响的。在下面的例子中因为设置了mask即acl用户、用户组和acl组权限的上限为–x,所以在他们的权限信息后面多了#effectiv,除了x权限其他都被限制。

4) 设置mask为x;

[root@h(Brad) guanyu]#setfacl -m mask:x 4.txt
[root@h(Brad) guanyu]#ll 4.txt
-rwx–xr–+ 1 root root 237 Sep 1 07:06 4.txt
[root@h(Brad) guanyu]#getfacl 4.txt
# file: 4.txt
# owner: root
# group: root
user::rwx
user:James:rw- #effective:—
group::rw- #effective:—
group:Rockets:r– #effective:—
mask::–x
other::r–

5)删除4.txt的acl设定还原成文件的原来权限。

[root@h(Brad) guanyu]#setfacl -b 4.txt
[root@h(Brad) guanyu]#ll 4.txt
-rwx—r–. 1 root root 237 Sep 1 07:06 4.txt

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/86885

(1)
manbinnmanbinn
上一篇 2017-09-11 08:20
下一篇 2017-09-11 11:18

相关推荐

  • keepalived配置

    前两个配置做完实验没截图,后面的实验有图片。 keepalived的的单独设置 1.确保时间同步 ntpdate 10.1.0.1 2.保证/etc/hosts文件可以解析到 3.本机配置ssh-keygen -t rsa -P ''  ,然后ssh-copy-id -i .ssh/id_rsa.pub root@10.1.44…

    Linux干货 2016-11-11
  • 第八周:网络基础知识和shell脚本练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别; 网桥:是连接两个局域网的基于MAC地址数据存储转发设备,工作于数据链路层 集线器:所有端口处于同一个广播域和冲突域中,带宽共享,工作于物理层 二层交换机:多端口网桥,一个端口一个冲突域,默认所有端口位于同一个广播域中,可以划分vlan,隔离广播域,带宽独享 三层交换机:具有路由功…

    Linux干货 2016-11-21
  • Shell脚本编程中的if、case、for、while、until命令

    为何要学编程中的if、case、for、while、until命令?        作为一个运维工程师,总会听到自动化,实际自动化离不开编写shell脚本,而shell脚本中却又离不开编程中的if、case、for、while、until, 这些关键字。 了解编程中的if、case、for、while、until命令,…

    Linux干货 2016-08-19
  • 计算机;GPL等开源协议;Linux 哲学思想的炼成;MBR & GPT—fazion in magedu 20.July

    入门Linux的基础知识 fazionlan blog in 178Linux.July 22nd. 第一台计算机 1946第一台计算机ENIAC(electronic numerical integrator and calculator)在美国滨州大学诞生,是美国奥伯丁武器试验场为了满足计算弹道而研制的 冯诺依曼体系结构:1946年数学家提出运算器、控制…

    Linux干货 2016-07-29
  • Homework Week-9 bash脚本之顺序、选择、循环

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash #Elephant echo "nologin users:" user1=$(cat /etc/passwd&n…

    Linux干货 2016-10-17
  • shell脚本编程初步–吐血整理

    shell脚本编程 编程基础 程序: 程序的构成:指令 + 数据 程序的编程风格:     过程式:以指令为中心,数据服务于指令     对象式:以数据为中心,指令服务于数据 shell程序:提供了编程能力,解释执行 shell,perl,python语言均为高级编程语言 编程的逻辑处理方式: &n…

    Linux干货 2016-08-18

评论列表(1条)

  • h
    h 2017-09-13 11:14

    内容不错,注意排版,继续加油!