当前位置: 首页 > Linux

Linux文件访问权限及附加属性

时间:2023-04-06 18:42:10 Linux

一、文件访问权限1、文件/目录访问权限的基本概念文件或目录访问权限是指可读、可写、可执行的权限。如果用户对文件只有读权限,则用户只能读取文件内容,不能对文件进行写入和操作。同样,对文件具有可写或可执行权限的用户只能进行Write或执行操作,任何其他操作都会被操作系统阻止。当然,一个用户对文件的权限并不只有一种,可以同时拥有可读、可写或可执行的权限。在Linux中,对用户有三种不同的定义:文件创建者(即文件的拥有者)、与文件拥有者同组的用户、其他用户。当我们使用命令ls-l查看当前目录下文件的详细信息时,如下图:最左边一列代表不同用户对该文件的访问权限,横线代表空权限,r代表读权限,w代表可写权限,x代表可执行权限。注意这一列有10个占位符,第一条横线的位置表示文件的类型。具体符号及对应关系如下:普通文件(-):目录文件(d,目录文件)符号链接(l,symboliclink)块设备文件(b,block)字符设备文件(c,char)管道文件(p,pipe)socket文件(s,socket)后面有9个占位符,每三个占位符组成一组,分别表示文件拥有者、与文件拥有者同组的用户、其他用户的访问权限文件。如下所示。2、文件/目录访问权限的设置在Linux操作系统中,文件或目录访问权限的设置主要是通过命令chmod。共有三种方式,通过字符设置,通过八进制数设置,通过参考文件设置,下面分别介绍这三种设置方法。(1)文本设置文本设置的格式如上图所示,具体格式为:chmod用户操作文件访问方式文件,用户栏选项为:*u:用户用户,文件所有者*g:group组,与文件拥有者同一组的用户*o:otherother,otheruser*a:allall,所有用户操作栏选项为:*+:添加某项权限*-:禁止某项权限*=:添加一个新的权限设置为某个权限,之前的权限完全覆盖。文件访问方式为:*r:可读权限*w:可写权限*x:可执行权限*s:设置文件执行时进程的权限。`u+s`设置文件执行时的进程拥有文件属主的权限,`g+s`设置文件执行时的进程拥有文件组用户的权限*t:保存程序文件到交换设备*u:与文件所有者具有相同的权限*g:与文件组成员具有相同的权限*o:与文件的其他成员具有相同的权限假设我们要添加其他成员一个文件除文件所有者和组成员外的可写权限,格式为:chmodo+wfilename设置文件的组成员与文件所有者具有相同的权限:chmodg=ufilename当文件被执行时,进程具有文件所有者的访问权限。这种情况并不少见。比如我们常用的passwd命令,不同的用户可以使用该命令来执行修改密码的root权限行为。设置权限后,将原来可执行权限的x替换为s,如果文件没有可执行权限,则设置为S。chmodu+sfilename(2)通过八进制数设置该方法可以理解为将文件的三个权限映射为一个八进制数的二进制格式的三个二进制位,每个位控制一个访问权限的开启和关闭。具体二进制格式的对应关系如下:001:可执行权限,对应八进制数1010:可写权限,对应八进制数2100:可读权限,对应八进制数4设置文件访问权限时,三个八进制数需要同时设置不同用户的文件访问权限。假设文件需要设置所有者有读、写、执行权限,所有者同组用户有读写权限,其他用户有读权限,命令格式应为:chmod764文件名如果要在文件执行时设置其权限,则需要使用另外一个八进制数。其具体格式为:010:设置文件执行时所属组用户的权限,对应八进制数2100:设置文件执行时文件属主的权限,对应八进制数4例如,根据前面的例子设置文件执行当你有文件所有者的权限时,命令格式为:chmod4764filename(3)参考文件设置文件权限当通过这种方式设置文件权限时,你需要:使用chmod命令的--reference参数。具体格式为:chmod--reference=RFILEtargetFile使用appeal命令将目标文件的访问权限设置为参考文件的文件访问权限。具体示例如下:(4)在某些安全粘滞位设置的情况下,我们需要不同的用户在同一个目录下工作(创建或修改文件),并且这些用户都需要对目录具有读、写和执行权限directory,这可能会导致一些安全风险。假设我们有一个目录work_dir,它的具体访问权限如下:用户xia创建了一个普通文件xia_file,用户dong查看了工作目录work_dir,发现了一个只有可读权限的文件xia_file,查看后决定删除该文件。有效!用户dong在没有对另一个文件的写权限的情况下成功删除了该文件。显然,这侵犯了文件xia_file的访问权限。如何防止这种恶意行为?这就需要在文件访问模式中引入T标志。该标志主要用于目录。源目录的访问权限中如果其他用户有可执行权限,则设置为t,否则为T。设置方法为:chmod用户操作+t文件夹chmod1XXX文件夹文件夹设置成功后,用户在工作目录只能删除自己创建的文件。将工作目录设置为T后,我们再次创建文件xia_file。以用户dong登录后,我们尝试删除它,但失败了。2、文件的附加属性通过以上相信大家已经了解了文件的访问权限,但是这里还有问题。在黑客攻击过程中,侵入计算机系统后,可以使用各种方法来提升自己的权限。高权限的用户显然对文件的访问权限有很强的控制力。在Linux的Ext文件系统中,可以通过设置文件的附加属性来增强文件系统的安全性。以Ext3为例,它支持的文件安全属性有:A:Atime。告诉系统不要修改这个文件S:Sync的最后访问时间。一旦应用程序对该文件进行写操作,系统立即将修改后的结果写入磁盘a:AppendOnly。系统只允许向这个文件追加数据,不允许任何进程覆盖或截断这个文件。如果目录有这个属性,系统只允许在这个目录下创建和修改文件,不允许删除文件i:Immutable。系统不允许对此文件进行任何修改。如果目录有这个属性,那么任何进程都只能修改目录下的文件,不允许创建和删除文件d:Nodump。执行文件系统备份时,转储程序将忽略此文件c:Compress。系统透明压缩文件。从该文件读取时,返回解压后的数据;向该文件写入数据时,数据在写入磁盘之前先进行压缩s:SecureDelete。让系统在删除文件时,将文件所在的u:Undelete区域填充为0。当应用程序请求删除文件时,系统会保留其数据块,以便以后可以恢复文件。另外,请记住,虽然文件系统可以接受和保留个别属性标志,但这些属性可能无效,具体取决于内核和各种应用程序的版本。1.设置文件系统属性在任何情况下,标准的ls命令都不会显示文件或目录的扩展属性。Ext3系统工具包中有两个工具:chattr和lsattr。它们专门用于设置和查询文件属性。接下来分别介绍这两个命令。(1)lsattrlsattr命令与ls命令类似,不同的是lsattr用于显示指定目录下的文件属性。具体使用方法是:显然lsattr支持的选项很少,其中:-R:递归列出目录并显示其内容-V:列出命令版本信息-a:列出文件中的所有文件,包括打开的文件-d:与文件一样列出目录,并显示其包含的内容-l:该参数目前没有作用,但会改变命令的输出显示形式-v:列出文件版本(针对网络文件系统NFS)(2)chattr命令chattr命令使用起来也比较简单,和chmod的字符设置文件访问权限很相似,具体使用格式为:即通过:`chattr选项操作属性版本设置文件名`,可以设置文件的属性where*-R:递归设置文件属性*-V:显示命令的执行过程*-f:无效果*-v:设置文件或目录版本假设i属性为设置在一个文件上,我们可以看到会发生什么。即使是root用户也无法对设置了i属性的文件执行任何操作!这是因为Ext3的属性是由sys_open()和sys_truncat()等系统调用来检查和赋予的,不受用户标识号等因素的影响。在任何情况下,修改具有不可修改属性的文件都会失败。您是否是root用户并不重要。不过需要注意的是,root用户可以使用chattr命令取消文件的不可修改属性来修改文件。这种保护只是给修改行为增加了一点麻烦,并没有从根本上提高系统的安全性。3、在思考文件访问权限和属性的设置时,最重要的不是理解,而是能够灵活运用。这不仅需要了解文件权限,还需要了解Linux文件系统,并根据实际需要进行组合。根据您自己的经验进行设计和思考。4.参考资料1.书籍:《Linux安全技术内幕》2.链接:菜鸟教程