Linux系统控制文件和目录权限 – 作者:nickurkar

0.前言

并非操作系统的每个用户都应具有相同级别的文件和目录访问权限,与任何专业操作系统一样,Linux具有保护文件和目录访问的方法。系统允许系统管理员(root用户或文件所属用户)通过赋予用户读取,写入或执行文件的权限来保护其文件免受不必要的访问或篡改。对于每个文件和目录,我们可以为文件所属用户、同组用户以及其他用户指定权限状态,这在多用户操作系统中是必要的。

1.多类型用户

Linux下用户分为3类:超级用户(root)、系统用户、普通用户。

在Linux系统中,root用户非常强大,基本上可以执行任何操作。系统上的其他用户拥有有限的权限,不可能具有root用户具有的所有访问权限。将具有相似需求的用户放入被授予相关权限的组中,该组的每个成员都会继承组权限。这主要是为了便于管理权限,从而确保安全性。

在默认情况下,root用户是root组的一部分。必须将系统上的每个新用户添加到组中才能继承改组的权限。

2.赋予权限

必须为每个文件和目录分配使用它的不同身份的特定级别的权限。

三个级别的权限如下:

r 读权限 赋予用户打开与查看权限

w 写权限 赋予用户查看与编辑写入权限

x 执行权限 赋予用户执行一个文件

通过这种方式,root用户可以通过需要的权限向其他用户赋予一定级别的权限。创建文件时,通常创建文件的用户是文件的所有者,用户组是用户的当前组。该文件的所有者可以授予各种访问权限。

3.赋予个人用户权限

将文件的所有权转移到其他用户以便他们能够控制权限,我们可以使用chown(更改文件所属用户)

命令。普通用户不能将自己的文件改变成其他的拥有者。其操作权限一般为管理员。

图片[1]-Linux系统控制文件和目录权限 – 作者:nickurkar-安全小百科

在这里,我们给出命令,将目录/tmp/bobsfile及其下面的所有文件的所属用户改为bob的所属用户。

4.赋予用户组权限

要将文件的所有权从一个组转移到另一个组,我们可以使用chgrp(更改组)命令。chgrp命令用来改变文件或目录所属的用户组。仅限文件属主与root使用。

图片[2]-Linux系统控制文件和目录权限 – 作者:nickurkar-安全小百科

此命令将newIDS的所属用户主改为security。

5.检查权限

如果要查找为文件或目录的哪些用户授予的权限,请使用ls -l命令来显示显示不被隐藏的所有文件与文件夹的详细信息,并成列表显示。

图片[3]-Linux系统控制文件和目录权限 – 作者:nickurkar-安全小百科

我们获取有关内容的信息:

文件类型

所有者,组和用户的文件权限

链接数量

文件所属用户

文件的大小(以字节为单位)

文件创建或上次修改时间

文件名

其中第一个字符为文件类型,其中d(dirtectory)代表目录,短划线(-)则说明文件是个普通文件。下一节则定义文件的权限,有三组三个字符组成,r(read),w(write),x(execute)。其中rwx代表所有者的权限,r-x代表用户所在组的权限,—代表其他用户权限。

如果首先看到r,则该用户或用户组都有权打开和读取该文件或目录。作为中间字母w代表者可以写入(修改)文件或目录,最后的x代表者可以执行文件或目录。如果用短划线(-)替换任何r,w或x,就代表未给出相应的权限。请注意,用户只能执行二进制文件或脚本权限。

示例:

图片[4]-Linux系统控制文件和目录权限 – 作者:nickurkar-安全小百科

-表示他是一个普通文件,权限rw-代表文件所属用户具有读写权限但没有执行权限。下一组r–表示文件所属组,显示该组既有读取权限但不具有写入和执行权限。最后一组r–其他用户也只有读取权限但不具有写入和执行权限。

这些权限不是一成不变的。作为root用户和文件所属用户可以更改权限。

6.改变用户权限

我们可以使用linux命令chmod来更改权限。只有root用户或文件所属用户才能更改权限。我们使用两种不同的方法来更改hashcat.hcstat的权限。

6.1十位权限改变法

我们可以使用单个数字来表示一个rwx权限集来引用权限。与操作系统下的所有内容一样,权限以二进制表示,因此ON和OFF开关分别由1和0表示。可以将rwx权限视为三个ON/OFF开关,因此当授予所有权限时,这相当于111的二进制。

这样的二进制集就很容易通过转换为八进制来表示一位数,八位数字以0开头并以7结尾。八进制数字表示一组三位二进制数字,这意味着我们可以表示整个rwx集用一位数字。

八进制和二进制权限表示:

图片[5]-Linux系统控制文件和目录权限 – 作者:nickurkar-安全小百科

我们来看一些例子。首先,如果我们只想设置读取权限,通过查询表并找到读取权限的值:

图片[6]-Linux系统控制文件和目录权限 – 作者:nickurkar-安全小百科

如果我们想要将权限设置为wx,我们可以使用相同的方法并查找设置w和x的权限:

图片[7]-Linux系统控制文件和目录权限 – 作者:nickurkar-安全小百科

4+2+1=7,在Linux中当所有权限都开启时,由八进制的值7表示。

因此,如果我们想要表示文件所属用户,同组用户和其他用户的所有权限,可以按照如下方式写:

图片[8]-Linux系统控制文件和目录权限 – 作者:nickurkar-安全小百科

通过chmod三个八进制数字后跟随文件名,我们可以为每种类型的用户更改文件权限。在命令行中输入以下内容:

图片[9]-Linux系统控制文件和目录权限 – 作者:nickurkar-安全小百科

我们可以看到这个语句给了文件所属用户所有权限,同组用户的所有权限,其他用户只有读取权限。

现在我们可以通过在目录上运行ls -l 并查看hash.hcstat来查看这些权限是否已经更改。

图片[10]-Linux系统控制文件和目录权限 – 作者:nickurkar-安全小百科

这确认了chmod调用成功更改了文件的权限,让文件所属用户和同组用户能够执行该文件。

6.2UGO权限改变法

虽然数值方法可能是在Linux中更改权限最常用的方法,但有些人发现chmod的符号方法更直观,两种方法同样有效,所以只需找到合适你的方法。符号方法通常成为UGO语法,代表文件所属用户,同组用户,其他用户。

UGO语法非常简单,输入chmod命令,然后输入要更改权限的用户,为文件所属用户提供u,为同组用户提供g,为其他用户提供o,或者输入三个运算符之一:

– 移除一个权限

+ 添加一个权限

= 设置一个权限

在操作符之后,要添加或删除的权限(rwx),最后包含要指定文件名称。

因此,如果要删除文件所属用户对hashcat.hcstat所属文件的写入权限,可以输入以下内容:

图片[11]-Linux系统控制文件和目录权限 – 作者:nickurkar-安全小百科

此命令表示从文件所属用户(u)中删除(-)hashcat,hcstat的写入(w)权限。

现在,当再次使用ls -l检查权限时,可以看到hashcat.hcstat文件不再具有该文件所属用户的写入权限。

图片[12]-Linux系统控制文件和目录权限 – 作者:nickurkar-安全小百科

还可以使用一个命令更改多个权限。如果想要同时为文件所属用户,其他用户(不包括同组用户)赋予执行权限,可以输入以下内容:

图片[13]-Linux系统控制文件和目录权限 – 作者:nickurkar-安全小百科

此命令告诉Linux为hashcat.hcstat文件添文件所属用户的写入(w)权限以及其他用户的执行(x)权限。

7.给新文件赋予root权限

如果要经常下载新的工具,但Linux会自动分配所有文件和目录的默认权限666和777。这意味着,在默认情况下,你下载的文件将无法立即执行它。通常会得到一条信息,上面写着”Permission denied”。对于这些情况,需要给自己一个root身份并执行,使用chmod执行文件的权限。

假设我们下载了一个名为Cypher.matrix的文件:

图片[14]-Linux系统控制文件和目录权限 – 作者:nickurkar-安全小百科

我们可以看到新文件没有任何人的执行权限,这使得无法操作。在默认情况下,Linux不允许执行下载的文件,但总体而言,此设置让你的系统更安全。

我们可以通过输入以下内容来允许自己执行Cypher.matrix:

图片[15]-Linux系统控制文件和目录权限 – 作者:nickurkar-安全小百科

现在,我们可以看到Cypher.matrix具有对文件所属用户的执行权限:

图片[16]-Linux系统控制文件和目录权限 – 作者:nickurkar-安全小百科

赋予了文件所属用户的所有权限,并赋予了同组用户和其他用户读写权限(4+2=6)。

8.赋予默认的安全级别权限

Linux自动分配基本权限,通过为文件666和目录777。你可以使用umask(或unmask)方法更改分配给每个用户创建的文件和目录的默认权限。umask方法表示要从文件或目录的默认权限中删除权限,以成为最终的默认权限值。

umask时对应于三个权限数字的三位八进制数字,从权限编号中减去umask编号以提供新的权限状态。这意味着当创建新文件或目录时,权限设置位默认值减去umask中的值。

图片[17]-Linux系统控制文件和目录权限 – 作者:nickurkar-安全小百科

例如,日过umask设置为022,则具有默认权限666的新文件现在将变为权限644,这意味着文件所属用户具有读取和写入权限(rwx),而同组用户和其他用户仅具有读取权限(rw)。

umask值对于系统上的所有用户都不是通用的。每个用户都可以为其个人.profile文件中的文件和目录设置个人默认的umask值。要以用户身份登录时查看当前属性值,只需输入命令umask并记下返回内容。如果你不想要这些默认的文件或目录属性,你可以通过修改/etc/bashrc里的内容来改变。

9.特别权限

除了三个通用权限rwx,Linux还有三个特殊权限,这些特殊权限时设置用户ID(或SUID),设置组ID(或SGID)和粘滞位。

9.1使用SUID赋予临时root权限

用户只有在有权执行该特定文件时才能执行该文件。如果用户只具有读取或写入权限,则无法执行。

你可能遇到过这样一种情况:文件在被所有用户(非root用户)执行期间都需要root用户的权限。例如,允许用户更改其密码的文件需要访问/etc/shadow(Linux中保存用户密码的文件),该文件需要root用户权限才能执行。在这种情况下,通过在程序上设置SUID,可能临时赋予所有者执行文件所需的特权。

基本上,SUID表示任何用户都可以使用所有者的权限来执行该文件,但这些权限不会超出使用该文件的范围。

要设置SUID,请在常规权限之前输入4,因此当设置SUID时,具有644的新结果权限的文件表示为4664。

9.2使用SGID赋予root同组用户权限

SGID赋予临时权限,但赋予的是同组用户的权限,而不是文件所属用户的权限。这意味着,设置SGID,如果用户属于有权执行该文件的组,没有执行权限的用户也可以执行文件。

应用于目录时,SGID的工作方式略有不同:当设置该目录时,在该目录中创建的新文件的所有权限将转到目录创建者的组,而不是文件创建者的组。当多个用户共享目录时,这方法非常有用。该组中的所有用户都可以执行文件,而不仅仅是单个用户。

SGID在常规权限之前表示为2,因此当设置SGID时,具有权限644的新文件将表示为2644。通用,你可以使用chmod命令。

9.3粘滞位

在以前旧的系统当中,如果一个程序文件一旦设置了粘滞位(粘着位),那么当该程序中止的时候他的所有指令段将被保存到系统的交换分区当中,再次运行时可以更快的调入系统。不过现在的操作系统已经不再使用这种功能了。但这并不表示这功能已经完全被废弃。

当一个目录设置为粘滞位(粘着位)时,它将发挥特殊的作用,即当一个目录被设置为”粘滞位(粘着位)”(用chmod a+t),则该目录下的文件只能由超级管理员删除、该目录的所有者删除或该文件的所有者删除。也就是说,即便该目录是任何人都可以写,但也只有文件的属主才可以删除文件。

总结

Linux使用权限可出于防御性目的来保护用户、组的文件和目录免受系统中其他用户的攻击,同样如何管理这些权限以及如何利用操作进行提权(特别是SUID和SGID)。

来源:freebuf.com 2021-07-01 16:00:49 by: nickurkar

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论