67677新澳门手机版 > 服务器&运维 > Linux 文件权限总结
Linux 文件权限总结
2020-03-20 16:54

在 Linux 中最基本的任务之一就是设置文件权限。理解它们是如何实现的是你进入 Linux 世界的第一步。如您所料,这一基本操作在类 UNIX 操作系统中大同小异。实际上,Linux 文件权限系统就直接取自于 UNIX 文件权限(甚至使用许多相同的工具)。

Linux文件权限学习总结,linux权限总结

一、用户对文件或目录都有哪些权限?

  四种:读、写、执行、没有权限

二、如何表示这四种权限?

  如果用十进制数字表示,分别为:4、2、1、0;如果用字符表示,分别为:r、w、x、-。个人觉得,使用chmod命令更改文件或目录权限时,数字表示法显然比字符表示法简洁明快

三、对于文件和目录而言,这四种权限是否具有同样的含义?

  并非如此,如下所示:

  ---------------------------------------------------------------------------

                    普通文件                                       目录

  r:用户拥有读取该文件内容的权限        用户拥有列出其中文件列表的权限

  w:用户拥有修改该文件内容的权限       用户拥有在其中创建、删除文件的权限

  x:用户拥有执行该文件的权限             用户拥有进入该目录、复制其中文件的权限

  ----------------------------------------------------------------------------

  对目录的这些各个单项权限的操作,我都有一一试验,详细结果贴在了文末,图片就不再贴出。需要提醒的是:

  1、拥有某项权限,并不意味着就一定能够对文件或目录做相应的操作。

  2、普通文件拥有r、w、x权限或它们权限的组合,针对的是文件内容,与文件本身的操作无关。若想对文件本身进行删除、移动等操作,需要其上层目录的权限,下面会讲到。

四、为什么要同时设定三组用户的权限?

  这是因为linux里文件或目录的权限是和用户管理联系在一起的。我们设定文件的权限时,除了设定属主的权限,还要设定属主同组用户的权限,以及其它用户的权限。关于Linux用户管理,请自行搜索相关资料。 

 

五、为什么很多文件或目录的权限都是一个权限组合?

  前面讲到,拥有某项权限并不意味着一定能够完成相应操作,原因之一就是:单一权限无法保证我们完成相应的操作,所以设定文件或目录权限时,通常 使用权限的组合,这对目录的权限设定尤其重要。例如,从道理上讲,如果目录拥有w权限,我们就可以在其中新建、删除文件,但从实际的操作结果来看,这些操 作无法完成,只有当目录同时拥有了x权限时,才可以进行上述的操作。-wx权限,即是一个权限组合,对目录而言,表示用户可以在其中创建、删除文件;再如 常用的r-x组合:对目录来说,表示用户可以列出目录内容,复制其中的文件。可以讲,没有x权限的配合,目录的w权限就是一句空话,没有x权限的配合,就 无法对目录中的内容进行任何操作,至于对目录本身的操作,由其上层目录的权限决定。能理解吧?不能进入目录的话,何谈对目录中文件进行操作呢?!

  目录拥有权限组合rw-、r-x、-wx时,我们能对其中的文件或子目录作哪些操作呢?大家可以先猜测一下,然后动手试验一下,看看自己的猜测是否正确。rwx权限就不用考虑了,基本上是完全权限,当然,特殊权限除外。

六、文件或目录的权限受哪些方面的影响?

  拥有某项权限并不意味着一定能够进行相应操作,并不仅仅是因为需要权限的组合,有时候就会出现这种情况:我们正确设置了文件或目录的权限组合, 却仍然不能对它们进行相应的操作。这是因为,能否对文件或目录进行各种操作不但取决于文件自身的权限,还要受到其上层目录的权限的影响。本文的第三、第五 部分都已经提到了这一点。要牢记它,这非常重要!

  先来看文件的操作,包括两部分:对文件本身的操作,以及对文件内容的操作。

  对文件本身的操作,一般是移动、复制、删除、重命名,这些所有的操作都是由其上层目录的权限决定的。能否理解?文件是目录中的文件,我们知 道,linux把目录也看成一个文件,那么目录里的所有东西都可看成文件的内容,因此,目录的权限决定了目录中的文件的操作,这主要是指对文件本身的操作,对文件内容的操作,还需要文件自身权限的配合。

  用户lqs的家目录里有一个目录000,其中有一个文件a.txt。家目录lqs已经设置了权限705,目录000权限设定为703,其中的 a.txt文件权限设定为700。其它用户normal成功地删除了文件a.txt,尽管文件的权限只是700!这是因为文件的删除等操作是由 上层目录的权限决定的,而文件的上层目录000的权限为703,它赋予了其它用户在其中添加、删除文件的权限。

  因此我们得出结论,能否对目录中的文件本身进行移动、删除、重命名等操作,取决于其上层目录的权限。这里的文件,不但指普通文件,还包括目录文件,即目录的子目录。

  对文件内容的操作,一般是指修改文件内容。对文件内容进行操作,首先其目录要有x权限,然后文件要有w权限。 

对目录里的子目录的操作,与目录里文件的操作原理一致,但相应权限与前面讲到的目录操作的权限一致。这里不再一一列举。记住,要多用用chmod命令,这些东西你自然会知道。

七、特殊权限

  linux里有一些特殊权限,比如s,它们需要4位十进制数字来表示。这里不谈,有兴趣可以自行了解一下。

  附录:

  一、权限字符表示是如何变成数字表示的?

  使用ls –l命令显示文件属性的长格式时,第一个字段就是用来表示文件的种类和权限的,该字段最常见的值为-rwxr-xr-x。一共有10个字符,第一位表示文 件类型,后面九位表示文件权限,这9位字符可分成3组,分别表示文件属主的权限,属主同组用户的权限,和其它用户的权限。

  rwxr-xr-x表示文件属主具有读、写、执行的全部权限,属主同组用户具有可读权限,其它用户具有可读权限,用十进制数字表示,就是755。

  那么,755是怎么来的?

  要得出这个十进制数字,需要先把rwxr-xr-x转换成二进制。把它们用二进制数字表示的话,有某项权限即为1,没有为0,那么rwxr-xr-x的二进制表示为111 101 101。

  再把111 101 101这三组二进制数字分别转换成十进制。转换算法还记得吗?从右到左,各位上的数字依次乘以2的n次方(n的取值从0开始)。如下所示:

  第一组:1x20 + 1x21 +1x22 = 7

  第二组:1x20 + 0x21 +1x22 = 5

  第三组:1x20 + 0x21 +1x22 = 5

  三组数字组合起来,即为755。

  其实不用每次都把每一个字符转换成二进制,再转换成十进制,没这么麻烦。因为我们可以算出:可读权限用十进制数字表示为4,可写权限表示为2,可执行权限表示为1,没有权限表示为0,记住它们就不必每次全部转来转去了。

  先来看可读权限r--,它的二进制表示为100,把它转换成十进制:0x20

  • 0x21 +1x22 = 4

  再来看可写权限-w-,它的二进制表示为010,把它转换成十进制:0x20

  • 1x21 +0x22 = 2

  最后看可执行权限--x,它的二进制表示为001,把它转换成十进制:1x20

  • 0x21 +0x22 = 1

    二、各个权限具体的操作试验结果如下:

  目录的可读权限:可列出目录里的文件,不可重命名、复制、移动、删除其中的文件,不可进入目录

  目录的可写权限:不可列出目录里的文件,不可重命名、复制、移动、删除其中的文件,不可进入目录

  目录的可执行权限:不可列出目录里的文件,不可重命名、移动、删除其中的文件,可复制其中的文件,可进入目录。

 

文章出处:

一、用户对文件或目录都有哪些权限? 四种:读、写、执行、没有权限 二、如何表示这四种权限?...

我们已经知道文件权限对于系统的安全重要性了,也知道文件权限与用户与用户组的关系了,那么,如何修改文件的权限呢?我们可以修改多少文件权限呢?其实,一个文件的权限很多。我们先介绍几个简单的,例如:用户组、拥有者、各种身份的权限等等。

但不要以为理解文件权限需要长时间的学习。事实上会很简单,让我们一起来看看你需要了解哪些内容以及如何使用它们。

• chgrp:改变文件所属用户组 。
• chown:改变文件拥有者。
• chmod:改变文件的属性、SUID等特性。
更改所属用户组, chgrp
  改变文件的用户组很简单,直接用chgrp即可,这个命令就是change group(改变用户组)的缩写。这样就很好记了。不过,请记住,要改变成为的用户组名称,必须在 /etc/group里存在,否则就会显示错误。
  假设以root的身份登入FC4,那么,在你的家目录内有一个install.log文件,如何改变该文件的用户组呢?假设你已经知道在 /etc/group里已经存在一个名为users的用户组,但是,testing这个用户组名字就不存在 /etc/group中了,此时改变用户组成为users与testing,会有什么现象发生呢?[[email protected] ~]# chgrp [-R] dirname/filename ...
参数:
-R : 进行递归( recursive )的持续更改,即连同子目录下的所有文件、目录
都更新成为这个用户组。常常用在更改某一目录的情况。
范例:
[[email protected] ~]# chgrp users install.log
[[email protected] ~]# ls -l
-rw-r--r--  1 root users 68495 Jun 25 08:53 install.log
[[email protected] ~]# chgrp testing install.log
chgrp: invalid group name `testing' <== 出现错误信息~找不到这个用户组名~

图片 1

发现了吗?文件的用户组被改成users了,但要改成testing的时候,就会发生错误。注意,出现错误信息,还是要查查错误信息的内容才好。
更改文件拥有者, chown
那 么,如何改变一个文件的拥有者呢?很简单。既然改变用户组是change group,那么改变拥有者就是change owner(改变拥有者)。这就是chown这个命令的用途,要注意的是,用户必须是已经存在系统中的,也就是在 /etc/passwd这个文件中有记录的用户名称才可改变。
chown的用途很多,还可以顺便直接修改用户组的名称。此外,如果要连目录下的所有子目录或文件同时更改文件拥有者的话,直接加上 -R的参数即可。我们来看看语法与范例:

基础概念

你要明白的第一件事是文件权限可以用来干什么。当你设置一个分组的权限时发生了什么?让我们将其展开来说,这个概念就真的简单多了。那到底什么是权限?什么是分组呢?

你可以设置的3种权限:

  • 读 — 允许该分组读文件(用r表示)
  • 写 — 允许该分组写文件(用w表示)
  • 执行 — 允许该分组执行(运行)文件(用x表示)

为了更好地解释这如何应用于一个分组,例如,你允许一个分组可以读写一个文件,但不能执行。或者,你可以允许一个分组读和执行一个文件,但不能写。甚至你可以允许一个分组有读、写、执行全部的权限,也可以删除全部权限来去除该组的权限。

现在,什么是分组呢,有以下4个:

  • user — 文件实际的拥有者
  • group — 用户所在的用户组
  • others — 用户组外的其他用户
  • all — 所有用户

大多数情况,你只会对前3组进行操作,all 这一组只是作为快捷方式(稍后我会解释)。

到目前为止很简单,对吧?接下来我们将深入一层。

如果你打开一个终端并运行命令 ls -l,你将会看到逐行列出当前工作目录下所有的文件和文件夹的列表(如图)

图片 2

你会留意到最左边那列是像是 -rw-rw-r– 这样的。

实际上这列表应该这样看:

rw- rw- r–

正如你所见,列表将其分为如下3部分:

  • rw-
  • rw-
  • r–

权限和组的顺序都很重要,顺序总是:

  • 所属者 所属组 其他人 — 分组
  • 读 写 执行 — 权限

在我们上面示例的权限列表中,所属者拥有读/写权限,所属组拥有读/写权限,其他人用户仅拥有读权限。这些分组中赋予执行权限的话,就用一个 x 表示。

图片 3

[[email protected] ~]# chown [-R] 账号名称 文件或目录
[[email protected] ~]# chown [-R] 账号名称:用户组名称 文件或目录
参数:
-R : 进行递归( recursive )的持续更改,即连同子目录下的所有文件、目录
都更新成为这个用户组。常常用在更改某一目录的情况。
范例:
[[email protected] ~]# chown bin install.log
[[email protected] ~]# ls -l
-rw-r--r--  1 bin  users 68495 Jun 25 08:53 install.log
[[email protected] ~]# chown root:root install.log
[[email protected] ~]# ls -l
-rw-r--r--  1 root root 68495 Jun 25 08:53 install.log

等效数值

接下来我们让它更复杂一些,每个权限都可以用一个数字表示。这些数字是:

  • 读 — 4
  • 写 — 2
  • 执行— 1

数值代替不是一个一个的替换,你不能像这样:

-42-42-4–

你该把每个分组的数值相加,给用户读和写权限,你该用 4 + 2 得到 6。给用户组相同的权限,也是使用相同的数值。假如你只想给其他用户读的权限,那就设置它为4。现在用数值表示为:

664

如果你想给一个文件664权限,你可以使用 chmod 命令,如:

chmod 664 FILENAME

FILENAME 处为文件名。

我们知道如何改变文件的用户组与拥有者了,那么,什么时候要使用chown或chgrp呢?或许你会觉得奇怪吧?是的,确实有时候需要更改文件的拥有者的,最常见的例子就是在复制文件给其他人时,我们使用最简单的cp来说明好了:

更改权限

既然你已经理解了文件权限,那是时候学习如何更改这些权限了。就是使用 chmod 命令来实现。第一步你要知道你能否更改文件权限,你必须是文件的所有者或者有权限编辑文件(或者通过 su 或 sudo 得到权限)。正因为这样,你不能随意切换目录和更改文件权限。

继续用我们的例子 (-rw-rw-r–)。假设这个文件(命名为 script.sh)实际是个shell脚本,需要被执行,但是你只想让自己有权限执行这个脚本。这个时候,你可能会想:“我需要是文件的权限如 -rwx-rw-r–”。为了设置 x 权限位,你可以这样使用 chmod 命令:

chmod u+x script.sh

这时候,列表中显示的应该是 -rwx-rw-r– 。

如果你想同时让用户及其所属组同时拥有执行权限,命令应该这样:

chmod ug+x script.sh

明白这是怎么工作的了吗?下面我们让它更有趣些。不管什么原因,你不小心给了所有分组对文件的执行权限(列表中是这样的 -rwx-rwx-r-x)。

如果你想去除其他用户的执行权限,只需运行命令:

chmod o-x script.sh

如果你想完全删除文件的可执行权限,你可以用两种方法:

chmod ugo-x script.sh

或者

chmod a-x script.sh

以上就是所有内容,能使操作更有效率。我希望能避免哪些可能会导致一些问题的操作(例如你不小心对 script.sh 使用 a-rwx 这样的 chmod 命令)。

[[email protected] ~]# cp 来源文件 目的文件

目录权限

你也可以对一个目录执行 chmod 命令。当你作为用户创建一个新的目录,通常新建目录具有这样的权限:

drwxrwxr-x

注:开头的 d 表示这是一个目录。

正如你所见,用户及其所在组都对文件夹具有操作权限,但这并不意味着在这文件夹中出创建的文件也具有与其相同的权限(创建的文件使用默认系统的权限 -rw-rw-r–)。但如果你想在新文件夹中创建文件,并且移除用户组的写权限,你不用切换到该目录下并对所有文件使用 chmod 命令。你可以用加上参数 R(意味着递归)的 chmod 命令,同时更改该文件夹及其目录下所有的文件的权限。

现在,假设有一文件夹 TEST,里面有一些脚本,所有这些(包括 TEST 文件夹)拥有权限 -rwxrwxr-x。如果你想移除用户组的写权限,你可以运行命令:

chmod -R g-w TEST

运行命令 ls -l,你讲看到列出的 TEST 文件夹的权限信息是 drwxr-xr-x。用户组被去除了写权限(其目录下的所有文件也如此)。

假设今天要将 .bashrc文件复制成为 .bashrc_test,且是要给bin这个人,你可以这样做:

总结

现在,你应该对基本的 Linux 文件权限有了深入的理解。对于更高级的东西学起来会很轻松,像 setgid、setuid 和 ACL 这些。没有良好的基础,你很快就会混淆不清概念的。

Linux 文件权限从早期到现在没有太大变化,而且很可能以后也不会变化。

[[email protected] ~]# cp .bashrc .bashrc_test
[[email protected] ~]# ls -al .bashrc*
-rw-r--r--  1 root root 395 Jul  4 11:45 .bashrc
-rw-r--r--  1 root root 395 Jul 13 11:31 .bashrc_test

怎么办?.bashrc_test还是属于root所有,如此一来,即使将文件拿给bin用户了,他仍然无法修改(看属性就知道了),所以就必须修改这个文件的拥有者与用户组。
更改9个属性, chmod
文件属性的改变使用chmod命令,但是,属性的设置方法有两种,分别可以使用数字或者是符号。
• 数字类型改变文件权限
Linux文件的基本属性有9个,分别是owner/group/others组别的read/write/ excute属性,先复习一下刚刚上面提到的数据:

-rwxrwxrwx

这9个属性是三个一组。其中,可以使用数字来表示各个属性,各属性的对照表如下:

r:4
w:2
x:1

同一组(owner/group/others)的3个属性(r/w/x)是需要累加的,例如当属性为 [-rwxrwx---] 则是:

owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0