0.前言
在操作系统中,不同用户应具有不同级别的文件和目录访问权限。为了保护文件免受未经授权的访问或篡改,Linux提供了一种方法来控制文件和目录的访问权限。管理员可以通过为用户分配读取、写入或执行文件的权限来保护其文件。对于每个文件和目录,我们可以指定文件所有者、同组用户和其他用户的权限状态,这在多用户操作系统中是必要的。
1.多类型用户
Linux下的用户分为三类:超级用户(root)、系统用户和普通用户。root用户具有最高权限,几乎可以执行任何操作。其他用户具有有限的权限,无法拥有root用户的所有访问权限。为了方便权限管理和确保安全性,将具有相似需求的用户放入具有相关权限的组中,组中的每个成员都会继承组权限。默认情况下,root用户是root组的一部分,必须将每个新用户添加到该组中才能继承该组的权限。
2.赋予权限
必须为每个文件和目录分配特定级别的权限,以便不同身份的用户可以使用它们。
三个级别的权限如下:
r – 读权限,允许用户打开和查看文件
w – 写权限,允许用户编辑和写入文件
x – 执行权限,允许用户执行文件
通过这种方式,root用户可以向其他用户授予所需级别的权限。通常情况下,创建文件的用户是文件的所有者,用户组是用户的当前组。文件所有者可以授予各种访问权限。
3.赋予个人用户权限
要将文件的所有权转移给其他用户以便他们可以控制权限,我们可以使用chown命令来更改文件的所有者。普通用户不能将自己的文件更改为其他所有者。这需要管理员权限。下面是一个示例命令,将目录/tmp/bobsfile及其下面的所有文件的所有者更改为bob:
chown bob /tmp/bobsfile -R
4.赋予用户组权限
要将文件的所有权从一个组转移到另一个组,我们可以使用chgrp命令来更改文件的所属组。chgrp命令用于更改文件或目录的所属用户组,只有文件所有者和root用户可以使用该命令。下面是一个示例命令,将文件newIDS的所属用户组更改为security:
chgrp security newIDS
5.检查权限
要查找为文件或目录授予了哪些用户权限,可以使用ls -l命令显示所有文件和文件夹的详细信息。ls -l命令将显示文件类型、所有者、组和用户的文件权限、链接数量、文件所属用户、文件大小以及文件的创建或修改时间。其中,第一个字符表示文件类型,d表示目录,-表示普通文件。接下来的三组字符表示权限,r表示读取权限,w表示写入权限,x表示执行权限。如果权限未授予,则用-表示。请注意,用户只能对二进制文件或脚本具有执行权限。
示例:
-rw- 表示普通文件,文件所有者具有读写权限但没有执行权限。下一组r-表示文件所属组具有读取权限但没有写入和执行权限。最后一组r-表示其他用户具有读取权限但没有写入和执行权限。这些权限是可以更改的,只有root用户和文件所有者可以更改权限。
6.改变用户权限
我们可以使用chmod命令来更改文件的权限。只有root用户或文件所有者才能更改权限。有两种常用的方法来更改权限:十位权限改变法和UGO权限改变法。
6.1十位权限改变法
我们可以使用单个数字来表示一组rwx权限,其中r表示读取权限,w表示写入权限,x表示执行权限。权限以二进制表示,可以将rwx权限视为三个开关,开启为1,关闭为0。因此,当授予所有权限时,相当于二进制的111。为了将rwx权限转换为八进制数字,我们可以将其视为三位二进制数字的组合,然后将其转换为八进制。八进制数字以0开头,以7结尾。八进制数字表示一组三位二进制数字,因此我们可以用一个数字表示整个rwx权限集。
例如,如果我们只想设置读取权限,我们可以查询表格并找到读取权限的值为4。如果我们想要将权限设置为wx,我们可以使用相同的方法并找到设置w和x权限的值为6。因此,如果我们想要表示文件所有者、同组用户和其他用户的所有权限,可以按照以下方式写:
chmod 764 filename
通过在chmod命令后跟随三个八进制数字和文件名,我们可以更改文件的每种类型用户的权限。例如:
chmod 764 file.txt
6.2UGO权限改变法
UGO权限改变法使用符号方法来更改权限。符号方法通常称为UGO语法,表示文件所有者(u)、同组用户(g)和其他用户(o)。UGO语法非常简单,我们可以在chmod命令后输入要更改权限的用户,然后使用+、-或=操作符,以及要添加或删除的权限(rwx)。最后,指定要更改权限的文件名。
例如,要删除文件所有者对文件的写入权限,可以输入以下命令:
chmod u-w file.txt
这将从文件所有者(u)中删除(-)写入(w)权限。通过运行ls -l命令检查权限,可以看到文件所有者不再具有写入权限。
还可以使用一个命令同时更改多个权限。例如,要为文件所有者和其他用户赋予执行权限,可以输入以下命令:
chmod u+x,o+x file.txt
这将为文件所有者(u)和其他用户(o)添加执行(x)权限。
7.给新文件赋予root权限
在Linux中,默认情况下,新下载的文件将具有默认权限666或777。这意味着你无法立即执行这些文件,而会收到”Permission denied”的错误。为了解决这个问题,你可以使用chmod命令为自己赋予root权限。假设我们下载了一个名为Cypher.matrix的文件:
chmod +x Cypher.matrix
现在,我们可以看到Cypher.matrix具有文件所有者的执行权限。
8.赋予默认的安全级别权限
Linux自动分配基本权限,新创建的文件和目录的默认权限为666和777。你可以使用umask方法更改每个用户创建的文件和目录的默认权限。umask值是一个三位八进制数字,表示要从默认权限中删除的权限。当创建新文件或目录时,权限设置将减去umask值。例如,如果umask设置为022,则具有默认权限666的新文件将变为权限644,文件所有者具有读取和写入权限,而同组用户和其他用户只有读取权限。
umask值对于每个用户都可以在其个人.profile文件中设置。要查看当前umask值,可以输入umask命令。如果不想使用默认的文件或目录属性,可以修改/etc/bashrc文件中的内容。
9.特殊权限
除了通用权限rwx之外,Linux还有三个特殊权限:设置用户ID(SUID)、设置组ID(SGID)和粘滞位。
9.1使用SUID赋予临时root权限
SUID允许用户在具有执行权限的情况下以文件所有者的身份执行文件。如果用户只具有读取或写入权限,无法执行文件。例如,允许用户更改密码的文件需要访问/etc/shadow文件,该文件需要root用户的权限才能执行。在这种情况下,可以通过在文件上设置SUID来临时赋予所有者执行文件所需的特权。SUID表示任何用户都可以使用所有者的权限来执行该文件,但权限不会超出使用该文件的范围。
要设置SUID,可以在常规权限之前输入数字4,例如:
chmod 4664 file.txt
9.2使用SGID赋予同组用户权限
SGID允许临时赋予同组用户权限,而不是文件所有者的权限。这意味着,设置SGID后,即使用户没有执行权限,只要属于具有执行权限的组,也可以执行文件。当应用于目录时,SGID的工作方式略有不同:当设置目录的SGID时,新创建的文件将继承目录创建者的组权限,而不是文件创建者的组权限。这在多个用户共享目录时非常有用,使得该组中的所有用户都可以执行文件,而不仅仅是单个用户。
要设置SGID,可以在常规权限之前输入数字2,例如:
chmod 2644 file.txt
9.3粘滞位
粘滞位在旧的系统中用于将程序文件的指令段保存在交换分区中,以便在程序中止后更快地调入系统。然而,现代操作系统已经不再使用这个功能。但是,粘滞位在目录中仍然有特殊作用。当目录设置了粘滞位时,只有超级管理员、目录所有者或文件所有者才能删除该目录下的文件。即使其他用户具有写入权限,也只有文件所有者才能删除文件。
总结
Linux使用权限来保护用户和组的文件和目录,以防止其他用户在系统中进行未经授权的访问。了解如何管理这些权限以及如何利用特殊权限(如SUID和SGID)对于网络安全至关重要。