【011】Linux系统中文件的权限与属性及文件的访问控制列表(ACL)
发布时间:2022-10-21 10:34:31 所属栏目:Linux 来源:
导读: 本篇将详细梳理Linux系统中的文件权限及其访问控制属性,搞清楚这些对于系统中的文件操作非常重要。
1.Linux系统中的文件权限与归属
尽管Linux系统中的一切皆是文件,但是每个文件的类型不尽相同
1.Linux系统中的文件权限与归属
尽管Linux系统中的一切皆是文件,但是每个文件的类型不尽相同
|
本篇将详细梳理Linux系统中的文件权限及其访问控制属性,搞清楚这些对于系统中的文件操作非常重要。 1.Linux系统中的文件权限与归属 尽管Linux系统中的一切皆是文件,但是每个文件的类型不尽相同, 系统使用不同的字符加以区分: 系统中每个文件都有所有者和所属组,并且规定了文件所有者、所属组和其它人对文件拥有的可读r、可写w、可执行x等权限。对于一般文件来说,“可读”表示能够读取文件的实际内容;“可写”表示能够编辑、修改、删除文件的实际内容;“可执行”表示能够运行一个脚本程序。对于目录文件来说,“可读”表示能够读取目录内的文件列表;“可写”表示能够在目录内新增、删除、重命名文件;“可执行”表示能够进入此目录。 文件的读、写、执行权限可以简写为rwx,也可用数字4、2、1来表示,文件所有者、所属组和其它用户权限间无关联。其显示示例如图所示: 2.Linux系统中文件的特殊权限 在实际应用中,单纯设置文件的rwx权限无法满足我们对安全性和灵活性的需求,因此便有了SUID、SGID、SBIT的特殊权限位。这是对文件权限设置的特殊功能,可以与一般权限同时使用,以弥补一般权限不能实现的功能。 SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有所有者的权限(仅对有执行权限的二进制程序有效)。例如,所有用户都可以用passwd命令来修改自己的用户密码,而用户密码存储在/etc/shadow中, 我们可以查看其权限如下图所示: 可以看出,passwd命令加上了特殊权限位,普通用户临时获得了程序所有者身份,可以将修改的密码写入到/etc/shadow中。上图中,加入特殊权限位时,rwx变为rws,若原本权限是rw-,则加入SUID后会变为rwS。 SGID主要实现两种功能:一是,让执行者临时拥有所属组的权限(对有执行权限的二进制程序进行设置);二是,在某个目录中创建的文件自动继承此目录的用户组(只可对目录进行设置)。 在这里不得不提及两个非常实用的命令:chmod和chown。 chmod命令能够用来设置文件或目录的权限,其格式为chmod [命令参数] 权限 文件或目录名称。若对于目录中的递归设置,要加命令参数-R。 chown命令用来设置文件或目录的所有者和所属组,其格式为chown [命令参数] 所有者:所属组 文件或目录名称。同样,对于目录递归设置时,要用命令参数-R。 SBIT权限位,也称为保护位,它可以确保用户只能删除自己的文件,而不能删除其它用户的文件linux权限,这在共享目录中是非常有用的。 与前面的SUID、SGID不同,当目录被设置为SBIT特殊权限位后,文件的其它权限部分的x权限会被替换成t或T,即原本为x时,替换为t,原来为-时,替换为T。 系统的/tmp目录默认设置了SBIT权限,若想对其它目录设置SBIT权限,可用chmod命令即可,如chmod -R o+t 目录名称 。 3.Linux系统中文件的隐藏属性 Linux系统中,文件或目录还有被隐藏起来的权限,默认情况下不能直接被用户查觉,这也保证了Linux系统的安全性。其相关的命令主要有两个:chattr和lsattr。 chattr命令用来设置文件的隐藏权限,其格式为chattr [+/-][命令参数] 文件。 若想将某个隐藏功能添加到文件上,则用+命令参数的形式,若想将某个隐藏功能移出文件,则用-命令参数的形式。此命令的命令参数非常丰富,其常用的如下表所示: 命令参数说明 i 无法对文件进行修改;若对目录设置此参数,则仅能修改其中的子文件,不能新建或删除文件 a 仅允许追加内容,无法覆盖/删除内容 s 彻底从硬盘中删除,不可恢复,用0填充原文件所在硬盘区域 S 文件内容在变更后立即同步到硬盘(sync) A 不再修改这个文件或目录的最后访问时间(atime) b 不再修改文件或目录的存取时间 D 检查压缩文件中的错误 d 使用dump命令备份时忽略本文件或目录 c 默认将文件或目录进行压缩 u 当删除此文件后,依然保留其在硬盘中的数据,方便日后恢复 t 让文件系统支持尾部合并 X 可以直接访问压缩文件中的内容 lsattr命令用于显示 文件的隐藏权限,其格式为lsattr [命令参数] 文件。在Linux系统中,文件的隐藏权限必须用此命令来查看,用ls之类的命令是看不出来的。当你查看了文件的隐藏权限,若不需要,可以用chattr命令将其去掉。 4.文件访问控制列表 上面所讲的文件权限有一个共性,那就是:权限是针对某一类用户设置的。若想要对某个指定用户进行单独的权限控制,就需要用到文件的访问控制列表(ACL)了。 一般来说,针对普通文件或目录设置ACL,其实就是对指定的用户或用户组设置操作权限。当对某个目录设置了ACL,则目录中的文件会继承其ACL,若针对文件设置了ACL,则不再继承其所在目录的ACL。 操作ACL的命令主要有两个:setfacl和getfacl。 setfacl命令用于管理文件的ACL规则,其格式为setfacl [命令参数] 文件名称。 使用setfacl命令可以针对单一用户或用户组、单一文件或目录来设置其权限, 对于普通文件则使用-m命令参数,对于目录文件则要使用-R递归参数。若想删除某个文件的ACL则可以用-b命令参数。如下示例了设置用户hello对/root的权限: setfacl -Rm u:hello:rwx /root 通常情况下,我们用ls命令是看不到文件的ACL信息的,但是可以看到文件是否包含有ACL。若文件权限的最后一个点.变成了加号+,即表示此文件设置了ACL了,如下图所示: getfacl命令用于显示文件上设置的ACL,其格式为getfacl [命令参数] 文件名称。 本篇将详细梳理Linux系统中的文件权限及其访问控制属性,搞清楚这些对于系统中的文件操作非常重要。 1.Linux系统中的文件权限与归属 尽管Linux系统中的一切皆是文件,但是每个文件的类型不尽相同, 系统使用不同的字符加以区分: 系统中每个文件都有所有者和所属组,并且规定了文件所有者、所属组和其它人对文件拥有的可读r、可写w、可执行x等权限。对于一般文件来说,“可读”表示能够读取文件的实际内容;“可写”表示能够编辑、修改、删除文件的实际内容;“可执行”表示能够运行一个脚本程序。对于目录文件来说,“可读”表示能够读取目录内的文件列表;“可写”表示能够在目录内新增、删除、重命名文件;“可执行”表示能够进入此目录。 文件的读、写、执行权限可以简写为rwx,也可用数字4、2、1来表示,文件所有者、所属组和其它用户权限间无关联。其显示示例如图所示: 2.Linux系统中文件的特殊权限 在实际应用中,单纯设置文件的rwx权限无法满足我们对安全性和灵活性的需求,因此便有了SUID、SGID、SBIT的特殊权限位。这是对文件权限设置的特殊功能,可以与一般权限同时使用,以弥补一般权限不能实现的功能。 SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有所有者的权限(仅对有执行权限的二进制程序有效)。例如,所有用户都可以用passwd命令来修改自己的用户密码,而用户密码存储在/etc/shadow中, 我们可以查看其权限如下图所示: 可以看出,passwd命令加上了特殊权限位,普通用户临时获得了程序所有者身份,可以将修改的密码写入到/etc/shadow中。上图中,加入特殊权限位时,rwx变为rws,若原本权限是rw-,则加入SUID后会变为rwS。 SGID主要实现两种功能:一是,让执行者临时拥有所属组的权限(对有执行权限的二进制程序进行设置);二是,在某个目录中创建的文件自动继承此目录的用户组(只可对目录进行设置)。 在这里不得不提及两个非常实用的命令:chmod和chown。 chmod命令能够用来设置文件或目录的权限,其格式为chmod [命令参数] 权限 文件或目录名称。若对于目录中的递归设置,要加命令参数-R。 chown命令用来设置文件或目录的所有者和所属组,其格式为chown [命令参数] 所有者:所属组 文件或目录名称。同样,对于目录递归设置时,要用命令参数-R。 SBIT权限位,也称为保护位,它可以确保用户只能删除自己的文件,而不能删除其它用户的文件linux权限,这在共享目录中是非常有用的。 与前面的SUID、SGID不同,当目录被设置为SBIT特殊权限位后,文件的其它权限部分的x权限会被替换成t或T,即原本为x时,替换为t,原来为-时,替换为T。 系统的/tmp目录默认设置了SBIT权限,若想对其它目录设置SBIT权限,可用chmod命令即可,如chmod -R o+t 目录名称 。 3.Linux系统中文件的隐藏属性 Linux系统中,文件或目录还有被隐藏起来的权限,默认情况下不能直接被用户查觉,这也保证了Linux系统的安全性。其相关的命令主要有两个:chattr和lsattr。 chattr命令用来设置文件的隐藏权限,其格式为chattr [+/-][命令参数] 文件。 若想将某个隐藏功能添加到文件上,则用+命令参数的形式,若想将某个隐藏功能移出文件,则用-命令参数的形式。此命令的命令参数非常丰富,其常用的如下表所示: 命令参数说明 i 无法对文件进行修改;若对目录设置此参数,则仅能修改其中的子文件,不能新建或删除文件 a 仅允许追加内容,无法覆盖/删除内容 s 彻底从硬盘中删除,不可恢复,用0填充原文件所在硬盘区域 S 文件内容在变更后立即同步到硬盘(sync) A 不再修改这个文件或目录的最后访问时间(atime) b 不再修改文件或目录的存取时间 D 检查压缩文件中的错误 d 使用dump命令备份时忽略本文件或目录 c 默认将文件或目录进行压缩 u 当删除此文件后,依然保留其在硬盘中的数据,方便日后恢复 t 让文件系统支持尾部合并 X 可以直接访问压缩文件中的内容 lsattr命令用于显示 文件的隐藏权限,其格式为lsattr [命令参数] 文件。在Linux系统中,文件的隐藏权限必须用此命令来查看,用ls之类的命令是看不出来的。当你查看了文件的隐藏权限,若不需要,可以用chattr命令将其去掉。 4.文件访问控制列表 上面所讲的文件权限有一个共性,那就是:权限是针对某一类用户设置的。若想要对某个指定用户进行单独的权限控制,就需要用到文件的访问控制列表(ACL)了。 一般来说,针对普通文件或目录设置ACL,其实就是对指定的用户或用户组设置操作权限。当对某个目录设置了ACL,则目录中的文件会继承其ACL,若针对文件设置了ACL,则不再继承其所在目录的ACL。 操作ACL的命令主要有两个:setfacl和getfacl。 setfacl命令用于管理文件的ACL规则,其格式为setfacl [命令参数] 文件名称。 使用setfacl命令可以针对单一用户或用户组、单一文件或目录来设置其权限, 对于普通文件则使用-m命令参数,对于目录文件则要使用-R递归参数。若想删除某个文件的ACL则可以用-b命令参数。如下示例了设置用户hello对/root的权限: setfacl -Rm u:hello:rwx /root 通常情况下,我们用ls命令是看不到文件的ACL信息的,但是可以看到文件是否包含有ACL。若文件权限的最后一个点.变成了加号+,即表示此文件设置了ACL了,如下图所示: getfacl命令用于显示文件上设置的ACL,其格式为getfacl [命令参数] 文件名称。 (编辑:我爱制作网_池州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐


浙公网安备 33038102330577号