主题
Linux ACL(Access Control List)权限管理
引言
在传统的Linux文件系统权限管理中,我们主要依赖于用户所属的用户组以及rwx(读、写、执行)权限来控制文件和目录的访问。然而,这种基于用户和组的权限控制有时无法满足复杂环境下的细粒度权限管理需求。为此,Linux系统引入了ACL(Access Control List)机制,允许我们为文件或目录设置更为灵活和详细的权限规则。
什么是ACL?
ACL是一种访问控制技术,它扩展了基本的UNIX文件许可权限模型,使得单个文件或目录可以针对多个用户或用户组设置不同的访问权限。这意味着除了所有者、所属组和其他人这三类基本权限外,还可以为特定的用户或组设置额外的权限。
ACL的基本概念
访问项(ACE, Access Control Entry):ACL中的每个权限规则称为一个访问项,它定义了一个主体(用户或用户组)对某个对象(文件或目录)的访问权限。
默认ACL与访问ACL:
默认ACL:应用于目录上,当在该目录下创建新文件或子目录时,这些新对象会继承该目录的默认ACL设置。
访问ACL:直接应用于文件或目录上,控制对该文件或目录本身的访问权限。
如何启用ACL
大多数现代Linux发行版已经内置了ACL支持,但需要确保文件系统(如ext4、XFS等)支持ACL,并且在挂载时启用了ACL选项。可以通过编辑/etc/fstab文件,在相应分区的挂载选项中添加acl,例如:
plaintext
/dev/sda1 /mnt/data ext4 defaults,acl 0 21
之后重新挂载或重启系统以使设置生效。
使用ACL命令
设置ACL
setfacl 命令用于设置ACL规则。
为文件或目录添加ACL规则:
plaintextsetfacl -m u:user:rwx /path/to/file setfacl -m g:teacher:r-- /path/to/file1
2上述命令为用户
user添加了读、写、执行权限到指定文件。设置默认ACL:
plaintext
setfacl -d -m g:group:rwx /path/to/directory1
这将使得在/path/to/directory目录下创建的新文件和目录自动继承group组的读、写、执行权限。
查看ACL
- getfacl 命令用于查看文件或目录的ACL设置。
plaintext
getfacl /path/to/file_or_directory1
删除ACL
- 使用
setfacl命令删除特定的ACL规则:
plaintext
setfacl -x u:user /path/to/file1
上述命令删除了用户user在指定文件上的ACL规则。
注意事项
ACL的使用增加了系统的灵活性,但也可能带来管理上的复杂性,尤其是当ACL规则众多时。
不是所有的文件系统都支持ACL。在使用前,请确认你的文件系统是否兼容。
在进行ACL操作时,务必谨慎,错误的ACL设置可能导致安全漏洞或访问问题。
结论
ACL为Linux系统提供了强大的权限管理能力,使得系统管理员能够更精确地控制文件和目录的访问权限。通过合理利用ACL,可以有效提升系统的安全性与灵活性。掌握ACL的配置和管理对于维护复杂的Linux环境至关重要。
练习:
教学系统
查看teach.sys中文件的权限
bash
-rw-r--r--. 1 csh teacher 13 11月 28 10:10 stu1_score.txt
-rw-r--r--. 1 csh teacher 12 11月 28 10:11 stu2_score.txt1
2
2
学生可以互相查看成绩吗?
目标:学生只能查看自己的成绩、教师可以查看所有学生的成绩
移除stu1_score.txt中其他人的读权限
bash
chmod o-r stu1_score.txt1
切换到stu1,尝试使用cat查看stu1_score.txt,提示权限不够
bash
[stu1@localhost teach_sys]$ cat stu1_score.txt
cat: stu1_score.txt: 权限不够1
2
2
切换回root用户,通过setfacl给stu1增加可读stu1_score.txt的权限
bash
setfacl -m u:stu1:r-- stu1_score.txt # 设置后再使用getfacl查看一下权限1
切换到stu1,尝试使用cat查看stu1_score.txt,可以查看了
切换到stu2,尝试使用cat查看stu1_score.txt,提示如下
bash
[stu2@localhost teach_sys]$ cat stu1_score.txt
cat: stu1_score.txt: 权限不够1
2
2
学生2同理
学生管理系统
对于学生管理系统student_sys,现有的权限如下
bash
-rw-r--r--. 1 stu1 student 13 11月 28 10:19 stu1_info.txt
-rw-r--r--. 1 stu2 student 13 11月 28 10:20 stu2_info.txt1
2
2
学生可以互相查看吗?
想达到的一个目标:
其他人都无权查看
学生可以编辑或者查看自己的个人信息,但是不能查看别人的
辅导员可以查看所有学生的个人信息
1.首先,实现其他人无权查看
bash
chmod o-r stu1_info.txt stu2_info.txt1
再次查看权限信息如下
bash
-rw-r-----. 1 stu1 student 13 11月 28 10:19 stu1_info.txt
-rw-r-----. 1 stu2 student 13 11月 28 10:20 stu2_info.txt1
2
2
2.实现学生不能互相查看
bash
chmod g-r stu1_info.txt stu2_info.txt
# 或者
chmod 600 stu1_info.txt stu2_info.txt1
2
3
2
3
再次查看权限
bash
-rw-------. 1 stu1 student 13 11月 28 10:19 stu1_info.txt
-rw-------. 1 stu2 student 13 11月 28 10:20 stu2_info.txt1
2
2
3.实现辅导员可以查看所有学生的个人信息
bash
setfacl -m g:instructor:r-- stu1_info.txt stu2_info.txt1
再次查看权限,+号表示该文件在普通权限之外,还有acl权限
bash
-rw-r-----+ 1 stu1 student 13 11月 28 10:19 stu1_info.txt
-rw-r-----+ 1 stu2 student 13 11月 28 10:20 stu2_info.txt1
2
2
查看stu1_info.txt的acl权限
bash
[root@localhost student_sys]# getfacl stu1_info.txt
# file: stu1_info.txt
# owner: stu1
# group: student
user::rw-
group::---
group:instructor:r--
mask::r--
other::---1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
多了辅导员的权限
切换到lwd
尝试查看学生1的个人信息,即如下
bash
[lwd@localhost student_sys]$ cat stu1_info.txt
我是张三1
2
2
查看成功