了解Linux文件权限
尽管基于Linux的系统已经内置了许多良好的安全功能,但是在授予本地访问权限时可能存在一个非常重要的潜在漏洞 - 这是由于用户未向文件和目录分配正确权限而导致的基于文件权限的问题。因此,基于对适当权限的需求,我将介绍分配权限的方法,并向您展示可能需要进行修改的一些示例。
基本文件权限
许可组
每个文件和目录都有三个基于用户的权限组:
- owner - Owner权限仅应用文件或目录的所有者,它们不会影响其他用户的操作。
- group - 组权限仅适用于已分配给文件或目录的组,它们不会影响其他用户的操作。
- 所有用户 - “所有用户”权限适用于系统上的所有其他用户,这是您要观看最多的权限组。
许可类型
每个文件或目录都有三种基本权限类型:
- read - 读取权限是指用户读取文件内容的功能。
- write - 写入权限是指用户编写或修改文件或目录的功能。
- execute - 执行权限会影响用户执行文件或查看目录内容的能力。
查看权限
您可以通过检查您喜欢的GUI文件管理器中的文件或目录权限(我在此不会介绍)或在终端中查看\“ls -l \”命令的输出以及在包含文件或文件夹的目录。
命令行中的权限显示为:_rwxrwxrwx 1 owner:group
-
用户权限/权限
- 我用下划线标记的第一个字符是可以改变的特殊权限标志。
- 以下三个字符集(rwx)用于所有者权限。
- 第二组三个字符(rwx)用于组权限。
- 第三组三个字符(rwx)用于“所有用户”权限。
- 在该分组之后,整数/数字显示文件的硬链接数。
- 最后一部分是所有者和组分配,格式为所有者:组。
修改权限
在命令行中,使用命令chmod编辑权限。您可以显式分配权限,也可以使用二进制引用分配权限,如下所述。
明确定义权限
要明确定义权限,您需要引用权限组和权限类型。
使用的权限组是:
潜在的赋值运算符是+(加号)和 - (减号); 这些用于告诉系统是否添加或删除特定权限。
使用的权限类型是:
- r - 阅读
- w - 写
- x - 执行
因此,举个例子,假设我有一个名为file1的文件,该文件当前的权限设置为_rw_rw_rw,这意味着所有者,组和所有用户都具有读写权限。现在我们要删除所有用户组的读写权限。
要进行此修改,您将调用该命令:chmod a-rw file1
要添加上述权限,您将调用该命令:chmod a + rw file1
如您所见,如果要授予这些权限,可以将减号更改为加号以添加这些权限。
使用二进制引用来设置权限
现在您已了解权限组和类型,这应该感觉很自然。要使用二进制引用设置权限,您必须首先了解输入是通过输入三个整数/数字来完成的。
示例权限字符串将是chmod 640 file1,这意味着所有者具有读取和写入权限,该组具有读取权限,并且所有其他用户都没有该文件的权限。
第一个数字代表所有者权限; 第二个代表组权限; 最后一个数字代表所有其他用户的权限。数字是rwx字符串的二进制表示。
- r = 4
- w = 2
- x = 1
您可以添加数字以获取表示您希望设置的权限的整数/数字。您需要为三个权限组中的每一个都包含二进制权限。
因此,要设置文件权限在文件1读取_ rwxr _____,您可以输入搭配chmod 740文件1。
所有者和团体
我已经对上面的所有者和组进行了多次引用,但尚未告诉您如何分配或更改分配给文件或目录的所有者和组。
您可以使用chown命令更改所有者和组分配,语法是简单的chown owner:group filename,因此要将file1的所有者更改为user1,将组更改为family,您将输入chown user1:family file1。
高级权限
特殊权限标志可以使用以下任何一种标记:
- _ - 没有特殊权限
- d - 目录
- l - 文件或目录是符号链接
- s - 这表示setuid / setgid权限。此权限未显示在权限显示的特殊权限部分中,但在所有者或组权限的读取部分中表示为 s。
- t - 这表示粘滞位权限。这未在权限显示的特殊权限部分中显示,但在所有用户权限的可执行部分中表示为 t
Setuid / Setgid特殊权限
setuid / setguid权限用于告诉系统以拥有者权限的身份运行可执行文件。
小心使用权限中的setuid / setgid位。如果您使用setuid / setgid位设置错误地将权限分配给root拥有的文件,则可以打开系统以进行入侵。
您只能通过显式定义权限来分配setuid / setgid位。setuid / setguid位的字符是s。
所以在file2.sh上设置setuid / setguid位你会发出命令chmod g + s file2.sh。
粘性位特殊权限
粘滞位在共享环境中非常有用,因为当它被分配给目录上的权限时,它会设置它,因此只有文件所有者才能重命名或删除所述文件。
您只能通过显式定义权限来分配粘滞位。粘滞位的字符是t。
要在名为dir1的目录上设置粘滞位,您将发出命令chmod + t dir1。
权限很重要时
对于基于Mac或Windows的计算机的某些用户,您不考虑权限,但除非您在公司环境中,否则这些环境不会如此积极地关注基于用户的文件权限。但是现在您正在运行基于Linux的系统,并且基于权限的安全性得到了简化,并且可以轻松地用于限制访问。
因此,我将向您展示一些您想要关注的文档和文件夹,并向您展示如何设置最佳权限。
- 主目录 - 用户的主目录很重要,因为您不希望其他用户能够查看和修改其他用户的桌面文档中的文件。要解决此问题,您需要该目录具有 drwx______(700)权限,因此我们假设我们要在用户user1的主目录上强制执行正确的权限,可以通过发出命令 chmod 700 / home / user1来完成。
- 引导加载程序配置文件 - 如果您决定实施密码以引导特定的操作系统,那么您将希望从除root之外的所有用户的配置文件中删除读写权限。为此,您可以将文件的权限更改为700。
- 系统和守护程序配置文件 - 限制系统和守护程序配置文件的权限以限制用户编辑内容非常重要,可能不建议限制读取权限,但限制写入权限是必须的。在这些情况下,最好将权限修改为644。
- 防火墙脚本 - 可能并不总是需要阻止所有用户读取防火墙文件,但建议限制用户写入文件。在这种情况下,防火墙脚本由root用户在引导时自动运行,因此所有其他用户不需要任何权限,因此您可以分配700权限。
可以给出其他示例,但本文已经非常冗长,因此如果您想分享其他所需限制的示例,请在评论中这样做。