感谢支持
我们一直在努力

利用ACL提高Linux系统文件控制力度

  笔者企业前不久为了一个新产品项目,抽调销售、质量、采购等部门人员成立了一个临时项目小组,专门进行一类产品的开发。为了配合他们的工作,笔者在Linux文件服务器上建立了一个文件夹NewProject。公司规定,只有这个项目组的人员可以更改这个文件夹中的内容。而其他用户则无法修改这个文件夹以及文件夹下任何文件的权利。这个需求实现起来有一定的难度。因为他们需要不同部门的员工组成一个新的小组,然后这个小组的成员对这个文件夹具有修改的权限。为了实现这个目标,笔者采用了Linux系统中的ACL(文件存储控制清单)来实现这个需求。


  一、ACL的用途。


  通常情况下,Linux系统中文件与目录都包含有关于文件所有者、文件相关的组以及系统上所有其他用户的权限设定。也就是说,可以通过用户、组等方式来对文件进行权限的设置。但是,却无法针对多个不同组的用户或者多个组设置不同的权限。说得白一点,就是同一个组中的用户具有相同的权限,而不能够同一个组中的用户有某些例外。如在文件服务器上分别有销售部门组、采购部门组等等。销售部门组中的所有用户具有相同的权限。也就是说,要么销售部门的员工全部可以访问文件服务器上的NewProject这个文件夹;要么全部不能够访问。而不能是某个销售员可以访问,而其他销售员则不能够访问。若光靠Linux系统默认的文件访问权限控制规则,是无法实现这个目的的。


  若企业现在要实现跨部门的合作,几个部门中的某些员工需要对某些文件服务器上的文件或者文件夹有读写的权限,此时就要利用到Linux操作系统中的ACL(文件访问控制清单)功能。也就是说,只有通过这个功能才能够让同一个组中的个别成员有有别于其他成员的文件访问权限。


  二、具体配置。


  废话少说,接下去大家就看看笔者的配置过程,来直观的了解一下ACL文件存取控制清单的作用。如果大家要了解这个ACL文件存取控制清单的具体作用,可以先查看一下系统对于这个功能的大致介绍。要查看这方面的内容,可以在Linux系统的终端输入man acl来实现这个目的。示意图如下:



  第一步:创建文件夹并赋予相关的权限。


  笔者首先在文件服务器上创建了一个存放新项目信息的NewProject文件夹。由于笔者文件服务器是部署在一个独立的Linux服务器上,所以硬盘基本上是文件服务器独享的。故在建立文件夹的时候,没有为用户设置磁盘限额。如果大家文件服务器跟邮件服务器等其他应用服务器共用一台服务器或者一块硬盘的时候,最好要养成为新文件夹设置磁盘限额的习惯。防止硬盘因为新项目存放文件的需要而被迅速耗用光,从而给其他应用服务产生不利的影响。具体磁盘配额如何设置,大家可以参考相关的问题。


  另外,还需要给这个目录设置特殊的权限,笔者这里给这个文件夹的权限为1777。这个数字表示所有用户都可以在这个目录中创建文件,但是只有文件的所有者才能够删除文件。这个权限就保证项目组的所有成员都可以在这个NewProject文件夹下保存图片、新建文件等等。而且只有自己可以删除自己建立的文件。不过光这个限制还不行,因为其他员工也可以往这个文件夹中存放内容。为此还需要通过ACL来限制其他用户的权利。另外,除了文件所有者之外,其他人(包括这个项目小组中的其他成员)只能够查看这个文件,但是无法进行修改。所以还需要设置项目小组中的其他成员可以修改这个文件夹下的文件。

  第二步:利用ACL扩大这个文件夹的相关权限。


  默认情况下,只有两个用户可以扩大这个文件夹的访问权限。一个是创建这个文件夹的人,二是root用户。笔者这里以root用户为例谈谈如果通过ACL来扩大这个文件夹的权限。现在现在某个项目小组成员A新建了一个项目进度计划表的文件。可以根据上面这个文件夹的权限规则(1777),其他项目小组成员不能够修改用户A所创建的项目进度计划表文件,他们也就无法把项目的完成情况计入到这个文件中。故笔者接下去的任务,就是通过ACL(文件存储清单)功能让其他项目小组成员能够修改这个项目进度计划表文件。


  先来看一下这个具体的命令。Setfacl –m –u:b:rwx /NewProject/项目进度计划表


  如果管理员需要通过ACL来修改或者删除一个文件的ACL,则需要采用setfacl命令。其中-m参数表示添加或者修改一个文件或者目录的ACL(文件存储清单)。上面这个命令就表示赋予用户b 这个“/NewProject/项目进度计划表”文件的存储权限。


  只需要通过这个简单的配置,就可以实现这个功能。如果一个项目小组有五个成员的话,那么只需要分别为五个用户执行一下这条命令即可。不过这条命令看起来简单,其中包含的内容可不少。笔者今天就大方一点,把这个命令的使用决窍跟大家说说。


  一是这个命令不仅可以给用户设置ACL,还可以给组设置ACL。给组设置ACL时需要用到g参数。如上面这个案例中,如果项目小组的成员比较多时,要为每个用户执行这一条命令,那不是很麻烦吗?其实这里还是有一些简便的处理方法。如可以把这些用户再添加到一个新组中,如为“新项目开发组”。然后给这个组赋予ACL。那么以上这条命令只需要执行一次即可。这就可以提高系统管理员工作效率。


  二是不仅可以给文件赋予ACL,还可以给文件夹授予ACL。如上例中,如果用户B也建立了一个任务确认表,其他项目小组成员也需要更改这个文件。那么不是对于这个文件也要进行一个类似的操作吗?其实,此时给/NewProject这个文件夹授权,而不是针对“项目进度计划表”这个文件来单独授权,会更加的合理。


  三是当这个新产品开发项目完工后,如何来快速清除这个临时赋予的ACL(文件存储清单)呢?难道需要一条条或者一个个用户来清除呢?如果管理员要这么做也是可以的,只是操作起来麻烦一点而已。其实这里最方便的做法就是针对文件或真文件夹来清除ACL设置。如管理员需要删除一个用户、一个组或者所有其他人在某个特定文件(文件夹)上的所有权限,则可以通过使用-x选项来达到目的。可见破坏动作确实比建立工作要快得多。


  四是需要注意谁有这个权限来设置文件存储清单。默认情况下,文件的建立者与root用户都可以设置文件存储清单。如上面案例中,用户A与root用户都可以为项目进度计划表这个文件设置ACL。但是这么处理会有一定的安全风险。如用户A恰巧也懂得Linux系统和ACL的配置,那么他的配置就会影响到ACL策略的一致性。故笔者的建议是,最好有root 帐户建立这个文件夹,并由其来设置ACL为好。统一管理文件存储清单可以提高文件的安全性。如果让用户自己来分配文件存储清单的话,并不是很合适,很可能会出现文件访问上的安全漏洞,甚至与文件原有的安全访问策略冲突。故笔者强烈建议,这个ACL文件存储清单的设置权限还是掌握在系统管理员或者文件服务器管理员手中为好。

赞(0) 打赏
转载请注明出处:服务器评测 » 利用ACL提高Linux系统文件控制力度
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏