天天看点

Linux文件权限用户与用户组文件一般属性及权限文件默认权限:umask文件隐藏属性:chattr,lsattr文件特殊权限:SUID,SGID,SBIT目录与文件的权限意义权限与命令的关系

本文除必要的地方会分开讨论外,将目录视为特殊的文件类型一起讨论。

用户与用户组

在Linux中,用户是能够获取系统资源的权限的集合。而用户组则是将若干用户划分在一起形成的集合,但其成员(用户)之间对文件所拥有的权限不一定相同。Linux是一个支持多用户多任务的系统,因此可能常常会有多人同时使用这台主机来进行工作,为了考虑每个人的隐私权以及每个人喜好的工作环境,也为了保持Linux系统资源分配的合理性,“用户与用户组”的功能是对Linux这一特性的相当健全且实用的安全支持。

Linux根据用户与用户组划分了三个文件的基本权限集合:owner、group和others。

文件一般属性及权限

在Linux中执行“ls -al”命令,得到如下结果:

Linux文件权限用户与用户组文件一般属性及权限文件默认权限:umask文件隐藏属性:chattr,lsattr文件特殊权限:SUID,SGID,SBIT目录与文件的权限意义权限与命令的关系

命令后列出的就是一系列文件的基本信息了。

第一列代表代表文件的类型与权限,其中包含了10个字符,每个字符位都有其不同的含义。

·第一个字符代表文件类型,[d]代表目录,[-]代表普通文件(其实文件两字即可,在这为与目录区分开来),[l]代表连接文件,[b]代表设备文件里面的可供存储的接口设备,[c]则表示设备文件里面的串行端口设备,例如鼠标、键盘等。

·接下来的9列,每3列为一组,每组分别代表owner、group、others的基本权限。每一组均为“rwx”的3个参数的组合。其中[r]代表可读,[w]代表可写,[x]则表示可执行,且rwx这3个权限都有相应的值,分别为4、2、1(设置权限的时候会用到)。这3个权限的位置不会改变,如果文件没有权限,就会出现[-]。

以上图中的start.cpp为例,根据第一列的信息可以得出这是一个文件所有者具有读写权限,用户组其他用户及非用户组成员具有读权限的文件。

第二列表示有多少文件名连接到此节点(iNode)。关于iNode的内容在介绍文件系统的博文中。

第三列表示这个文件的“所有者账号”。

第四列表示这个文件所属的用户组。

第五列为文件大小,默认单位为Byte。

第六列为这个文件的创建日期或修改日期。

第七列为该文件名。

文件默认权限:umask

我们在新建一个文件或目录时,一般都不会为其设置好权限,那么其默认权限是什么?这就和umask有关了。umask你可以理解为指定“用户在新建文件或目录时候的权限默认值”,在Linux中执行“umask”这条命令时,会显示当前系统的文件默认权限:

Linux文件权限用户与用户组文件一般属性及权限文件默认权限:umask文件隐藏属性:chattr,lsattr文件特殊权限:SUID,SGID,SBIT目录与文件的权限意义权限与命令的关系

0022即是系统的文件权限默认值,不理解0022?可以加上-S参数,就会以符号类型的方式来显示出权限了。

Linux文件权限用户与用户组文件一般属性及权限文件默认权限:umask文件隐藏属性:chattr,lsattr文件特殊权限:SUID,SGID,SBIT目录与文件的权限意义权限与命令的关系

为何是0022呢?与一般权限有关的是后3个数字,umask的分数指的是“该默认值需要减掉的权限”。因为r、w、x分别是4、2、1,也就是说,要拿掉能写的权限(就是2),依此类推。

在默认权限属性上,目录与文件是不一样的,所以这一节开头要分开叙述。x权限对目录非常重要,但一般文件的创建不应该有执行权限,因为一般文件通常是用于数据记录。文件与目录的默认权限如下:

·若用户创建“文件”,则默认没有可执行权限,只有读写权限,即-rw-rw-rw-

·若用户新建“目录”,由于x权限与是否可以进入此目录有关,因此默认为所有基本权限开放,即drwxrwxrwx

文件隐藏属性:chattr,lsattr

除了之前讲的文件的一般属性外,其实还有很多隐藏属性,这些隐藏属性很重要,尤其在系统的数据安全上面。

chattr [+-=] [Asacdistu] 文件或目录名称

参数:

+ :增加某一个特殊参数,其他原本存在参数则不动。

- :删除某一个特殊参数,其他原本存在参数则不动。

= :仅有后面接的参数。

A :当设置了A这个属性时,若你有访问此文件(或目录)时,他的访问时间atime将不会被修改,可避免I/O较慢的机器过度访问磁盘,这对速度较慢的计算机有帮助。

S :一般文件是异步写入磁盘的,如果加上S这个属性时,当你进行任何文件的修改,该改动会“同步”写入磁盘中。

a :当设置a之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root才能设置这个属性。

c :这个属性设置之后,将会自动将此文件压缩,在读取的时候将会自动解压缩,但是在存储的时候,将会先进行压缩后再压缩(对于大文件挺有用)。

d :当dump程序被执行的时候,设置d属性将可使该文件(或目录)不会被dump备份。

i :让一个文件“不能被删除、改名、设置连接也无法写入或添加数据”,对于系统安全性有相当大的帮助,只有root能设置此属性。

s :当文件设置了s属性时,如果这个文件被删除,它将会被完全从这个硬盘空间中删除。

u :与s相反,当使用u来配置文件时,如果该文件被删除,则数据内容其实还存在磁盘中,可以找回该文件。

隐藏属性需要用lsattr来查看。

lsattr [-adR] 文件或目录

参数:

-a :将隐藏文件的属性也显示出来。

-d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名。

-R :与d相反,连同子目录的数据也一并列出来。

文件特殊权限:SUID,SGID,SBIT

SetUID

当s这个标志出现在文件所有者的x权限上时,此时就被称为Set UID,简称为SUID的特殊权限。SUID的限制与功能如下:

·SUID权限仅对二进制程序(binary program)有效;

·执行者对于该程序需要具有x的可执行权限;

·本权限仅在执行该程序的过程中(run-time)有效;

·执行者将暂时具有该程序所有者(owner)的权限;

·SUID对于目录无效。

Set GID

当s标志在文件所有者的x项目为SUID,那s在用户组的x时则称为Set GID,简称为SGID。与SUID不同的是,SGID可以针对文件或目录来设置。具体功能如下:

·SGID对二进制程序有效;

·程序执行者对于该程序来说,需具备x的权限;

·执行者在执行的过程中将会获得该程序用户组的支持。

对于目录,SGID还有如下功能:

·用户若对于此目录具有r与x的权限时,该用户能够进入此目录;

·用户在此目录下的有效用户组将会变成该目录的用户组;

·若用户在此目录下具有w的权限(可以新建文件),则用户所创建的新文件的用户组与此目录的用户组相同。

Sticky Bit

当t出现在others的x权限上时,被称为SBIT,且仅对目录有效,对文件无效,其功能如下:

·当用户对于此目录具有w、x权限时,如果用户在该目录下创建文件或目录时,仅有自己与root才有删除该文件或目录的权限,但有没有操作非自己创建文件或目录的权限要看其他属性。

目录与文件的权限意义

权限对文件的重要性

文件是实际含有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件等。权限对于文件的意义如下:

·r(read):可读取此文件的实际内容,如读取文本文件的文字内容等;

·w(write):可以编辑、新增或是修改该文件的内容(但不含删除该文件);

·x(execute):该文件具有可以被系统执行的权限。

文件的r、w、x权限是针对“文件内容”而言,与文件名的存在与否没有关系,因为文件记录的是实际数据。另外,对于Windows系统来说,文件是否具有执行能力是通过“扩展名”来判断的,例如.exe,.bat,.com等,但在Linux下,实际上不存在“扩展名”,文件是否能被执行则是由x权限来决定。

权限对目录的重要性

如果将目录视为一种特殊文件的话,那么目录的内容是记录文件名列表,文件名与目录具有强烈的关联。权限对于目录的意义如下:

·r(read):表示目录具有读取目录结构列表的权限,具有r权限就可以查询该目录下的文件名数据,可以利用ls这个命令将该目录的内容列表显示出来;

·w(write):写入权限对于目录来说是很强大的,因为它表示你具有更改该目录结构列表的权限。包括新建新的文件与目录、删除已经存在的文件与目录(无论该文件的权限为何)、重命名已存在的文件或目录、转移该目录内的文件或目录的位置;

·x(execute):可执行权限对于目录而言在于用户能否进入该目录成为工作目录的用途,所谓工作目录就是当下的目录,而变换目录成为工作目录的命令为“cd”。

需要注意的是,对于一个目录,如果不具有x权限,那么就无法进入该目录,也无法执行该目录下的任何命令。因此,能否进入目录只与x权限有关,与r权限无关。

权限与命令的关系

让用户能进入某目录成为“工作目录”的基本权限是什么

·可使用的命令:例如cd等切换工作目录的命令;

·目录所需权限:至少需要x权限;

·额外需求:如果用户想要在该目录内查阅目录内容,还需要r权限,如果要对目录内容进行修改、删除等操作,还需要w权限。

用户在某个目录内读取一个文件的基本权限是什么

·可使用的命令:cat、more、less等;

·目录所需权限:用户对这个目录至少需要具有x权限;

·文件所需权限:用户对文件至少需要具有r的权限才行。

让用户可以修改一个文件的基本权限是什么

·可使用的命令:例如nano、vi等;

·目录所需权限:至少需要x权限;

·文件所需权限:用户对该文件至少需要r,w权限。

让一个用户可以创建一个文件的基本权限是什么

·目录所需权限:用户在该目录要具有w,x的权限,终点在w。

让用户进入某目录并执行该目录下的某个命令的基本权限是什么

·目录所需权限:用户在该目录至少要有x的权限;

·文件所需权限:用户在该文件至少要有x的权限。

理解上述关系对Linux文件的操作、文件资源分配等方面都很重要也很基础。

                                                                                  本文部分内容摘自《鸟哥的Linux私房菜 基础学习篇(第三版)》

继续阅读