锦州市广厦电脑维修|上门维修电脑|上门做系统|0416-3905144热诚服务,锦州广厦维修电脑,公司IT外包服务
topFlag1 设为首页
topFlag3 收藏本站
 
maojin003 首 页 公司介绍 服务项目 服务报价 维修流程 IT外包服务 服务器维护 技术文章 常见故障
锦州市广厦电脑维修|上门维修电脑|上门做系统|0416-3905144热诚服务技术文章
linux权限控制之ACL

作者: 佚名  日期:2010-07-17 03:45:25   来源: 本站整理

ACL,就是Access Control List,一个文件/目录的访问控制列表,可以针对任意指定的用户/组分配RWX权限

用户权限管理始终是 Unix 系统管理中最重要的环节。大家对 Linux/Unix 的 UGO 权限管理方式一定不陌生,还有最常用的 chmod 命令。为了实现一些比较复杂的权限管理,往往不得不创建很多的组,并加以详细的记录和区分(很多时候就是管理员的噩梦)。可以针对某一个用户对某一文件指定一个权限,恐怕管理员都期待的功能。比如对某一个特定的文件,用户A可以读取,用户B所在的组可以修改,惟独用户B不可以……。于是就有了IEEE POSIX 1003.1e这个ACL的标准。所谓ACL,就是Access Control List,一个文件/目录的访问控制列表,可以针对任意指定的用户/组分配RWX权限。现在主流的商业Unix系统都支持ACL。FreeBSD也提供了对ACL的支持。Linux在这个方面也不会落后,从2.6版内核开始支持ACL。

准备工作:

支持ACL需要内核和文件系统的支持。现在2.6内核配合EXT2/EXT3, JFS, XFS, ReiserFS等文件系统都是可以支持ACL的。用自己工作用的物理分区体验ACL,总是不明智的行为。万一误操作导致分区的损坏,造成数据的丢失,损失就大了。作一个loop设备是个安全的替代方法。这样不需要一个单独的分区,也不需要很大的硬盘空间,大约有个几百KB就足够进行我们的体验了。OK,下面我使用Fedora Core 5和Ext3文件开始对Linux的ACL的体验。

首先创建一个512KB的空白文件:

#dd if=/dev/zero of=/opt/testptn bs=1k count=512

和一个loop设备联系在一起:

#losetup /dev/loop1 /opt/testptn

创建一个ext3文件系统

#mkfs.ext3 /dev/loop1

挂载此文件系统,在挂载时需要告知内核在此设备中使用acl

#mount -o rw,acl /dev/loop1 /mnt

现在我已经得到了一个小型的文件系统。而且是支持ACL的。并且即使彻底损坏也不会影响硬盘上其他有价值的数据。可以开始我们的ACL体验之旅了。

首先新建一个文件作为实施ACL的对象:

#touch file1

#ll file1

然后看一下这个文件缺省的ACL ,这时这个文件除了通常的UGO权限外,并没有ACL

#getfacl file1
#file:file1
#owner:root
#group:root
user::rw-
group::r--
other::r--

注意:即使是不支持ACL的情况下,getfacl仍然返回一个这样的结果,不过setfacl是不能工作的。

下面添加几个用户和用户组,一会我将使用ACL赋予他们不同的权限:

#useradd ceshi1
#useradd ceshi2
#useradd ceshi3
#groupadd ceshi
#usermod -G ceshi ceshi1 ceshi2 ceshi3

在目前情况下,新建的用户没有权限在file1中操作

现在我们对file1的ACL赋予ceshi1足够的权限

#setfacl -m u:ceshi1:rw file1
#su - ceshi1
#echo "ceshi1" >>file1
#cat file1

显示修改成功,用户ceshi1可以对file1做读写操作,我们来看一下file1的ACL

#getfacl file1
#file:file1
#owner:root
#group:root
user::rw-
user:ceshi1:rw-
group::r--
mask::rw-
other::r--

ll file1
-rw-rw-r--+ root root

权限后面有个‘+’这个说明file1设置了ACL,接下来我们修改一下ceshi1的权限,同时给ceshi这个组读的权限

#setfacl -m u:ceshi1:rwx,g:ceshi:r file1
#getfacl file1
#file:file1
#owner:root
#group:root
user::rw-
user:ceshi1:rwx
group::rw-
group:ceshi:r--
mask::rwx
other::r--

可以看到设置后的权限,ceshi1已经有了执行的权限,而ceshi这个组也获得了读取文件内容的权限。也许有人已经注意到了两个问题:首先, file1的组权限从r--变成了rw-。其次,mask是什么?为什么也变化了呢?我们先从mask说起。如果说acl的优先级高于UGO,那么 mask就是一个名副其实的最后一道防线。它决定了一个用户/组能够得到的最大的权限。这样我们在不破坏已有ACL的定义的基础上,可以临时提高或是降低安全级别:

#setfacl -m mask::r file1
#getfacl file1
#file:file1
#owner:root
#group:root
user::rw-
user:ceshi1:rwx    #effective:r--
group::r--
group:ceshi:r--
mask::r--
other::r--

在ceshi1对应的ACL项的后边出现了effective的字样,这是实际ceshi1得到的权限。Mask只对其他用户和组的权限有影响,对owner和other的权限是没有任何影响的。执行ls的结果也显示UGO的设置也有了对应的变化。因为在使用了ACL的情况下,group的权限显示的就是当前的mask。通常我们把mask设置成rwx,以不阻止任何的单个ACL项。

*需要注意的是,每次修改或添加某个用户或组的ACL项的时候,mask都会随之修改以使最新的修改能够真正生效。所以如果需要一个比较严格的mask的话,可能需要每次都重新设置一下mask。

体验2 - ACL的其他功能:删除和覆盖

如何删除已有的ACL项?

#setfacl -x g:ceshi file1
#getfacl file1
#file:file1
#owner:root
#group:root
user::rw-
user:ceshi1:rwx
group::r--
mask::rwx
other::r--

删除了ceshi组的权限 ,如果需要去除所有ACL权限,也可以使用-b选项,所有的ACL都会被删除

#setfacl -d file1
#getfacl file1
#file:file1
#owner:root
#group:root
user::rw-
group::r--
other::r--

我们可以用--set设置一些新的ACL项,并把原有的ACL项全部覆盖掉,和-m不同,-m选项只是修改已有的配置或是新增加一些,--set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样只是添加ACL就可以了。如:

#setfacl --set u::rw,u:ceshi1:rw,g::r,o::- file1
#getfacl file1
#file:file1
#owner:root
#group:root
user::rw-
user:ceshi1:rw-
group::r--
mask::rw-
other::---

o::-的完整写法是other::---,通常我们可以把“-”省掉,但是当权限位只包含一个“-”必须至少保留一个

如果希望对目录下的所有子目录都设置同样的ACL,可以使用-R参数:

#setfacl --set -R u::rw,u:ceshi1:rw,g::r,o::- dir1    ??


如果希望从一个文件读入ACL,并修改当前的文件的ACL,可以用-M参数:

#cat test.acl
user:testu1:rw-
user:testu2:rw-
group:testg1:r--
group:testg2:r--
mask::rw-
other::---

如果我们希望在一个目录中新建的文件和目录都是用一个预定的ACL,那么我们可以使用默认(default)ACL。在对一个目录设置了默认的ACL以后,每个在目录中创建的文件会自动继承目录的默认ACL作为自己的ACL。用setfacl的-d选项可以做到这一点:

#setfacl -d --set g:ceshi:rwx dir1
#getfacl dir1
# file: dir1
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:group:testg1:rwx
default:mask::rwx
default:other::r-x

默认ACL已经被设置,建立一个文件试试:

#touch dir1/file1
#getfacl /dir1/file1
#owner:root
#group:root
user::rw-
group::r-x                      #effective:r--
group:ceshi:rwx                #effective:rw-
mask::rw-
other::r--

file1自动继承了dir1对testg1设置的ACL。只是由于mask的存在使得testg1只能获得rw-权限

体验4 - 备份和恢复ACL
 



热门文章
  • Mac电脑是否无法自动连接Wi-Fi?教...
  • 华为手机是否出现卡顿、死机等问题...
  • 电脑电源灯闪烁无法启动的常见原因...
  • 三个方法,轻松解决Win11开机慢的问...
  • 华硕B350M-DRAGON维修记
  • V星B85M E45,通电无显,无复位,维...
  • 联想IB250MH主板维修 不开机风扇不...
  • 彻底禁止Windows更新补丁3.5
  • 解决一加手机触屏失灵的问题
  • Mac电脑Wi-Fi密码更改了?轻松重新...
  • 华为手机是否出现卡顿、死机等问题...
  • 小新潮7000-14IKBR 不充电 通病
  • 锦州广厦电脑上门维修

    报修电话:13840665804  QQ:174984393 (联系人:毛先生)   
    E-Mail:174984393@qq.com
    维修中心地址:锦州广厦电脑城
    ICP备案/许可证号:辽ICP备2023002984号-1
    上门服务区域: 辽宁锦州市区
    主要业务: 修电脑,电脑修理,电脑维护,上门维修电脑,黑屏蓝屏死机故障排除,无线上网设置,IT服务外包,局域网组建,ADSL共享上网,路由器设置,数据恢复,密码破解,光盘刻录制作等服务

    技术支持:微软等