<7>ACL(Access Control List,权限访问控制列表)
<1> 简单介绍:
1.在Linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录,即权限决定了用户对该文件的操作方式。
2.Linux文件的权限具体分为三种类别:属主的权限u、属组的权限g、其他人的权限o
3.每一种类别都具有自身可读、可写、可执行的权限(字母表示:r、w、x),可以分别对每一种类别的权限进行设置。
4.每一个文件只能属于一个用户和属组,若其它用户想要对文件进行操作,可以把其它用户添加到该文件的属组中。
<2>文件的详细信息
-rw-r--r--. 1 root root 0 Aug 4 11:37 file1
拆分解读:
1.- 表示文件类型为普通文件
2.rw-r--r-- 表示文件的权限 每三组为一类别,依次为属主权限:rw- 、属组权限:r-- 、其他用户权限:r--
3. 其后依次表示 文件访问控制列表(.)、硬链接次数为1、属主(root)、属组(root)、文件大小、文件最近一次的修改时间、文件名
<3>文件的一般权限(以表格形式进行说明)
权限 | 普通文件 | 目录文件 |
r | 可读取此文件的实际内容(cat查看文件) | 具有读目录结构列表的权限 |
w | 可编辑该文件的内容(vim,echo),但并不具备删除该文件本身的权限(删除文件由文件的上层目录控制,跟文件本身的权限无关。) | 具有删除、移动目录内文件的权限 |
x | 该文件具有可以被系统执行的权限 | 用户能否进入该目录 (cd),chmod 同时有w和x权限才可以创建、删除文件和目录 |
<4>修改文件的属主、属组
命令格式: 命令代码(示例):
chown 属主 文件名 chown xiaoming /usr/bin/passwd
chown 属主:属组 文件名 chown xiaoming:xiyouji file1
chgrp 属组 文件名 chgrp xiyouji mulu1
<5>修改文件权限
更改文件权限有两种方式(任选一种即可)
1、用权限字母(rwx)来设置权限
命令格式:chmod u/g/o/a =/+/- r/w/x 文件名
示例:文件属组权限更改为r-- 代码:chmod g=r 文件名 注 = 表示新权限覆盖旧权限
若文件属组权限增添 w 权限 代码:chmod g+w 文件名
同理chmod g-w 文件名 就表示删除属组 w 的权限
2、把权限字母 r 、w、 x依次用数字表示 4 、2、1 用权限数字来替代权限代码。
如更改文件属主权限为rw- 、属组权限为r--、其他用户权限为rw- 其命令为:
chmod 646 文件名
<6>特殊权限
1、 suid:u+s,让进程的所属者不再属于它的发起者,而是属于程序文件本身。(suid只对二进制文件有效;调用者对该文件有执行权;在执行过程中,调用者会暂时获得该文件的所有者权限;该权限只在程序执行的过程中有效)
示例:非root用户更改用户密码需执行命令passwd,passwd为外部命令,可执行文件为/usr/bin/passwd。当开始调用可执行文件后 此文件会变为进程 此时可执行文件的属主就是进程的属主,但进程去编辑用户密码配置文件(/etc/shadow)需要属主为root用户,否则无法编辑密码配置文件。但对passwd的可执行文件添加 u+s权限后 文件的属主就会为root用户 ,相应进程属主也跟着变为root,从而编辑用户的密码配置文件修改密码。
流程图如下:
2、sgid:g+s,对于普通文件,以组的权限执行,修改/usr/bin/touch的g+s,touch文件后文件所属组为root(作用于普通文件时,和suid类似);对于目录文件,目录的属组是谁,在目录下创建的文件的属组是目录的属组。
示例:在mulu1中创建其他文件 ,目录的属组为xiyouji,对该目录文件设置g+s权限后,在该目录下创建的其它文件的属组也为xiyouji。
3、sticky:o+t,对目录文件设置o+t权限后,可删除自己在该目录下创建的文件,不能够删除其他用户在同目录里创建的文件。
命令格式:
chmod o+t 目录文件名
<7>ACL(Access Control List,权限访问控制列表)
可以对某个文件设置该文件具体的某些用户的权限,意思就是通过ACL可以对一个文件权限做扩展,可以让不同的用户对某个文件有不同的权限。
<1>获取文件的访问控制信息: getfacl 文件名
<2>修改文件的acl:
1、修改用户的权限 setfacl -m u:用户名:权限 文件名/目录名
示例:setfacl -m u:redhat:rw file1 表示跟redhat用户单独设置rw的权限
2、修改组的权限 setfacl -m g:组名:权限 文件名
示例: setfacl -m g:redhat:rw file1
<3>删除acl所有配置信息:setfacl -b 文件名
<4>单独删除用户:setfacl -x g/u:组名/用户名 文件名