当前位置: 首页 > news >正文

Linux - 主机的细部权限规划:ACL 的使用

        ACL 是 Access Control List 的缩写。基本的目的是在提供传统的 owner,group,others 的 read,write,execute 权限之外的细部权限配置。ACL 能够针对单一使用者,单一文件或文件夹来进行 r,w,x 的权限规范,对于须要特殊权限的使用状况很有帮助。

那 ACL 主要能够针对哪些方面来控制权限呢?他主要能够针对几个项目:

    使用者 (user):能够针对使用者来配置权限。
    群组 (group):针对群组为对象来配置其权限;

    默认属性 (mask):还能够针对在该文件夹下在创建新文件/文件夹时。规范新数据的默认权限。

ACL 的配置技巧: getfacl, setfacl

    getfacl, setfaclgetfacl:取得某个文件/文件夹的 ACL 配置项目。
    setfacl:配置某个文件夹/文件的 ACL 规范。

setfacl 命令使用方法


[root@www ~]# setfacl [-bkRd] [{-m|-x} acl參数] 目标文件名称
选项与參数:
-m :配置兴许的 acl 參数给文件使用,不可与 -x 合用。
-x :删除兴许的 acl 參数,不可与 -m 合用;
-b :移除全部的 ACL 配置參数;
-k :移除默认的 ACL 參数,关于所谓的『默认』參数于兴许范例中介绍;
-R :递归配置 acl 。亦即包含次文件夹都会被配置起来;
-d :配置『默认 acl 參数』的意思!

仅仅对文件夹有效,在该文件夹新建的数据会引用此默认值


        上面谈到的是 acl 的选项功能。那么怎样配置 ACL 的特殊权限呢?特殊权限的配置方法有非常多, 我们先来谈谈最常见的,就是针对单一使用者的配置方式:

# 1. 针对特定使用者的方式:
# 配置规范:『 u:[使用者账号列表]:[rwx] 』,比如针对 vbird1 的权限规范 rx :
[root@www ~]# touch acl_test1
[root@www ~]# ll acl_test1
-rw-r--r-- 1 root root 0 Feb 27 13:28 acl_test1
[root@www ~]# setfacl -m u:vbird1:rx acl_test1
[root@www ~]# ll acl_test1
-rw-r-xr--+ 1 root root 0 Feb 27 13:28 acl_test1
# 权限部分多了个 + ,且与原本的权限 (644) 看起来差异非常大!但要怎样查阅呢?

[root@www ~]# setfacl -m u::rwx acl_test1
[root@www ~]# ll acl_test1
-rwxr-xr--+ 1 root root 0 Feb 27 13:28 acl_test1
# 无使用者列表,代表配置该文件拥有者,所以上面显示 root 的权限成为 rwx 了!


        上述动作为最简单的 ACL 配置,利用『 u:使用者:权限 』的方式来配置的啦!

配置前请加上 -m 这个选项。 假设一个文件配置了 ACL 參数后。他的权限部分就会多出一个 + 号了!

可是此时你看到的权限与实际权限可能就会有点误差! 那要怎样观察呢?就透过 getfacl 吧!



getfacl 命令使用方法

[root@www ~]# getfacl filename
选项与參数:
getfacl 的选项差点儿与 setfacl 同样。所以鸟哥这里就免去了选项的说明啊!

# 请列出刚刚我们配置的 acl_test1 的权限内容: [root@www ~]# getfacl acl_test1 # file: acl_test1 <==说明档名而已。 # owner: root <==说明此文件的拥有者。亦即 ll 看到的第三使用者字段 # group: root <==此文件的所属群组,亦即 ll 看到的第四群组字段 user::rwx <==使用者列表栏是空的,代表文件拥有者的权限 user:vbird1:r-x <==针对 vbird1 的权限配置为 rx ,与拥有者并不同! group::r-- <==针对文件群组的权限配置仅有 r mask::r-x <==此文件默认的有效权限 (mask) other::r-- <==其它人拥有的权限啰。

        上面的数据很easy查阅吧?显示的数据前面加上 # 的,代表这个文件的默认属性,包含文件名称、文件拥有者与文件所属群组。 底下出现的 user, group, mask, other 则是属于不同使用者、群组与有效权限(mask)的配置值。

以上面的结果来看。我们刚刚配置的 vbird1 对于这个文件具有 r 与 x 的权限啦。

# 2. 针对特定群组的方式:
# 配置规范:『 g:[群组列表]:[rwx] 』,比如针对 mygroup1 的权限规范 rx :
[root@www ~]# setfacl -m g:mygroup1:rx acl_test1
[root@www ~]# getfacl acl_test1
# file: acl_test1
# owner: root
# group: root
user::rwx
user:vbird1:r-x
group::r--
group:mygroup1:r-x  <==这里就是新增的部分!

多了这个群组的权限配置!

mask::r-x other::r--

        基本上,群组与使用者的配置并没有什么太大的差异啦!如上表所看到的,很easy了解意义。

只是,你应该会认为奇怪的是, 那个 mask 是什么东西啊?事实上他有点像是『有效权限』的意思!

他的意义是: 使用者或群组所配置的权限必需要存在于 mask 的权限配置范围内才会生效。此即『有效权限 (effective permission)』

# 3. 针对有效权限 mask 的配置方式:
# 配置规范:『 m:[rwx] 』,比如针对刚刚的文件规范为仅有 r :
[root@www ~]# setfacl -m m:r acl_test1
[root@www ~]# getfacl acl_test1
# file: acl_test1
# owner: root
# group: root
user::rwx
user:vbird1:r-x        #effective:r-- <==vbird1+mask均存在者。仅有 r 而已!
group::r--
group:mygroup1:r-x     #effective:r--
mask::r--
other::r--


# 1. 先測试看看。使用 myuser1 是否能进入该文件夹?
[myuser1@www ~]$ cd /srv/projecta
-bash: cd: /srv/projecta: Permission denied  <==确实不可进入!

# 2. 開始用 root 的身份来配置一下该文件夹的权限吧!
[root@www ~]# setfacl -m u:myuser1:rx /srv/projecta
[root@www ~]# getfacl /srv/projecta
# file: srv/projecta
# owner: root
# group: projecta
user::rwx
user:myuser1:r-x  <==还是要看看有没有配置成功喔。
group::rwx
mask::rwx
other::---

# 3. 还是得要使用 myuser1 去測试看看结果!

[myuser1@www ~]$ cd /srv/projecta [myuser1@www projecta]$ ll -a drwxrws---+ 2 root projecta 4096 Feb 27 11:29 . <==确实能够查询档名 drwxr-xr-x 4 root root 4096 Feb 27 11:29 .. [myuser1@www projecta]$ touch testing touch: cannot touch `testing': Permission denied <==确实不能够写入!


# 1. 先測试看看。使用 myuser1 是否能进入该文件夹?
[myuser1@www ~]$ cd /srv/projecta
-bash: cd: /srv/projecta: Permission denied  <==确实不可进入!

# 2. 開始用 root 的身份来配置一下该文件夹的权限吧。
[root@www ~]# setfacl -m u:myuser1:rx /srv/projecta
[root@www ~]# getfacl /srv/projecta
# file: srv/projecta
# owner: root
# group: projecta
user::rwx
user:myuser1:r-x  <==还是要看看有没有配置成功喔!
group::rwx
mask::rwx
other::---

# 3. 还是得要使用 myuser1 去測试看看结果!
[myuser1@www ~]$ cd /srv/projecta
[myuser1@www projecta]$ ll -a
drwxrws---+ 2 root projecta 4096 Feb 27 11:29 .  <==确实能够查询档名
drwxr-xr-x  4 root root     4096 Feb 27 11:29 ..

[myuser1@www projecta]$ touch testing
touch: cannot touch `testing': Permission denied <==确实不能够写入!


# 4. 针对默认权限的配置方式:
# 配置规范:『 d:[ug]:使用者列表:[rwx] 』

# 让 myuser1 在 /srv/projecta 底下一直具有 rx 的默认权限!

[root@www ~]# setfacl -m d:u:myuser1:rx /srv/projecta [root@www ~]# getfacl /srv/projecta # file: srv/projecta # owner: root # group: projecta user::rwx user:myuser1:r-x group::rwx mask::rwx other::--- default:user::rwx default:user:myuser1:r-x default:group::rwx default:mask::rwx default:other::--- [root@www ~]# cd /srv/projecta [root@www projecta]# touch zzz1 [root@www projecta]# mkdir zzz2 [root@www projecta]# ll -d zzz* -rw-rw----+ 1 root projecta 0 Feb 27 14:57 zzz1 drwxrws---+ 2 root projecta 4096 Feb 27 14:57 zzz2 # 看吧。确实有继承喔!

然后我们使用 getfacl 再次确认看看。

[root@www projecta]# getfacl zzz2 # file: zzz2 # owner: root # group: projecta user::rwx user:myuser1:r-x group::rwx mask::rwx other::--- default:user::rwx default:user:myuser1:r-x default:group::rwx default:mask::rwx default:other::---

相关文章:

  • Crontab 命令需要注意的地方
  • mysql-连接及子查询使用删除重复记录
  • postfix邮件服务的高级配置
  • 关于期权池Option Pools与Vesting:码农创业防身必备法器
  • HTC Bliss 首露真容,带前置摄像头
  • golang从腾讯 lbs 获取全国省市区及经纬度坐标
  • 全文检索、数据挖掘、推荐引擎系列5---文章术语向量表示法
  • 美国FPL太阳能中心安装完成50万块光伏板
  • 非常酷!10个基于 HTML5 的字体应用演示网站
  • MapView
  • Synaptics研发端到端加密的指纹传感器
  • 项目质量管理
  • MyEclipse 下用link 方式安装插件
  • [转载]c/c++ 操作sqlite
  • 应急制冷精密空调 数据中心应急制冷系统
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 【css3】浏览器内核及其兼容性
  • 【翻译】babel对TC39装饰器草案的实现
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • javascript从右向左截取指定位数字符的3种方法
  • js中的正则表达式入门
  • Meteor的表单提交:Form
  • Python中eval与exec的使用及区别
  • Redis学习笔记 - pipline(流水线、管道)
  • Redis中的lru算法实现
  • 笨办法学C 练习34:动态数组
  • 构建工具 - 收藏集 - 掘金
  • 力扣(LeetCode)56
  • 全栈开发——Linux
  • 通过几道题目学习二叉搜索树
  • 想写好前端,先练好内功
  • 学习笔记:对象,原型和继承(1)
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .NET 反射 Reflect
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET构架之我见
  • .net和jar包windows服务部署
  • .net解析传过来的xml_DOM4J解析XML文件
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .NET文档生成工具ADB使用图文教程
  • [8-27]正则表达式、扩展表达式以及相关实战
  • [APUE]进程关系(下)
  • [C/C++]关于C++11中的std::move和std::forward
  • [C++]priority_queue的介绍及模拟实现
  • [ExtJS5学习笔记]第三十节 sencha extjs 5表格gridpanel分组汇总
  • [Golang]K-V存储引擎的学习 从零实现 (RoseDB mini版本)
  • [IM] [Webhook] Webhook实现IM平台机器人
  • [Java] 图说 注解
  • [Java][Android][Process] 暴力的服务能够解决一切,暴力的方式运行命令行语句
  • [JavaWeb]——获取请求参数的方式(全面!!!)
  • [Java基础]—JDBC