纸上得来终觉浅, 绝知此事要躬行。
主页:June-Frost
专栏:Linux入门
【从零开始学习Linux】系列均属于Linux入门,主要包含Linux操作系统下的指令、操作、权限以及开发工具,使得拥有基本编写代码的能力。
该文章主要了解Shell外壳(理论)及用户权限,该系列分为两部分进行总结叙述。第一部分包含了shell外壳的理论知识以及部分权限知识,请看这里【从零开始学习Linux】一文带你了解Shell外壳及用户权限(一),而该篇为第二部分,将继续详细讲述用户权限的相关知识。
在Linux系统中,文件权限和用户隶属角色是两个非常重要的概念。通过更改文件权限,我们可以控制谁可以读取、写入或执行特定文件或目录;而通过更改用户隶属角色,我们可以改变文件的拥有者和所属组,从而更好地管理文件和目录的安全性和访问权限。
在第一部分中,我们已经介绍了如何更改文件权限,包括使用chmod
命令以符号表示法和数字表示法来修改文件的读、写和执行权限。这些操作可以帮助我们确保只有授权的用户能够访问特定的文件或目录,从而提高系统的安全性。
然而,仅仅更改文件权限并不足以保护文件免受未经授权的访问。如果系统受到攻击,攻击者可能会尝试通过提升自己的用户隶属角色来获取更高的权限。所以,我们需要了解如何更改文件权限隶属的角色。
在Linux中,你可以使用chown
命令来更改文件或目录的所有者和所属组。
chown
- 语法:
chown [选项] 新所有者 文件/目录
- 功能:更改文件或目录的所有者和所属组。
- 说明:① 新所有者可以是用户名或用户ID,也可以是用户名和组名的组合,用空格隔开。② 只有超级用户(root)或文件的当前拥有者(被授权) 才能更改文件的所有者和所属组。
如果想同时修改拥有者和所属组,可以使用 用户名:组名 的组合。
一些常用的选项:
-R
递归地更改目录及其子目录中的所有文件的所有者和所属组。-v
显示详细的操作信息。-c
只显示发生更改的文件或目录的操作信息。-f
忽略错误信息,不显示错误信息。
此外,在Linux中chgrp
也可以修改用户隶属角色。
chgrp
- 语法:
chgrp [参数] 用户组名 文件名
- 功能:修改文件或目录的所属组。
- 常用选项:
-R
递归修改指定目录下的所有文件及子目录。
对 这两个命令只有超级用户(root)或文件的当前拥有者(被授权) 才能更改 进行说明:
在Linux系统中,文件的拥有者和所属组是与系统安全和权限管理紧密相关的属性。为了确保系统的安全性和稳定性,只有具有管理员权限的root用户或其授权(被添加到白名单)的用户才能更改文件的拥有者和所属组。
普通用户在没有适当权限的情况下更改文件的拥有者或所属组可能会导致系统不稳定或其他用户的隐私泄露。此外,为了防止恶意用户更改重要系统文件的拥有者和所属组,从而获得不当的权限,Linux系统采取了严格的权限管理策略。
当普通用户需要进行此类操作时,他们可以通过以下方法获得临时的root权限:
su
命令切换到root用户。sudo
命令执行特定的操作并获得root的权限。即使获得了root权限,用户也应谨慎操作,确保了解正在执行的操作的后果。
文件类型可以反应出该文件属于哪一种类别,可以被哪些软件操作。在Windows操作系统中,文件类型通常使用后缀标识,但是Linux系统下的文件类型是通过文件属性字段来体现的,文件属性字段由10个字符组成,后面九个字符表示每个身份对应的权限,而第一个字符表示文件类型。
文件类型可以分为以下几种:
-
普通文件:这是Linux中最常见的一种文件类型,用于存储文本、数据等。可以细分为纯文本文件,源代码,图片,视频,库,可执行文件等。
d
目录文件。
b
块设备文件:磁盘被视为块设备文件的一种常见形式,因为它具有块设备的特性,如支持随机访问、可以独立地读写等。
c
字符设备文件:字符设备通常没有内部缓冲区,数据会立即传输到设备或从设备中读取,所以对字符设备的读写操作是实时的,不会有额外的延迟。同时,字符设备通常是顺序访问的,即按照数据的顺序进行读写操作,不支持像块设备那样的以块为单位进行读写。键盘,显示器,打印机等就是常见的形式。
l
软链接:链接文件使用ln
命令创建,软链接(也称为符号链接)则类似于Windows的快捷方式,它指向目标文件或目录的路径,可以随时修改和更新。
p
管道文件:被用于进程间通信的一种特殊文件类型。s
套接口文件(Socket):用于进程间网络通信。 通过使用file
指令可以辨识文件类型。
⏰注意:对于Linux系统来说,文件类型是不看后缀标识的,但是在上层工具上(例如,编译器)是需要后缀的。此外,在应用级别上,文件名后缀可以方便地表示出文件的类型、内容或者格式,对于识别和管理文件具有很大的帮助。
目录权限是文件系统中的另一个重要组成部分,它决定了用户对目录及其内容的访问和操作能力。与文件权限类似,目录权限也分为读、写和执行三种基本权限,分别对应着用户对目录的查看、修改和执行操作。
对一个目录来说:
注意:没有写权限是无法改目录内的文件名的,但是可以修改目录内的文件权限。这是因为在改变文件的名称时,操作系统实际上是在删除原来的文件名并将其替换为新的文件名。这个操作涉及到在目录中修改文件记录,需要写入权限才能完成。但是修改文件权限只需要更新元数据即可,这些元数据通常不需要写入权限就可以查看和修改。
每当我们默认创建一个文件时,会发现默认权限显示为rw-rw-r--
,反应到八进制数字表示法就是664,创建一个目录时,发现默认权限为rwxrwxr-x
,反应到八进制数字表示法就是775。
这种现象的出现是初始权限和权限掩码的共同作用下形成的。为了防止未经授权的用户执行文件并且大部分文件也都不是可执行文件,所以系统默认创建的文件是不具有执行权限,初始权限就表示为666,但是对于一个目录,它本身就是用来存储文件和子目录的,需要允许其他用户在此目录下创建、删除和修改文件,所以目录的初始权限就是777。
在Linux系统下,提供了umask权限掩码,它的存在让用户可以定制一个文件被创建时的默认权限,它是一个由3个八进制的数字所组成的值,将初始权限屏蔽权限掩码后,即可产生建立文件时预设的权限。
在shell中可以直接运行umask命令来查看当前shell的umask值。
为了让大家更好的理解,来看图
如果umask中1的部分对应的初始权限本身就是0,就不需要处理了。我们可以将最终形成的默认权限看作是通过 起始权限&(~umask)
得来的。
在Linux系统中,/tmp目录作为系统的临时文件夹,可以实现多个用户之间的文件共享,为了保证这种功能,会将other对应的读,写,执行权限全部放开。
但是在前文中,我们已经了解到如果目录中有写权限,是可以对内部文件进行删除的。所以,为了防止普通用户随意删除或移动其他用户的临时文件,系统给共享目录的other新增了一个粘滞位(t)。
粘滞位不仅拥有执行(x)的意义,同时进一步对目录权限进行特殊限定:只有该目录下的文件的所有者和超级管理员(root)可以删除或移动该文件,即使其他用户有该目录的写权限,也无法删除或移动不属于他们的文件。
文章到这里就结束了,如果对你有帮助,你的点赞将会是我的最大动力,如果大家有什么问题或者不同的见解,欢迎大家的留言~