ACL权限控制

ACL,即访问控制列表(Access Control List), 可以实现更为灵活的文件访问权限控制,除了文件的所有者,所属组和其他人,可以为更多的用户设置权限,ACL可以对特定的用户、特定的用户组、特定的文件或目录来进行rwx的权限控制。
如,某一个文件,不让单一的某个用户访问。

1.设置文件访问权限setfacl

chmod命令可以把文件权限分为u:g:o,也就是(user:group:other)三组,而setfacl可以对每一个文件或目录设置更精确的文件权限,setfacl可以理解为文件访问权限扩展或者说增强。
语法如下:

setfacl [-bkndrlp] {-m|-M|-x|-X} file

-m,   --modify=acl   修改文件的acl权限
格式:setfacl -m file or dir

-M,   --modify-file=file   通过acl配置文件来为文件设置acl访问权限
格式:setfacl -M xxx.acl file or dir

 xxx.acl中格式如下:
 #u:表示给用户添加权限,
 #user:指定确定存在的用户名,
 #rwx:表示具有访问文件具有的权限
 u:user:rwx
 #g:表示给用组添加权限,
 # group:指定确定存在的用户组,
 #rwx:表示具有访问文件具有的权限
g:group:r

-x,   --remove=acl   删除文件的acl访问权限
-X,   --remove-file=file   删除file文件提供的acl权限
-b,   --remove-all   删除所有 acl 权限
-k,   --remove-default   删除缺省的acl规则。如果没有缺省规则,将不提示。
      --set=acl   
      -set-file=file   
      --mask   重新计算有效权限,即使ACL mask被明确指定。 

-n,   --no-mask   不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定。有效权限是由两部分组成
的,一部分是通过setfacl设置的权限,一部分是由mask设置的权限,通过
setfacl添加进来的用户具有的权限会首mask的限制,可以将mask作为一个
统一控制门限,通过setfacl设置的用户可以实现一键控制。

-d,   --default   使用默认的acl权限操作

-R,   --recursive   递归设置acl权限,从当前目录开始,递归设置子目录下的
文件及目录权限

--restore=file   从文件恢复备份的acl规则(这些文件可由getfacl -R产生)。
通过这种机制可以恢复整个目录树的acl规则。此参数不能和除--test以外的
任何参数一同执行。

--test  测试模式,不会改变任何文件的acl规则,操作后的acl规格将被列出。
-L,--logical:跟踪符号链接,默认情况下只跟踪符号链接文件,跳过符号
链接目录。
-P,--physical:跳过所有符号链接,包括符号链接文件。
-v,   --version   输出setfacl的版本号并退出。
-h,   --help   输出帮助信息。

注意

  • centos7及以上的版本,xfsext4文件系统具有ACL功能
  • centos7及以前的版本,默认手工创建的ext4文件系统没有ACL功能,需要手动添加
    tune2fs -o acl /dev/sdb1
    mount -o acl /dev/sdb1 /mnt/test
  • ACL生效顺序:所有者 > 自定义用户 > 自定义组 > 其他人
  • 全局访问控制权限生效顺利:
  1. 检查所有者是否具有访问权限;
  2. 检查ACL权限是否具有访问权限;
  3. 检查用户是否具有访问权限;
  4. 检查用户所在的组是否具有访问权限;
  5. 检查other是否具有访问权限;
2.备份和恢复ACL

主要的文件操作拷贝命令cpscp等都支持ACL,只需要在命令选项上加上-p参数即可,但是常用的备份工具是不会保留目录和文件ACL信息。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ACL(Access Control List,访问控制列表)是一种常见的权限控制方法,可以对用户、角色或资源进行权限控制,从而保证系统的安全性和可靠性。 在 PHP 中,可以通过使用 ACL 库来实现权限控制ACL 库提供了一组 API,可以方便地实现用户、角色和资源的权限管理。 使用 ACL 库的基本步骤如下: 1. 创建 ACL 对象,用于管理权限控制列表。 2. 创建用户、角色和资源对象,分别用于表示系统中的用户、角色和资源。 3. 将用户、角色和资源对象添加到 ACL 对象中。 4. 定义权限规则,例如“用户 A 可以访问资源 B”。 5. 将权限规则添加到 ACL 对象中。 6. 在代码中使用 ACL 对象来判断用户是否具有访问资源的权限。 下面是一个简单的 PHP ACL 示例代码: ```php // 创建 ACL 对象 $acl = new \Zend\Permissions\Acl\Acl(); // 创建用户、角色和资源对象 $user = new \Zend\Permissions\Acl\Role\GenericRole('user'); $admin = new \Zend\Permissions\Acl\Role\GenericRole('admin'); $resource = new \Zend\Permissions\Acl\Resource\GenericResource('resource'); // 将用户、角色和资源对象添加到 ACL 对象中 $acl->addRole($user); $acl->addRole($admin, $user); $acl->addResource($resource); // 定义权限规则 $acl->allow($user, $resource, 'read'); $acl->allow($admin, $resource, 'write'); // 判断用户是否具有访问资源的权限 $isAllowed = $acl->isAllowed('admin', 'resource', 'write'); ``` 在上面的代码中,我们创建了一个 ACL 对象,并添加了一个用户对象、一个管理员对象和一个资源对象。然后,我们定义了两条权限规则,表示用户可以读取资源,管理员可以写入资源。最后,我们使用 ACL 对象来判断管理员是否具有写入资源的权限。 需要注意的是,ACL 库提供了丰富的功能和选项,可以根据具体的需求进行配置和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

banche168

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值