达芬奇技术开发基础、原理与实例
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 基于用户权限的文件保护

Linux系统建立了防止未授权的用户访问其他用户文件的机制,作为文件的所有者可以设置特定的访问权限来限制哪些用户可以对该文件进行何种操作。这种策略建立在Linux系统中用户的分类、访问权限的分类和访问操作的分类的基础上。由于Linux文件系统结构只有一个根目录,所有的文件、子目录都可以挂在这个根目录下,如果没有这种保护机制,那么系统中任何一个文件都可以被任何一个用户访问。

1.3.1 用户分类

Linux系统中的每个用户都必须属于某一个组,这在系统管理员创建账号时必须确定。一个用户可以属于多个组,但通常情况下,一个用户只属于一个组。系统中的所有用户组的信息以及该组的用户都记录在/etc/group文件中,在这个文件中,每组占一行,每行后面列出的是该组中的用户名。一个文件的使用者既可以是文件的所有者,也可以是拥有这个文件的组的成员,或者是其他的用户。用户的信息存放在/etc/passwd文件中,用户配置信息记录在/etc/login.defs文件中。

所有的Linux系统都可以有一个特殊的用户,可以访问系统中所有的文件,不论这个文件访问权限是什么。这个用户通常称为超级用户,是计算机系统的管理者。在Linux系统中,超级用户的用户名是root,用户ID(UID)是0。

系统用户是Linux系统内建的用户。系统用户是为了维护Linux正常运行而建立的,系统用户不能用来登录,如bin、daemon、sync、rpc等用户。系统用户的UID为1~499。

Linux系统的另一类用户为普通用户,普通用户名的UID为500~60000。

1.3.2 文件操作/访问权限的分类

在Linux系统中,文件有3种访问权限(也称为许可):读(r)、写(w)和执行(x)。“读”权限为允许或禁止某个用户或组读取某个文件,“写”权限为允许或禁止某个用户或组写入、修改或删除某个文件,“执行”权限为允许或禁止某个用户或组执行某个文件。“执行”权限只对可执行文件起作用,如可执行的二进制文件或者脚本文件。

对一个目录而言,读权限意味着可以读出这个目录的内容,即可以使用ls命令来列出这个目录下的所有内容;写权限表明可以在这个目录下建立或者删除一个目录项;执行权限是指可以搜索这个目录,但是既不能读也不能写。因此,如果没有对目录的执行权限,那么就不能使用ls-l命令来列出目录下的内容或者是使用cd命令来把该目录变成当前目录。以上权限对于路径中任何一个没有执行权限的目录都适用。

因为有3种用户和3种访问权限,Linux文件就有9种不同的访问权限组合,如表1-2所示。

表1-2 Linux系统文件访问权限概况

X的值可以是1(即允许该操作)或者0(即禁止该操作)。因此可以用1位(bit)来表示每一种权限或用户,换句话说,某个用户对于一个文件可以有8种可能的操作权限。这可以用八进制0~7来表示:0表示没有任何访问权限,7表示拥有所有的权限,如表1-3所示。

表1-3 访问权限值列表

总共用9位来表示所有3类用户与对应的特权属性,用八进制000~777的值来表示。第1个八进制值表示文件拥有者对该文件拥有的权限,第2个八进制值表示组对该文件拥有的权限,第3个八进制值表示其他用户对该文件拥有的权限。用文本表示权限的方法则是“0”用短横线“-”表示,“1”值根据所在的位置用符号“r”、“w”或“x”表示。于是用户对文件访问权限是“0”的可以表示成“---”,访问权限是“7”的可以表示成“rwx”,在有X-Windows界面的Linux系统中可以通过右键单击“文件”→“属性”→“权限”选项的方法打开并设置,如图1-2所示。

图1-2 文件操作/访问权限设置

1.3.3 改变文件或目录的访问权限的命令

除了图1-2的方法以外,在确定了一个文件的访问权限后,用户可以利用Linux系统提供的chmod命令来重新设定不同的访问权限,也可以利用chown命令来更改某个文件或目录的所有者,利用chgrp命令来更改某个文件或目录的用户组。

1.chmod命令

chmod命令是Linux系统用来改变某个用户对文件或目录的访问权限的命令。

chmod命令有以下两种用法。

(1)文字设定法

用字母和符号来作为命令参数的方法,其命令格式为:

chmod[用户类别][操作符号][模式][文件名]

命令中各选项及其含义如下。

用户类别选项的设置及含义如表1-4所示。

表1-4 用户类别选项的设置及含义

该选项默认值为a,即不设置任何值时,该选项默认为所有用户。

操作符号选项的设置及含义如表1-5所示。

表1-5 操作符号选项的设置及含义

模式选项的设置及含义如表1-6所示。

表1-6 模式选项的设置及含义

以上选项均可以单独使用或相互组合使用。

例如,图1-2所示的test文件,当前的用户权限为文件所有者有读、写和执行的权限,同组用户和其他用户无任何权限。若需要为同组用户和其他用户增加读权限,则按文字设定法需要执行以下命令:

chmod go+r test

执行结果如图1-3、图1-4所示。

图1-3 文字设定法chmod命令执行结果1

图1-4 文字设定法chmod命令执行结果2

(2)数字设定法

如前面表1-2所介绍的用数字表示权限的方法:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所有数字属性的格式应为3个从0到7的八进制数。这三个八进制数分别表示user、group、others的权限值。

数字设定法的命令格式为:

chmod[模式][文件名]

其中模式选项用八进制数000~777来表示。

例如,图1-4所示的test文件,当前的用户权限为文件所有者有读、写和执行的权限,同组用户和其他用户仅有只读权限。若需要为同组用户增加写权限,取消文件所有者的执行权限,则按数字设定法需要执行如下命令:

chmod 664 test

执行结果如图1-5、图1-6所示。

图1-5 数字设定法chmod命令执行结果1

图1-6 数字设定法chmod命令执行结果2

2.chgrp命令

chgrp即change group的缩写。chgrp命令用来改变文件或目录所属的组。chgrp命令格式为:

chgrp[选项][组][文件名]

其中组参数即用户组ID,也可以是/etc/group文件中用户组的组名。文件名是以空格分开的要改变属组的文件列表,支持通配符。只有文件的所有者或超级用户才有权力改变该文件所属的组。

chgrp命令常用的选项含义如表1-7所示。

表1-7 chgrp命令的选项含义

3.chown命令

chown即change own的缩写。chown命令用来更改某个文件或目录的所有者或所属组。

chown命令的格式为:

chown[选项][用户或组][文件名]

用户可以是用户名或UID。组可以是组名或GID。文件是以空格分开的要改变权限的文件列表,支持通配符。只有超级用户才可以使用chown命令。

chown命令常用的选项含义和chgrp一样,如表1-7所示。