Linux中ACL权限管理

用户的特殊权限

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

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

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

举一个例子

图1

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

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

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

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

[email protected]~]# 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

[[email protected]~]# 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这个特殊权限了,我们来看一下设定命令的格式。

[[email protected]~]#    setfacl 选项  文件名

-m         设定ACL权限

-x           删除指定的ACL权限

-b          删除所有ACL权限

-d          设定默认ACL权限

-k          删除默认ACL权限

-R          递归设定ACL权限

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

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

[[email protected]~]# mkdir /project

[[email protected]~]# useradd  zhangsan  && passwd  zhansgan

[[email protected]~]# useradd       lisi           && passwd  zhangsan

[[email protected]~]# groupadd  tgroup

[[email protected]~]# gpasswd  -a zhangsan tgroup

Addinguser zhangsan to group tgroup

[[email protected]~]# gpasswd  -a lisi tgroup

Addinguser lisi to group tgroup

[[email protected]~]# tail -1 /etc/group

       tgroup:x:502:zhangsan,lisi

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

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

[[email protected]~]# chown -R   root:tgroup /project/

[[email protected]~]# chmod  -R 770 /project/

[[email protected]~]# ls /project/ -ld

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

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

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

[[email protected]t~]# useradd  st && passwd  st   //建立试听用户

[[email protected]~]# setfacl  -m user:st:rx /project/

-m  设定ACL

-R递归子目录

user:指定用户

st:系统用户

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

/project  目录名

[[email protected]~]# ls /project/ -ld

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

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

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

[[email protected]~]# getfacl  /project/

省略部分信息……

user::rwx

user:st:r-x

group::rwx

mask::rwx

other::---

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

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

[[email protected]~]#

[[email protected]~]# su - st

[[email protected]~]$ cd /project/

[[email protected]]$ ls

[[email protected]]$ touch 123

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

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

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

[[email protected]]$ exit

logout

[[email protected]~]# groupadd  tgroup2

[[email protected]~]# setfacl  -m group:tgroup2:rwx/project

[[email protected]~]# getfacl  /project/

省略部分内容……

group:tgroup2:rwx

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

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

[[email protected]~]# touch /project/123

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

[[email protected]~]# ls /project/  -l

总用量 0

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

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

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

[[email protected]~]# setfacl   -m default:user:st:rx /project/

[[email protected]~]# touch /project/456

[[email protected]~]# ls /project/456  -l

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

就是在user前面加入了default

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

什么是最大有效权限。

最大有效权限mask

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

图2

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

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

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

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

[[email protected]~]# setfacl  -m m:rx /project/

将默认的umask权限改为rx

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

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

[[email protected]~]# setfacl  -x group:tgroup2 /project

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

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

[[email protected]~]# setfacl  -b /project/

[[email protected]~]# ls /project/ -ld

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

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

这就是删除ACL权限。

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

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

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

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

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

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

[[email protected]]# touch test1 test2 test3

[[email protected]]# setfacl  -m user:st:rx -R  ../project/

[[email protected]]# 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权限就到这里了,都是一些常用的选项。

时间: 2024-10-14 06:38:56

Linux中ACL权限管理的相关文章

<实训|第十三天>linux中ACL权限控制以及磁盘配额,附编译属于自己的linux内核

[[email protected]~]#序言 首先讲讲昨天关于缩容失败,开不机的解决方法:ACL权限也算是一个很重要的知识点,不难,但是很实用:磁盘配额一般不需要自己弄,但是要懂得原理.剩下的就是编译属于自己的linux内核,根据自己的需求不论是硬件还是其他,你都可以定制,但是编译成功与否这个我不敢保证,我也编译了两次才成功的.  开班第十三天: [[email protected]~]#今天的课程大纲 1.缩容失败原因以及开不了机解决方法 2.Linux中ACL权限的详解 3.讲解一下磁盘配

Linux中ACL权限列表

1.ACL权限列表是什么? 为什么要使用ACL列表? 传统的权限仅有三种身份(owner,group,other)搭配三种权限(r,w,x),并没有办法单纯的针对某一个使用者或某一个群组来设定的权限需求,此时就是要使用ACL(文件访问控制列表,Acess Control List)这个机制.注意:因此目前ACL几乎已经默认加入在所有常见的Linux文件系统的挂载参数中(ext2/ext3/ext4/xfs等等),但rhtl6.0以及之前的版本默认不支持acl的功能.2有关facl的命令 查看权限

linux中ACL权限

1.ACL权限简介与开启 一.ACL权限是为了解决所有者/所属组/其他人三种身份不足的问题 二.查看分区ACL权限是否开启 dumpe2fs命令是查询指定分区详细文件系统信息的命令 dumpe2fs -h /dev/sda3 -h 仅显示超级块中信息,而不显示磁盘块组的详细信息 [[email protected] ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 14G 25G 36% / devtmpfs 9

Linux中文件权限管理

1 文件权限存在的意义系统最底层安全设定方法之一保证文件可以被可用的用户做相应操作 2 文件权限的查看ls -l file ##查看文件的属性.大小等详细信息ll file ##同上ls -d ##列出目录或文件本身,而不是目录或文件的内容ls -ld file ##组合使用,更加详细ll -d file ##同上 3.文件权限读取内容解释示例为目录文件 [1] : 文件的类型相似的参数类型 ##空文件d ##目录l ##软链接s ##socket 套接字 相当于门 一个出口或者入口b ##bl

Linux中的权限管理命令-chmod

命令名称:chmod 英文原意:change the permissions mode of a file 执行权限:所有用户 语法:chmod [{ugoa}{+-=}{rwx}][文件或目录] [mode=421][文件或目录] -R 递归修改 功能:修改目录或文件的权限 u:user(所有者) g:group(所属组) o:other(其他人) a:all(所有人) r:read(读) w:write(写) x:execute(执行) 如上图所示,对于文件test.txt,文件所有者有读写

linux中的权限管理命令

一. 改变文件或目录的权限:chmod 命令详解 命令名称:chmod 命令所在路径:/bin/chmod 执行权限:所有用户 语法:chmod [{ugoa}{+-=}{rwx}] [文件或目录]   [mode=421] [文件或目录]   -R 递归修改 功能:改变文件或目录权限 权限的数字表示 r ------ 4 w ------ 2 x ------ 1 rwxrw-r-- 7   6    4 实例 chmod g+w testfile #赋予文件testfile所属组写权限 ch

Android中的权限管理(基于uid gid gids setUid)

我们首先来说一下传统的Linux基于uid,gid的权限管理机制: 1.用户的uid gid gids: Ubuntu操作系统当前登陆的用户是jltxgcy,那么该用户的uid为jltxgcy,gid也是jltxgcy,那么gids怎么查看呢? 答案是使用命令:cat /etc/group | grep jltxgcy.如下图: 用户的gids的名字为adm,dialout,cdrom,plugdev,lpadmin,admin,sambashare.此本分请参考linux用户组./etc/gr

<实训|第九天>掌握linux中普通的权限控制和三种特殊的权限(sst),做合格的运维工程师

linux中,权限的学习是必不可少的,不论是作为一名运维工程师或者是单一的管理者,学习好linux中的权限控制,你就可以保护好自己的隐私同时规划好你所管理的一切. 权限的学习是很多的,不要认为自己已经把自己的隐私保护的很好,漏洞总是有的,侧面的攻击往往是难以防守的.所以大家跟我一起学习一下基础的权限控制,在后面也会有更多关于权限控制的知识点分享出来.谢谢各位的关注和支持!  开班第九天: 今天的课程大纲: linux系统中文件目录的基本权限控制 如何来修改默认的生成权限 三种特殊的权限(s,s,

Android中的权限管理(基于Permission ProtectionLevel)

1.什么是protectionlevel呢? 我们经常在AndroidManifest中使用权限,如果我们想让应用程序可以发短信,那么应该这样写: <uses-permission android:name="android.permission.SEND_SMS" /> 那么这个权限的定义是在哪里定义的呢?如下: frameworks/base/core/res/AndroidManifest.xml <permission android:name="a