linux文件权限674,Linux中ACL权限管理

用户的特殊权限

我们在之前的课程中已经讲过了基本权限。所谓的基本权限指得是,用户对文件拥有所有者所属组和其他人每个身份都有三个权限分别是读、写、执行,今天我们将介绍特殊权限ACL权限。

所谓了ACL权限指的针对一个目录或文件指定一个用户,为这个用户分配指定的权限。

这个ACL权限一般用在需要指定的用户拥有一定的权限的时候才会使用,就相当于windows的文件夹或文件的权限一样的,需要哪个用户有哪些权限就分配就可以了。

举一个例子

444879dbc04800e3f6a607371b3789a9.png

图1

上图为一个班级的共享目录,老师属于这个目录的所属主,拥有rwx权限,同学属于所属组,拥有rwx权限,其他人无权限,这时来了一个试听的学员,他需要的权限为5因为他也需要浏览这个目录获取一些资料,但是学校有规定,班级之间的目录不能互相查看。这时应该如何安排试听学员的身份呢?

我们看一下,将它加入到所属组里那么他的权限为7了,对于试听学员来说权限过大,将其加入到其他人里给其他人设置4权限,但是这时其他班级的同学也能进行访问了,也不行,让他当所属主,那就需要将老师赶出去了,也不行,那怎么办呢?这时就需要我们今天要讲的ACL权限。

当需要使用ACL权限时,分区必须支持ACL我们来看一下

首先我们需要看一下分区的结构

root@pc-benet~]# df -h

Filesystem                      Size  Used Avail Use%     Mounted on

/dev/mapper/vg_pcbenet-lv_root   18G 7.2G  9.3G  44% /

tmpfs                           931M     0 931M   0%      /dev/shm

/dev/sda1                       485M   39M 421M   9%     /boot

[root@pc-benet~]# dumpe2fs -h /dev/mapper/vg_pcbenet-lv_root

查看根根分区是否支持ACL

省略部分内容……

Defaultmount options:   user_xattr acl

默认就已经支持ACL了这里我们看一下是为了以防万一,如果不支持怎么办,我们可以有两种临时挂在,永久挂载

临时挂载:mount -o remount,acl  /重新挂在根分区重启失效

永久修改:vim /etc/fstab

修改以/结束的行default后面加上,acl   //注意字符输入错误,会导致系统无法启动。需要重新启动。或者重新挂载根分区

mount  -o remount /

好了我们的系统已经可以支持acl这个特殊权限了,我们来看一下设定命令的格式。

[root@pc-benet~]#    setfacl选项文件名

-m设定ACL权限

-x删除指定的ACL权限

-b删除所有ACL权限

-d设定默认ACL权限

-k删除默认ACL权限

-R递归设定ACL权限

下面我来演示这些选项,以及输出信息。

我们根据上面的图来进行创建

[root@pc-benet~]# mkdir /project

[root@pc-benet~]# useradd  zhangsan  && passwd  zhansgan

[root@pc-benet~]# useradd       lisi           && passwd  zhangsan

[root@pc-benet~]# groupadd  tgroup

[root@pc-benet~]# gpasswd  -a zhangsan tgroup

Addinguser zhangsan to group tgroup

[root@pc-benet~]# gpasswd  -a lisi tgroup

Addinguser lisi to group tgroup

[root@pc-benet~]# tail -1 /etc/group

tgroup:x:502:zhangsan,lisi

以上就是我们今天所用到的目录,用户,组。并且将用户加入到了组里。可以看到,我们已经成功的将用户加入到了tgroup组中

我们还是与上图一样设置权限。

[root@pc-benet~]# chown -R   root:tgroup /project/

[root@pc-benet~]# chmod  -R 770 /project/

[root@pc-benet~]# ls /project/ -ld

drwxrwx---.2 root tgroup 4096 10月17 21:01 /project/

我们这个目录的权限就已经设置完成了。

现在我们为试听用户设置权限

[root@pc-benet~]# useradd  st && passwd  st   //建立试听用户

[root@pc-benet~]# setfacl  -m user:st:rx /project/

-m设定ACL

-R递归子目录

user:指定用户

st:系统用户

rw为权限列表//即将分配的权限

/project目录名

[root@pc-benet~]# ls /project/ -ld

drwxrwx---+ 2root tgroup 4096 10月17 21:01 /project/

可以看见这个目录除了普通权限还有了特殊权限ACL

如果相查看具体的acl可以使用getfacl文件名的方式

[root@pc-benet~]# getfacl  /project/

省略部分信息……

user::rwx

user:st:r-x

group::rwx

mask::rwx

other::---

我们可以看见user:st:rx已经有了读和执行。

我们切换用户测试一下,使用我们之前学过的命令su - st的方式进行切换。

[root@pc-benet~]#

[root@pc-benet~]# su - st

[st@pc-benet~]$ cd /project/

[st@pc-benetproject]$ ls

[st@pc-benetproject]$ touch 123

touch:无法创建"123":权限不够

可以看到,进入、显示都没有问题但是创建就报错提示权限不足,因为没有写入的权限。

我们还可以将一个组设置ACL权限

[st@pc-benetproject]$ exit

logout

[root@pc-benet~]# groupadd  tgroup2

[root@pc-benet~]# setfacl  -m group:tgroup2:rwx/project

[root@pc-benet~]# getfacl  /project/

省略部分内容……

group:tgroup2:rwx

好了这是属于这个组中的用户就拥有了读写执行的权限,不常用。

这时我们使用root在/project目录中touch一个用户

[root@pc-benet~]# touch /project/123

显示一下这个文件的具体权限。

[root@pc-benet~]# ls /project/  -l

总用量0

-rw-r--r--.1 root root 0 10月17 21:28 123

可以看见新建的文件并没有acl权限,这是为什么啊?

因为上面设置的是对已经存在的用户生效,新建的文件并不生效,我们可以这么来操作,将上面的命令稍微的改动一下就可以了。

[root@pc-benet~]# setfacl   -m default:user:st:rx /project/

[root@pc-benet~]# touch /project/456

[root@pc-benet~]# ls /project/456  -l

-rw-rw----+1 root root 0 10月17 21:32 /project/456

就是在user前面加入了default

上面讲了如何设置权限,查看权限,接下来我们讲解最大有效权限与删除ACL权限。

什么是最大有效权限。

最大有效权限mask

其实使用acl设置的权限并不是最终的权限,而是需要与mask权限进行相与得到的权限才是有效的权限。我们来看一张图

e4367375aaff2fdf6463339bb4215b61.png

图2

我们来看一下AB两个权限列表

A和B相与如果A有rB也有r得到的结果是A有读权限,如果A有r而B没有r则得到的结果就是A没有读的权限。

默认的umask权限为rwx也就是最大值任何用户的权限与umask相与都等于用户权限本身。

我们可以通过对umask权限进行修改。

[root@pc-benet~]# setfacl  -m m:rx /project/

将默认的umask权限改为rx

这是umask权限就是读和执行了,这是就算你的用户的ACL权限为rwx但是你的实际权限也是rw,通过umask可也有效的控制的用户的权限,以防给出太高的权限。好了接下来我们再来看下一下删除ACL权限。

格式为setfacl  -x  group:组名/project

[root@pc-benet~]# setfacl  -x group:tgroup2 /project

删除用户就将group改为user将组名改为用户名

setfacl  -b文件名删除所有acl权限

[root@pc-benet~]# setfacl  -b /project/

[root@pc-benet~]# ls /project/ -ld

drwxrwx---.2 root tgroup 4096 10月17 21:32 /project/

可以看见前面的+号消失了。

这就是删除ACL权限。

接下来我们来看一下递归ACL权限

递归我们应该不陌生了,我们很多命令都提到过。

也就是子目录继承父母了的ACL权限

我先在/project下建立三个文件名为test1 test2 test3

之后为这个目录设置st用户拥有rx权限

看一下子文件是否继承了父目录的权限。

[root@pc-benetproject]# touch test1 test2 test3

[root@pc-benetproject]# setfacl  -m user:st:rx -R  ../project/

[root@pc-benetproject]# ls -l

总用量12

-rw-r-xr--+1 root root 0 10月17 21:59 test1

-rw-r-xr--+1 root root 0 10月17 21:59 test2

-rw-r-xr--+1 root root 0 10月17 21:59 test3

可以看见子文件的权限也已经更改了。

到了这里ACL权限就到这里了,都是一些常用的选项。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值