Linux文件权限

Posted ericz2j

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux文件权限相关的知识,希望对你有一定的参考价值。

(整理自《鸟哥的Linux私房菜》书籍)

Linux一般把文件可读写的身份分为三个类别,分别是:拥有者(owner)、所属群组(group)、其他人(others),且三种身份各有读(read)、写(write)、执行(execute)等权限。

 

1.用户与用户组

1.1文件拥有者:例如当你将你的email情书转存成文件之后,放在你的家目录,你总不希望别人看到你的情书,所以这个时候你把情书的权限设置成文件拥有者,那么就只有你自己能够查看和修改这份情书,别人就只有能过看到就是一份情书,没法对其进行任何操作。

1.2用户组:当你在团队进行协同工作的时候,我可以经由简易的文件权限的设置,就能限制非自己团队的成员无法看到团队的文件,而团队中的成员可以查看修改文件。并且每个账号都可以由多个用户组的支持。

1.3其他人:这是相对而言的,如果其他人相对于一个团队来说的话,那么这个其他人就不能看到和修改这个团队的文件。

三者关系如图:

 技术图片

 

 

我们以王三毛为例,王三毛这个『文件』的拥有者为王三毛,他属于王大毛这个群组, 而张小猪相对于王三毛,则只是一个『其他人(others)』而已。

 

Linux用户身份与用户组记录的文件:在默认情况下,所有的系统上的账号和一般身份用户,还有那个root的相关信息,都是记录在/etc/passwd这个文件内的,至于个人的密码则是记录在/etc/shadow文件内,Linux所有的组名都是记录在/etc/group这个文件内。

 

2.Linux文件权限

2.1Linux文件属性

在介绍文件属性之前,由一个重要的命令,ls命令,我们先来介绍一下这个命令。

切换到root权限后,执行ls -al命令:

 技术图片

 

 ls是list的意思,重点在显示文件的文件名和相关属性,而选项【-al】则表示列出所有的文件详细的权限与属性(包括隐藏文件,就是第一个字符为.的文件)

下面解释一下这七个字段的意思:

 技术图片

 

 

§  第一栏代表这个文件的类型与权限(permission):这一栏其实共有十个字符;

•        第一个字符代表这个文件是『目录、文件或链接文件等等』:

o   当为[ d ]则是目录,例如上表档名为『.config』的那一行;

o   当为[ - ]则是文件,例如上表档名为『initial-setup-ks.cfg』那一行; o 若是[ l ]则表示为连结档(link file);

o   若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);

o   若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

 

•        接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。

o   第一组为『文件拥有者可具备的权限』,以『initial-setup-ks.cfg』那个文件为例, 该文件的拥有者可以读写,但不可执行; o 第二组为『加入此群组之账号的权限』;

o   第三组为『非本人且没有加入本群组之其他账号的权限』。

 

其中rwx的含义,分别对于文件和目录的含义是不一样的,对于文件来说:

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

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

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

对于目录来说:

•        r (read contents in directory):表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来。

•        w (modify contents of directory):这个可写入的权限对目录来说,他表示你具有改动该目录结构列表的权限,也就是底下这些权限:

o   建立新的文件与目录;

o   删除已经存在的文件与目录(不论该文件的权限为何)

o 将已存在的文件或目录进行更名;

o 移动该目录内的文件、目录位置。

总之,目录的 w 权限就与该目录底下的文件名异动有关就对了。

•        x (access directory):目录只是记录文件名而已,是不可以被执行的,目录的 x 代表的是用户能否进入该目录成为工作目录的用途。 所谓的工作目录(work directory)就是你目前所在的目录。举例来说,当你登入 Linux 时, 你所在的家目录就是你当下的工作目录。而变换目录的指令是『cd』(change directory)。

 

§  第二栏表示有多少档名连结到此节点(i-node):

每个文件都会将他的权限与属性记录到文件系统的 i-node 中,不过,我们使用的目录树却是使用文件名来记录, 因此每个档名就会连结到一个 i-node !这个属性记录的,就是有多少不同的档名连结到相同的一个 i-node 号码。

§  第三栏表示这个文件(或目录)的『拥有者账号』

§  第四栏表示这个文件的所属群组

§  第五栏为这个文件的容量大小,默认单位为 bytes;

§  第六栏为这个文件的建档日期或者是最近的修改日期:

§ 第七栏为这个文件的档名

2.2修改文件属性和权限

•        chgrp :改变文件所属群组

•        chown :改变文件拥有者

•        chmod :改变文件的权限, SUID, SGID, SBIT等等的特性

(1)修改所属的用户组:chgrp

要被修改的组名必须在/etc/group文件中存在才行,否则会显示错误。

 

(2)修改文件拥有者:chown

要被修改的用户必须在/etc/passwd文件中存在才可以被修改,否则会显示错误。

chown 还可以顺便直接修改群组的名称。此外,如果要连目录下的所有次目录或文件同时更改文件拥有者的话,直接加上 -R 的选项即可。

 

(3)修改权限:chmod

修改权限可以分别使用数字或是符号来进行权限的修改。

①数字类型修改文件权限

Linux 文件的基本权限就有九个,分别是 owner/group/others 三种身份各有自己的 read/write/execute 权限,我们可以使用数字来代表各个权限,各权限的分数对照表如下:

r:4

w:2

x:1

每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx---] 分数则是:

owner = rwx = 4+2+1 = 7

group = rwx = 4+2+1 = 7

others= --- = 0+0+0 = 0

所以等一下我们设定权限的变更时,该文件的权限数字就是 770 。变更权限的指令 chmod 的语法是这样的:

[root@study ~]# chmod [-R] xyz 文件或目录选项与参数:

xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。

-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更

那如果要将权限变成『 -rwxr-xr-- 』呢?那么权限的分数就成为 [4+2+1][4+0+1][4+0+0]=754 !所以你需要下达『 chmod 754 filename』。 另外,在实际的系统运作中最常发生的一个问题就是,常常我们以 vim 编辑一个 shell 的文字批处理文件后,他的权限通常是 -rw-rw-r-- 也就是 664, 如果要将该文件变成可执行文件,并且不要让其他人修改此一文件的话, 那么就需要-rwxr-xr-x 这样的权限,此时就得要下达:『 chmod 755 test.sh 』的指令。 

另外,如果有些文件你不希望被其他人看到,那么应该将文件的权限设定为例如:『-rwxr-----』,那就下达『 chmod 740 filename 』。 

 

②符号类型修改文件权限

九个权限分别是(1)user (2)group (3)others 三种身份,那么我们就可以藉由 u, g, o 来代表三种身份的权限,此外, a 则代表 all 亦即全部的身份,那么读写的权限就可以写成 r, w, x !也就是可以使用底下的方式来看:

chmod

u g

o

a

+(加入)

-(除去)

=(设定)

r

w

x

文件或目录


user (u):具有可读、可写、可执行的权限;来实际操作一下吧!假如我们要设定一个文件的权限成为『-rwxr-xr-x』时,基本上就是:

group 与 others (g/o):具有可读与执行的权限。

以上是关于Linux文件权限的主要内容,如果未能解决你的问题,请参考以下文章

linux文件权限数字啥意思

在Linux系统中,如何更改文件的访问权限

Linux特殊文件权限

linux目录命令,文件命令,权限设置命令

linux 下 文件的X权限有啥用

Linux 文件权限