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

相关推荐

  • 任务计划配置

        任务计划:         linux任务计划,周期任务执行         未来的某个时间点执行一次任务:at,batch:系统自行选择空闲时间去执行此处指定的任务 &n…

    Linux干货 2016-09-12
  • 位置变量;if;for循环

    向脚本传递参数就是用位置参数变量实现 传递给命令的参数称为位置参数  ls  /etc/var Myscript.sh  argu1 argu2 ….${10}  ${11}…   引用方式 :$1就是引用整个脚本位置参数的第一个,第一个会自动保存在$1中  &nb…

    Linux干货 2016-08-15
  • 解决Redis 延迟故障

    前一段时间redis客户端在使用php connect 连接redis 的经常报一个redis server went away 等信息。 首先想到的想到的是reids超时设置的问题,timeout、tcp-keepalive、以及php的default_socket_timeout时间  127.0.0.1:6381> CONFI…

    Linux干货 2016-02-14
  • samba服务实现:linux和windows之间共享

    1,首先在linux(centos6,7)安装好samba程序:     yum -y install samba   samba-common        主配置文件:/etc/samba/smb.conf   ~]# groupadd share_gro…

    2017-03-05
  • N25期第五周作业

    1.显示当前系统上root、fedora或user1用户的默认shell grep -E ‘^(root|ftp|sync)’ /etc/passwd|cut -d: -f7 2.找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello() grep ‘\b.*\b()’ /etc/rc.d/init.d/f…

    Linux干货 2016-12-26
  • LInux系统启动与内核管理(下)

    从上一篇介绍了系统启动流程可以得知,在BIOS读取相关信息之后,接下来就是去找第一个可以启动的设备当中的MBR中读取Boot Loader信息,Boot Loader提供具有惨淡功能,直接加载内核信息,以及相关的控制权转交功能。启动系统必须有Boot Loader,然后才能去加载内核,Boot Loader存储于MBR当中,MBR只有512字节,其中前446…

    Linux干货 2016-09-19

评论列表(1条)

  • h
    h 2017-09-13 11:14

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