本文为Ubuntu Linux操作系统- 第二十期~~
其他特殊权限: 【SUID 权限】,【SGID 权限】,【SBIT权限】
更多Linux 相关内容请点击👉【Linux专栏】~
主页:【练小杰的CSDN】
文章目录
- ACL权限的概念
- [ACL 设置文件操作权限的具体方法](#ACL 设置文件操作权限的具体方法)
-
- ACL的基本操作命令
- [`setfacl` 的参数](#
setfacl
的参数)
- 实例1
- 实例2
- 实例3
- 实例4
ACL权限的概念
- Linux 系统传统的权限控制方式就是前面所讲的基本权限,利用 3 种用户身份(文件所有者、所属群组、其他用户)配合 3 种文件操作权限(读 r,写 w,访问 x)实现。
- 在实际应用中,以上这 3 种身份根本不够用。
例如:有一个文件file
,它的基本权限是"-rwx--w--w-. lxj lxj
",lxj
是文件file
的属主,对file有rwx权限,file
的组属主和其它人则只有w
权限 ,GEM可能是lxj
群组成员也可能是其他用户,但GEM
和lxj
关系比较铁,他跟lxj
商量能不能搞搞特殊,让他对file也有rwx权限,问题是GEM不是file的属主,他只有w权限的,那么这个问题如何解决呢?这样,GEM的问题就可以通过文件的ACL
解决!
ACL权限作用
- ACL 权限是
Access Control List
的缩写。- 主要作用:在提供文件基本权限
rwx
之外更细部权限的设置, 为了解决个别用户对某一文件或目录权限不足的情况。- ACL 权限可以针对单一使用者、单一文件或目录进行设置, 有了ACL权限,使组外的用户和非所有者用户也能对某个文件或目录拥有指定的权限。
ACL 特点
- ACL用于linux复杂的用户权限控制当中。文件的基本权限包括文件属主、属组、其他用户三种设置方式,除了文件属主外,对于其他用户则通过文件属组和其他用户的方式指定权限。
- 文件的基本权限不能精确控制每个用户的权限,如果希望对某个指定的用户进行单独的权限控制,就需要用到文件的ACL。
- 使用者 (user):可以针对使用者来设置权限
- 群组 (group):针对群组为对象来设置其权限
- 默认属性(mask):还可以针对在该目录下在建立新文件/目录时,规范新数据的默认权限,这个内容我们会安排在后续节学习。
- ACL生效优先级别:所有者,自定义用户,自定义组,其他人。
- Centos 7系统后,不管文件系统是否在安装系统时被建立都支持ACL。
- acl权限不能超过mask的值。
⚠️注意
- ACL可以对普通文件和目录进行设置,也可以对目录设置了 ACL,此时目录中的文件会继承其 ACL权限
- 当这个目录中的文件已经设置了 ACL,那么这个文件不再继承其所在目录的 ACL。
ACL 设置文件操作权限的具体方法
操作 ACl 权限,常用
setfacl
和getfacl
这2 个命令,前者用于设置文件或目录 ACL 权限,后者用于查看ACL权限是否配置成功。
ACL的基本操作命令
- 设置ACL权限之前,查看文件或目录是否设置了ACL
powershell
ls -l
如果权限一栏后面有个加号,说明文件被设置了ACL规则。如:
-rw-rw-r--+ 1 root root 0 Jan 6 11:01 testfile
- 查看ACL权限的详细信息,命令格式:
shell
getfacl 文件/目录名
- 举例
shell
[root@localhost user1]# getfacl testfile
# file: testfile
# owner: root
# group: root
user::rw-
user:user1:rw-
group::r--
mask::rw-
other::r---
可以看到,用户user1与文件属主root有相同的权限,其它用户则只有r权限。
getfacl 命令用于查看文件或目录当前设置的 ACL 权限信息,getfacl 命令的使用非常简单,且常和 setfacl 命令一起搭配使用。
- 设置ACL权限:
setfacl
命令格式如下:
shell
setfacl [参数] 权限 文件/目录名
setfacl
的参数
选项-m
- 设置 myuser 用户对文件test具有 rx 权限
shell
setfacl -m u:myuser1:rx test
- 设置组
project
对com_ project
目录具有rx
权限
shell
setfacl -m g:project:rx /user/com_project
功能:修改或设置acl权限,包括
1.给用户设置 ACL 权限,参数使用 "u:用户名:权限" 的格式
2.给组设置 ACL 权限,参数使用 "g:组名:权限" 格式
选项 -x
- 删除 myuser1 用户对文件test的 ACL 权限
shell
setfacl -x u:myuser1 test
- 删除群组project对 com_project 目录的 ACL 权限
shell
setfacl --x g:project /user/com_project
功能:
1.删除指定用户(参数格式
u:用户名
)的 ACL 权限2.删除指定群组(参数格式
g:群组名
)的 ACL 权限
选项-b
- 删除有关 com_project 目录的所有 ACL 权限
shell
setfacl --b /user/com_project
功能:删除所有的acl权限
选项-k
- 删除文件test中缺省的acl规则。如果没有缺省规则,将不提示。
shell
setfacl -k test
选项 -d
- 设定默认 ACL 权限,命令格式:
1.对用户:
setfacl -m d:u:用户名:权限 文件名
2.对群组:
setfacl --m d:g:群组名:权限
⚠️注意:本参数只对目录生效,指目录中新建立的文件拥有此默认权限
- 表示myuser1用户对com_project 目录中新建立的文件拥有 rx 权限
powershell
setfacl --m d:u:myuser1:rx /user/com_project
选项 -R
- 递归设定 ACL 权限,指设定的 ACL 权限会对目录下的所有子文件生效,命令格式为:
1.对用户:
setfacl -m u:用户名:权限 -R 文件名
2.对群组:
sefacl --m g:群组名:权限
- 表示 myuser1用户对已存在com_project目录中的文件和子目录都拥有 rx 权限
shell
setfacl -m u:myuser1:rx -R /user/com_project
⚠️注意:区分-d
参数指新建立的文件或目录可以继承父目录的ACL,-R
指已有的文件或目录!
实例1
前面已创建 /user/com_project目录,现在将这个目录给用户user1递归设置默认的ACL权限。
shell
[root@localhost user]# ll
drwxrws---. 4 root project 84 Jul 2 22:14 com_project
[root@localhost user]# id user1
uid=1001(user1) gid=1001(user1) groups=1001(user1)
[root@localhost user]# setfacl -m d:u:user1:rwx -R ./com_project
- 设置ACL权限后,查看目录com_project的权限
powershell
[root@localhost user]# getfacl com_project
# file: com_project
# owner: root
# group: project
# flags: -s-
user::rwx
group::rwx
other::---
default:user::rwx
default:user:user1:rwx
default:group::rwx
default:mask::rwx
default:other::---
- 查看上级目录user的权限,可以看到多了一个"
+
"号!
powershell
[root@localhost user]# ll
drwxrws---+ 4 root project 84 Jul 2 22:14 com_project
- 删除默认acl
powershell
[root@localhost user]# setfacl -k com_project
- 再次查看目录user的权限,这时,"
+
"号没有了!
powershell
[root@localhost user]# ll
drwxrws---. 4 root project 84 Jul 2 22:14 com_project
实例2
- 设置文件的ACL :
创建目录/user1和用户user1,在这个目录下创建文件testfile,只有文件属主root具有w权限。
然后设置用户user1对文件testfile
的ACL的w权限,测试用户user1是否具有w权限。
shell
[root@localhost user1]# touch testfile
-rw-r--r--. 1 root root 0 Jun 11 00:24 testfile
[root@localhost user1]# setfacl -m u:user1:rw testfile
[root@localhost user1]# getfacl testfile
# file: testfile
# owner: root
# group: root
user::rw-
user:user1:rw-
group::r--
mask::rw-
other::r--
[root@localhost user1]# chmod u+s /usr/bin/vim
[root@localhost user1]# su user1
[user1@localhost user1]$ vim testfile
可以发现,用户user1可以编辑修改文件testfile了
实例3
- 普通用户设置文件的ACL:
创建文件testfile1和用户user2,将其属主改为user1,属组改为user1,只有文件属主user1具有w权限,将系统切换到user1用户,然后对user2设置ACL的w权限,将系统切换到user2用户后测试是否可以编辑testfile1文件。
powershell
[root@localhost user1]# touch testfile1
-rw-r--r--. 1 root root 0 Jun 11 02:48 testfile1
[root@localhost user1]# chown user1:user1 testfile1
-rw-r--r--. 1 user1 user1 0 Jun 11 02:48 testfile1
[root@localhost user1]# su user1
[user1@localhost user1]$ setfacl -m u:user2:w testfile1
[user1@localhost user1]$exit
[root@localhost user1]# su user2
[user2@localhost user1]$ vim testfile1
这时,用户user2 有w权限(写权限),可以修改文件内容,即 user2 可以成功使用 vim 打开并编辑这个文件。
实例4
- 设置目录的ACL
创建目录/user2,将权限设置为
drwx------
,切换到用户user1后,观察是否可以进入这个目录。然后对用户user1设置目录/user2的ACL的x权限,再观察用户user1是否可以进入这个目录。
- 如下所示,切换到普通用户
user1
时,可以进入目录/user2
shell
[root@localhost /]# mkdir user2
drwxr-xr-x. 2 root root 6 Jun 11 03:26 user2
[root@localhost /]# chmod 600 user2
drw-------. 2 root root 6 Jun 11 03:26 user2
[root@localhost /]# su user1
[user1@localhost /]$ cd user2
bash: cd: user2: Permission denied(禁止进入/user2)
[root@localhost /]# setfacl -m u:user1:x user2
[root@localhost /]# su user1
[user1@localhost /]$ cd user2
至此,Linux系统的特殊用户文件权限之ACL权限控制已经讲完了😆
如果还想了解更多,查看主页【练小杰的CSDN】!!!
明天再见,各位🧍♂️大佬们~~