十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章主要介绍“Linux的ACL权限怎么配置”,在日常操作中,相信很多人在Linux的ACL权限怎么配置问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux的ACL权限怎么配置”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
创新互联是一家专业提供肃北企业网站建设,专注与做网站、网站设计、H5建站、小程序制作等业务。10年已为肃北众多企业、政府机构等服务。创新互联专业网络公司优惠进行中。
“很多初学 Linux的人都会有这样的疑惑,权限有什么作用呢?我为什么需要配置和修改权限呢?因为绝大多数初学者使用的都是个人计算机,个人计算机主要使用管理员身份登录,而且不会有多个用户同时存在。但是在服务器上,需要 root和普通用户同时存在、同时登录管理服务器,所以合理的权限分配是保证服务器安全与稳定的前提。”
在普通权限中,用户对文件只有三种身份,就是所属主、所属组和其他人;每种用户身份拥有读(read)、写(write)和执行(execute)三种权限。但是在实际工作中,这三种身份实在是不够用,举个例子来看看。
根目录中有一个 /item目录,这是班级的项目目录。班级中的每个学员都可以访问和修改这个目录,老师也需要对这个目录拥有访问和修改权限,其他班级的学员当然不能访问这个目录。需要怎么规划这个目录的权限呢?应该这样:老师使用root 用户,作为这个目录的所属主,权限为 rwx;班级所有的学员都加入 group 组,使 group 组作为 /item目录的属组,权限是 rwx;其他人的权限设定为 0。这样这个目录的权限就可以符合我们的项目开发要求了。
有一天,班里来了一位试听的学员 st,她必须能够访问 /item目录,所以必须对这个目录拥有 r 和 x 权限;但是她又没有学习过以前的课程,所以不能赋予她 w 权限,怕她改错了目录中的内容,所以学员 用户st的权限就是 r-x。可是如何分配她的身份呢?变为属主?当然不行,要不 root 该放哪里?加入 group 组?也不行,因为 group 组的权限是 rwx,而我们要求学员 st 的权限是 r-x。如果把其他人的权限改为 r-x 呢?这样一来,其他班级的所有学员都可以访问 /item目录了。
当出现这种情况时,普通权限中的三种身份就不够用了。ACL 权限就是为了解决这个问题的。在使用 ACL 权限给用户 st 陚予权限时,st 既不是 /item 目录的所属主,也不是属组,仅仅赋予用户 st 针对此目录的 r-x 权限。这有些类似于 Windows 系统中分配权限的方式,单独指定用户并单独分配权限,这样就解决了用户身份不足的问题。
开启ACL权限
在CentOS 6.x 系统中 ACL 权限默认是开启的,不需要手工开启。不过,如果你的操作系统不是 CentOS 6.x,那该如何查看 ACL权限是否开启了呢?可以这样查看:
#mount(查看挂载的分区情况)
/dev/sda1 on /boottype xfs
#dumpe2fs –h /dev/sda3(查询指定分区文件系统详细信息)
-h:仅显示超级块中的信息,而不显示磁盘块组的详细信息
使用mount 命令可以査看到系统中已经挂载的分区,而使用 dumpe2fs 命令可以査看到这个分区文件系统的详细信息。大家可以看到,我们的 ACL 权限是 /dev/sda3 分区的默认挂载选项,所以不需要手工挂载。
不过我的 Linux 系统如果没有默认挂载,则可以手工挂载吗?当然可以,执行如下命令:
#mount –o remount,acl /(重新挂载根分区,并加入ACL权限)
使用mount 命令重新挂载,并加入 ACL 权限。不过使用此命令是临时生效的。要想永久生效,需要修改 /etc/fstab 文件,命令如下:
#vi /etc/fstab
UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2/ext4 defaults,acl 1 1(加入ACL权限)
#mount –o remount(重新挂载文件系统或重启系统,使其生效)
在你需要开启 ACL 权限的分区行上(也就是说 ACL 权限针对的是分区),手工在 defaults 后面加入",acl"即可永久在此分区中开启 ACL 权限。
1:ACL权限设置
1:ACL权限管理命令
我们知道了 ACL 权限的作用,也知道了如何开启 ACL 权限,接下来学习如何査看和设定 ACL 权限。命令如下:
#getfacle filename(查看ACL权限)
#setfacl option filename(设定ACL权限)
选项:
m:设定 ACL 权限。如果是给予用户 ACL 权限,则使用"u:用户名:权限"格式赋予;如果是给予组 ACL 权限,则使用"g:组名:权限" 格式赋予;
-x:删除指定的 ACL 权限;
-b:删除所有的 ACL 权限;
-d:设定默认 ACL权限。只对目录生效,指目录中新建立的文件拥有此默认权限;
-k:删除默认 ACL权限;
-R:递归设定 ACL 权限。指设定的 ACL 权限会对目录下的所有子文件生效
2:给用户和用户组添加ACL权限
举个例子,就来看看图 1 中的权限怎么分配。我们要求root 是 /item 目录的属主,权限是 rwx;tgroup是此目录的属组,tgroup 组中拥有班级学员 zhangsan 和lisi,权限是rwx;其他人的权限是 0。这时,试听学员 st 来了,她的权限是 r-x。我们来看具体的分配命令。
#useradd zhangsan
#useradd lisi
#useradd st
#groupadd tgroup
#mkdir /item
#chown root:tgroup /item/
#chmod 770 /item/
#ll –d /item/
#setfacl –m u:st:rx /item/
#cd /
#ll –d item/
drwxrwx---+ 3 root tgroup 4096 1月19日 05:20 item/
#getfacl item
大家可以看到,st 用户既不是 /item目录的属主、属组,也不是其他人,我们单独给 st用户分配了r-x 权限。这样分配权限太方便了,完全不用先辛苦地规划用户身份了。
我想给用户组赋予 ACL 权限可以吗?当然可以,命令如下:
#groupadd tgroup2
#setfacl –m g:tgroup2:rwx item/
#ll –d item/
#getfacl item/
mask 是用来指定最大有效权限的。mask的默认权限是 rwx,如果我给 st 用户赋予了 r-x的 ACL 权限,mj 需要和 mask 的 rwx 权限"相与"才能得到 st 的真正权限,也就是 r-x "相与"rwxtj出的值是 r-x,所以 st 用户拥有 r-x权限。
如果把 mask 的权限改为 r--,和 st 用户的权限相与,也就是 r--"相与"r-x得出的值是 r--,st 用户的权限就会变为只读。大家可以这么理解:用户和用户组所设定的权限必须在mask 权限设定的范围之内才能生效,mask权限就是最大有效权限。
不过我们一般不更改 mask 权限,只要给予 mask 最大权限 rwx,那么任何权限和mask 权限相与,得出的值都是权限本身。也就是说,我们通过给用户和用户组直接赋予权限,就可以生效,这样做更直观。
补充:逻辑与运算的运算符是"and"。可以理解为生活中所说的"并且"。也就是相与的两个值都为真,结果才为真;有一个值为假,与的结果就为假。比如 A 相与 B,结果入表 2 所示。
A | B | and |
---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
Sheet2逻辑与运算
那么两个权限相与和上面的结果类似,我们以读(r)权限为例,结果如表 3 所示。
A | B | And |
---|---|---|
r | r | r |
r | - | - |
- | r | - |
- | - | - |
所以,"rwx"相与"r-x",结果是"r-x";"r--"相与"r-x",结果是"r--"。
修改最大有效权限的命令如下:
#setfacl –m m:rx item/
#getfacl item/
我们已经给/item 目录设定了ACL 权限,那么,在这个目录中新建一些子文件和子目录,这些文件是否会继承父目录的ACL 权限呢?Let’s go!
#cd /item/
#touch abc
#mkdir d1
#ll
子文件 abc 和子目录 d1 因为是后建立的,所以并没有继承父目录的 ACL 权限。当然,我们可以手工给这两个文件分配 ACL 权限,但是如果在目录中再新建文件,都要手工指定,则显得过于麻烦。这时就需要用到默认ACL 权限。
默认ACL 权限的作用是:如果给父目录设定了默认 ACL 权限,那么父目录中所有新建的子文件都会继承父目录的 ACL 权限。默认ACL 权限只对目录生效。命令如下:
setfacl –m d:u:st:rx /item/
#getfacl item/
#cd item/
#touch bcd
#mkdir d2
#ll
原先的abc 和 d1 还是没有ACL 权限,因为默认 ACL 权限是针对新建立的文件生效的。
再说说递归 ACL 权限。递归是指父目录在设定ACL 权限时,所有的子文件和子目录也会拥有相同的 ACL 权限。
#setfacl –m u:st:rx –R/item/
-R:递归
#ll
默认 ACL权限指的是针对父目录中新建立的文件和目录会继承父目录的 ACL 权限,格式是"setfacl-m d:u:用户名:权限 文件名";递归 ACL 权限指的是针对父目录中已经存在的所有子文件和子目录继承父目录的 ACL 权限,格式是"setfacl-m u:用户名: 权限 -R 文件名"。
我们来看看怎么删除 ACL 权限,命令如下:
删除指定的ACL权限:
#setfacl –x u:st /item/删除指定用户和用户组的ACL权限
#getfacl item/
删除所有ACL权限
#setfacl –b item/(会删除文件的所有ACL权限)
#getfacl item/(所有ACL权限已被删除)
到此,关于“Linux的ACL权限怎么配置”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!