您现在的位置是:首页 >技术杂谈 >[Linux]文件系统权限与访问控制网站首页技术杂谈

[Linux]文件系统权限与访问控制

逐梦苍穹 2023-06-17 20:00:02
简介[Linux]文件系统权限与访问控制

​⭐作者介绍:大二本科网络工程专业在读,持续学习Java,输出优质文章
⭐作者主页:@逐梦苍穹
⭐所属专栏:Linux基础操作。本文主要是分享一些Linux系统常用操作,内容主要来源是学校作业,分享出来的同时自己也得到复习。
⭐如果觉得文章写的不错,欢迎点个关注一键三连😉有写的不好的地方也欢迎指正,一同进步😁

Linux文件系统的权限和访问控制是系统安全的关键组成部分之一。
本文将深入探讨Linux文件系统权限和访问控制的重要性、权限类型以及如何设置和管理文件系统权限。

1、文件系统权限和访问控制的重要性

  在Linux系统中,每个文件和目录都有一个所有者和一组访问权限。这些权限用于限制用户对文件和目录的访问和操作,以保护系统和数据的安全性。如果没有正确的权限设置和访问控制,用户可能会访问和更改他们没有权限访问的文件和目录,从而导致系统和数据的损坏或泄漏。

2、常见命令

命令说明
chmod修改文件或目录的权限
chown修改文件或目录的所有者
chgrp修改文件或目录的所属组
ls列出当前目录下的文件和子目录
id显示当前用户的用户ID和组ID
umask设置新创建文件的默认权限
sudo以超级用户身份运行命令
su切换用户身份
passwd修改用户密码
useradd添加新用户
usermod修改用户属性
groupadd添加新组
groupmod修改组属性

在这里插入图片描述

3、权限类型

Linux文件系统的权限分为三个主要类型:

  1. 用户权限:文件和目录的所有者对文件和目录有特定的访问权限,包括读、写和执行权限。
  2. 组权限:文件和目录的所属组对文件和目录也有特定的访问权限,包括读、写和执行权限。用户可以属于多个组。
  3. 其他用户权限:除了所有者和所属组之外的所有其他用户都属于其他用户,也有一组特定的访问权限,包括读、写和执行权限。

4、权限设置和管理

  使用chmod命令更改权限:chmod命令是用于更改文件和目录权限的最常用命令之一。使用chmod命令可以更改文件和目录的读、写和执行权限。例如,chmod 755 filename将文件filename的所有者设置为可读、写和执行,所属组和其他用户设置为可读和执行。

  使用chown命令更改文件所有者:chown命令用于更改文件和目录的所有者。例如,chown user filename将文件filename的所有者更改为用户user。

  使用chgrp命令更改文件所属组:chgrp命令用于更改文件和目录的所属组。例如,chgrp groupname filename将文件filename的所属组更改为组groupname。

  使用umask命令设置默认权限:umask命令用于设置新文件和目录的默认权限。例如,umask 022将设置新文件的默认权限为644,新目录的默认权限为755。

5、基本权限和归属


权限管理命令
1、更改文件或目录权限命令: chmod
2、改变文件或目录所有者命令: chown
3、改变文件或目录所属组命令: chgrp
4、显示、设置文件的默认权限命令:umask

在Linux文件系统中,每个文件和目录都有一个所有者和一个所属组,并且设置了一组基本权限。
这些权限控制了谁能访问该文件或目录以及他们可以执行的操作。
文件和目录的基本权限通常用3个数字表示,每个数字代表一个不同的用户组:所有者、所属组和其他用户。

基本权限包括读、写和执行权限,分别用数字4、2和1表示。每个用户组可以使用这些数字来指定他们对文件或目录的访问权限。例如,如果一个文件设置了权限为644,那么它的所有者有读、写权限,所属组和其他用户只有读权限。

在这里插入图片描述

6、特殊权限

在这里插入图片描述
除了基本的文件权限和文件所有权之外,Linux文件系统还支持特殊权限,包括SetUID、SetGID和Sticky Bit。

权限类型对文件的影响
setUID文件执行时,以拥有者的权限执行
getUID文件执行时,以执行者的权限执行
Sticky Bit仅对目录起作用,只有文件所有者或超级用户可以删除该目录中的文件

  SetUID是一种特殊权限,可以设置在可执行文件上。
  当一个用户运行该文件时,该文件会以文件所有者的身份运行,而不是以运行用户的身份运行。这可以使某些程序在运行时获得更高的权限,例如运行passwd程序以更改用户密码。
  在默认情况下,SetUID仅适用于可执行文件,并且只对二进制文件有效。

  SetGID也是一种特殊权限,可以设置在目录上。当一个用户在该目录下创建文件或目录时,新创建的文件或目录将继承该目录的组所有权,而不是用户的组所有权。
  这可以使多个用户可以共享访问同一个目录或文件,而无需每个用户都设置相同的组所有权。

  Sticky Bit是另一种特殊权限,可以设置在目录上。当Sticky Bit被设置在一个目录上时,只有文件所有者和超级用户才能够删除该目录中的文件。
  这可以防止用户意外删除其他用户的文件。Sticky Bit通常被用于公共目录,例如/tmp,以确保文件仅被创建者或管理员删除。

以下是一个简单的图示,说明了文件权限和所有权的概念:
在这里插入图片描述

7、ACL权限

在这里插入图片描述
Access Control Lists(ACLs)是Linux文件系统的一种访问控制机制,允许在基本的文件权限之上为特定用户或组添加额外的权限。ACLs允许管理员在文件或目录上定义多个访问控制项,并赋予不同的用户或组不同的权限,从而提供更细粒度的访问控制。

ACLs是Linux扩展文件系统中的一种特性。支持ACL的文件系统包括ext3、ext4、XFS和ReiserFS等。ACLs由ACL条目组成,每个ACL条目包括一个或多个访问者、一个或多个访问权限,以及一个可选的默认访问权限。访问者可以是用户或组。

在使用ACL之前,需要确保文件系统已经挂载并且支持ACL。可以通过运行命令mount来检查文件系统是否挂载了ACL支持。如果支持ACL,文件系统选项中将会包含acl选项。

要添加ACL权限,可以使用setfacl命令。例如,下面的命令将为用户jane添加对文件/home/user/file.txt的读取和写入权限:

setfacl -m u:jane:rw /home/user/file.txt

这将创建一个新的ACL条目,将用户jane添加为访问者,并授予读取和写入权限。要查看文件的ACL权限,可以使用getfacl命令:

getfacl /home/user/file.txt

输出将包括基本权限和任何ACL权限。要删除ACL权限,可以使用setfacl命令的-x选项。例如,下面的命令将删除用户jane对文件/home/user/file.txt的ACL权限:

setfacl -x u:jane /home/user/file.txt

除了setfacl和getfacl命令,还有其他一些与ACL相关的命令。例如,chacl命令可以用于更改ACL权限,ls命令可以用于显示文件的ACL权限等等。

需要注意的是,ACLs是一个强大的工具,但也很容易被误用。过度使用ACLs可能导致混乱的权限结构,难以维护和管理。因此,在使用ACLs时,需要仔细考虑哪些用户或组需要哪些访问权限,并尽量保持权限结构的简单性和一致性。

8、思考题

假设test1,test2,test3同属于testgroup组,请说明下面两个文件的所有者及相关用户的权限?

-rw-r–r-- 1 root root 238 Jun 18 17:22 test.txt
-rwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 exam.txt

对于第一个文件 “test.txt”,所有者为 root 用户,所属组也是 root 组。权限位是 “-rw-r–r–”,依次表示所有者、所属组和其他用户对该文件的读、写、执行权限。因此,所有者 root 用户对该文件具有读写权限,所属组和其他用户只有读取权限。
对于第二个文件 “exam.txt”,所有者为 test1 用户,所属组为 testgroup 组。权限位是 “-rwxr-xr–”,依次表示所有者、所属组和其他用户对该文件的读、写、执行权限。因此,所有者 test1 用户对该文件具有读、写、执行权限,所属组 testgroup 组的用户对该文件具有读、执行权限,其他用户只有读取权限。

有以下目录,请问testgroup这个群组的成员与其他人(others)是否可以进入本目录?

drwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 groups/

对于这个目录 “groups”,所有者是 test1 用户,所属组是 testgroup 组,权限位是 “drwxr-xr–”。因此,所有者 test1 用户可以进入该目录,并访问其中的文件,因为他拥有读取目录的权限。所属组 testgroup 的用户也可以进入该目录,并访问其中的文件,因为他们拥有该目录的读取和执行权限。而其他用户(others)则不能进入该目录,因为他们没有该目录的执行权限。

如果有些文件你不希望被其他人看到,那么应该将文件的权限设定为?
可以将该文件的权限设置为只有你自己的用户可以读、写和执行,而其他用户则没有权限。可以使用命令 “chmod” 来修改文件的权限。这样设置权限后,其他用户就无法看到该文件,但是管理员用户仍然可以访问该文件,因为管理员用户拥有最高权限

drwxr–r-- 3 root root 4096 Jun 25 08:35 .ssh 用户whj能否切换到该目录?
该目录的权限位是 “drwxr–r–”。由于该目录的所有者为 root 用户,所属组也是 root 组,因此:所有者 root 用户对该目录有读、写和执行权限;所属组 root 组的用户只对该目录有读权限;其他用户对该目录没有任何权限。因此,用户 “whj” 不能切换到该目录,因为他没有该目录的执行权限。

⑤假设有个账号名称为whj,家目录在/home/whj/,whj对此目录具有[rwx]的权限。若在此目录下有个名为root.data的文件,该文件的权限如下

-rwx------ 1 root root 4365 Sep 19 23:20 root.data

请问whj对此文件的权限为何? 可否删除此文件?
由于该文件的所有者为 root 用户,所属组也是 root 组,因此:所有者 root 用户对该文件具有读、写和执行权限;所属组 root 组的用户没有任何权限;其他用户也没有任何权限。因此,用户 “whj” 对该文件没有任何权限,不能读取、写入或者执行该文件,也不能删除该文件。

9、总结

  在Linux系统中,文件系统的权限和访问控制对系统和数据的安全至关重要。
  通过正确设置和管理文件和目录的权限,可以确保用户只能访问他们被授权访问的文件和目录,从而保护系统和数据的安全。
  熟练掌握Linux文件系统权限和访问控制的知识,是每个Linux系统管理员必备的技能之一。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。