关于Linux系统的文件权限,你需要了解这些内容

道阻且长,行则将至。埋头苦干,不鸣则已,一鸣惊人!加油骚年

文章目录

  • 1 前言
  • 2 基本概念
    • 2.1 用户和用户组的基本概念
    • 2.2 用户和用户组的基本特征
    • 2.3 Linux下默认文件存放路径
  • 3 Linux的文件属性
    • 3.1 查看文件属性
    • 3.2 文件属性分析
  • 4 如何改变文件属性与权限
    • 4.1 改变所属用户组:chgrp
    • 4.2 改变文件所有者:chown
    • 4.3 改变文件权限:chmod
      • 4.3.1 数字类型改变文件权限
      • 4.3.2 符号类型改变文件权限
  • 5 目录与文件的权限意义
    • 5.1 权限对文件的重要性
    • 5.2 权限对目录的重要性
      • 5.2.1 目录实际举例1
      • 5.2.2 目录实际举例2
  • 6 结合工作实际
  • 7 总结

1 前言

  鸟哥的Linux私房菜:“Linux最优秀的地方之一,就在于它的多用户,多任务环境。而为了让各个用户具有较保密的文件数据,因此文件的权限管理就变得很重要了。”

本文为自己认真阅读《鸟哥的Linux私房菜》对应内容后,总结记录所得。如果有误,还望指正!谢谢

  Linux一般将文件可存取访问的身份分为3个类别,分别是:owner、group、others,且三种身份各有read、write、execute等权限。

  本文将会围绕以下方面展开:
关于Linux系统的文件权限,你需要了解这些内容_第1张图片

2 基本概念

2.1 用户和用户组的基本概念

  用户及用户组的基本概念,以实际中一个家庭为例,假设有一家人,家里只有三兄弟,分别是王大毛、王二毛、王三毛这3个人,家庭的户主是王大毛。简要分析如下:

  • 文件所有者(用户):在这个家庭中,王大毛、王二毛、王三毛,分别有属于自己的房间,那么他们就是这个房间的所有者(用户)。此时王二毛可以进入王三毛的房间,但是却只能看看,什么也不能动,因为这些东西都是王三毛的。
  • 用户组:因为这三个人是一家人,所以他们可以在公共的客厅一块活动,大家都可以在客厅做自己的事情,比如看电视,听音乐等。

2.2 用户和用户组的基本特征

  用户、用户组、其他这几个类别的特征是什么呢?

  • 用户:每个用户,都有自己的空间,数据存储空间,工作空间等;
  • 用户组:同一个用户组的成员,可以有共享的空间交流;不同用户组的成员,不能互相访问;比如上边王大毛的家庭,另外一个家庭的用户张三,就不能去访问。除非得到王大毛家庭用户的“邀请”。
  • 其他:另外家庭的用户张三,就是其他。

2.3 Linux下默认文件存放路径

  在Linux系统下,是有一个默认的路径,默认文件来存放用户和用户组的相关信息,分别如下:

  • /etc/passwd:存放所有的系统上的账号与一般身份用户,以及root的相关信息;
  • /etc/shadow:记录个人的密码;
  • /etc/group:记录Linux所有的组名。

  需要特别注意的是:这三个文件是Linux系统里面账号、密码、用户组信息的集中地,一定不要随便删除这三个文件。

3 Linux的文件属性

3.1 查看文件属性

  当我们在Linux系统下,使用 ls -l 命令查看目录文件时,会发现有很多的内容,我刚开始的时候了解的也不是很深入,只是知道个大概,今天认认真真看了看书,做一个总结。

  关于Linux下 ls 命令的相关参数,可以参考菜鸟教程 - ls,部分命令参数截图如下:
关于Linux系统的文件权限,你需要了解这些内容_第2张图片

3.2 文件属性分析

  我参考自己的Ubuntu,拿如下几个文件举例:

列1 列2 列3 列4 列5 列6 列7
drwxrwxrwx 2 zhaoc zhaoc 4096 10月 16 22:50 Music
drwxr-xr-x 2 root root 4096 3月 24 21:50 vim
-rw-r–r-- 1 root root 438 3月 15 15:49 exports
  • 列1:代表这个文件的类型与权限;这一列,如果仔细观察就会发现,每一个都是由10个字符组成(由于编辑器原因,可能会连到一块),下边对这10个字符分开来说:
    • 第一个字符:代表这个文件是“目录、文件或链接文件等”,就是文件的类型,不同的 字母 代表的含义是不一样的:
      • [ d ]:代表目录,即此文件类型为一个目录类型,也就是常见的文件夹;如上边的“Music”文件夹;
      • [ - ]:代表文件,就是一个最小的单元,也就是windows下常见的基本文件等;如上边的“exports”文件;
      • [ l ]:小写字母“L”,代表连接文件(linkfile);
      • [ b ]:表示设备文件里面的可供存储的接口设备;
      • [ c ]:表示设备文件里面的串行端口设备,例如键盘、鼠标等(一次性读取设备);
    • 第2-4个字符:这三个字符代表文件所有者的权限,如上述“Music”文件,所有者的权限就是 [rwx],也就是可读,可写,可执行权限;
    • 第5-7个字符:代表同用户组的权限,也就是同一个用户组内的其他用户,对这个文件的权限。以“vim”文件为例,同用户组的权限就是 [r-x],即可读,可执行权限;
    • 第8-10个字符:代表其他非本用户组的权限。以“exports”文件为例,其他非本用户组的权限为 [r–],也就是可读权限;
  • 列2:表示有多少文件名连接到此节点。通俗的理解就是此文件夹下,有多少个文件夹。按照我自己的测试,这个只会显示有多少个文件夹,而不包含文件。另外需要注意的是,这个数量包含隐藏文件夹的数量,可以参考下图做一个对比,11-Linux文件夹下边只有一个文件夹,但是此处显示的文件名却是3,那是因为还有2个隐藏文件夹,注意这两个隐藏文件夹前边的文件类型也是 d
    关于Linux系统的文件权限,你需要了解这些内容_第3张图片
  • 列3:表示这个文件或“目录”的“所有者账号”,按我的理解,就是这个文件是谁第一个创建出来的。
  • 列4:表示这个文件所属的用户组,Group。
  • 列5:表示这个文件的容量大小,默认单位为B
  • 列6:表示这个文件第一次创建的日期,或者是最近的修改日期。其实也就是最后一次修改的日期。补充一点,如果希望显示完整的时间格式,可以使用如下命令:
ls -l --full-time

关于Linux系统的文件权限,你需要了解这些内容_第4张图片

  • 列7:这一列就是文件名啦。需要了解的是,以英文符号 “.” 开头的文件,为隐藏文件。

4 如何改变文件属性与权限

  有几个常用的更改文件属性、文件权限的命令。先列出来,在一一分析:

  • chgrp:改变文件所属用户组;
  • chown:改变文件所有者;
  • chmod:改变文件的权限;

4.1 改变所属用户组:chgrp

  更改文件/目录所属用户组,一般我们较为常用的就是使用 chgrp 命令。其实这个命令就是英文 change group 的缩写;

  需要注意的是,要被改变的组名必须要在 /etc/group 文件内存在才可以,否则就会报错。

  基本的命令格式如下:

chgrp [-R] [所属群组] [文件或目录]

[-R]:进行递归的持续更改,即修改此目录及其下属所有文件/目录的群组。

  更为详细的信息可以参考:菜鸟教程 - chgrp,里边有更为详尽的解释及示例。

4.2 改变文件所有者:chown

  更改文件/目录的所有者,一般常用的命令就是 chown 命令,也就是英文 change owner 的缩写;

  同样需要注意的是,用户必须是已经存在于系统中的账号,也就是在 /etc/passwd 这个文件中有记录的用户名称才能改变。

  基本的命令格式如下:

chown [-R] [账号名称] [文件或目录]

[-R]:进行递归的持续更改,即修改此目录及其下属所有文件/目录的群组。

  如果需要同时更改文件的所有者和用户组,可以使用如下命令:

chown root:root filename

  需要同时更改文件所有者及用户组时,推荐使用冒号 “:” ;如果需要单纯的修改用户组怎么办?可以使用如下命令:

chown .root filename

  此种情况下,可以使用英文的小数点 “.

4.3 改变文件权限:chmod

  这个命令,可以说是在实际使用中,最常用的一个命令之一。

  基本的命令格式如下:

chmod [-R] [xyz] [文件或目录]

[-R]:进行递归的持续更改,即修改此目录及其下属所有文件/目录的群组。

  而这个命令,稍微大点来说,有两种不同的用法,下边分开描述。

4.3.1 数字类型改变文件权限

  通过直接使用数字方法,改变文件权限,在实际中是较为常用的方法。简单的来说,一个文件/目录,有三种不同的身份,每种身份有三种不同的权限,按照二进制来划分如下:

r w x r w x r w x
4 2 1 4 2 1 4 2 1

  同样,拿上述三个文件,做个分析

列1 列2 列3 列4 列5 列6 列7
drwxrwxrwx 2 zhaoc zhaoc 4096 10月 16 22:50 Music
drwxr-xr-x 2 root root 4096 3月 24 21:50 vim
-rw-r–r-- 1 root root 438 3月 15 15:49 exports

  如果我要将 Music 设置为当前权限(rwxrwxrwx),应该怎么做,分析,此文件拥有全部的权限,如果要设置为此权限类型,应该使用如下命令:

chmod 777 Music

  同理,如果要将 exports 设置为当前权限(rw-r–r--),设置命令如下:

chmod 644 exports

  总结一下经验就是,使用数组类型改变文件权限时,将对应位权限转换为二进制数值,通过此命令设置文件权限即可。

4.3.2 符号类型改变文件权限

  所谓的符号类型,就是使用类似于字母的方式,来改变文件权限。我们常用的身份有 user、group、others 这三种身份,因此 Linux 中通过 u g o 来代表三种身份,另外用 a 代表全部的身份;

  具体的权限类型就可以用 r w x 来表示;

  操作方式可以用如下三种方式表示:

  • +:表示给此文件/目录,加入某种权限,除此之外的其他权限不变;按我的理解就是只修改对应部分的权限;
  • -:表示除去此文件/目录的某种权限,除此之外的其他权限保持不变;
  • =:表示给文件/目录设置权限,此种方式会覆盖原来的所有权限内容。

  用上述 “exports” 文件举例,此文件的权限为(rw-r–r--),我们在设置时,可以使用如下命令:

chmod u=rw,go=r exports

  上述命令解释过来,就是给文件所有者 “u” ,设置可读,可写的权限;给用户组和其他用户设置可读权限。

  需要注意的是:u=rw,go=r 这条命令,是连在一起的,中间不能有任何空格

  如果我们不知道某个文件原来的属性,只想给这个文件的每个用户增加一个可写入的权限,就可以使用如下命令:

chmod a+w filename

  同样的,如果是要给这个文件的所有用户去掉可执行权限,则可以使用如下命令:

chmod a-x filename

  通过上面两个示例,可以知道,在 + - 状态下,只要是没有指定到的选项,则该权限“不会被变动”。

5 目录与文件的权限意义

  目录与文件的权限,对于数据的安全是有很重要的作用的,下边分开来介绍文件权限对于一般文件与目录文件有何不同

5.1 权限对文件的重要性

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

  • r(read):可读取此文件的实际内容,如读取文本文件的文字内容等;
  • w(write):可以编辑、新增或者是修改该文件的内容,但是不包含删除该文件;也就是说写权限只能对文件的内容进行修改。
  • x(execute):该文件具有可以被系统执行的权限。此时需要注意windows下可执行文件与Linux系统下可执行文件的不同。windows是根据文件的“扩展名”来判断文件是否有可执行权限;而Linux是通过判断此文件是否有 “x” 权限,来决定是否可以执行。
  • 总结:对于文件来说,所具有的权限是对文件的内容的权限,但并不具备删除该文件本身的权限。因为文件记录的是实际的数据。

5.2 权限对目录的重要性

  文件是存放实际数据的所在,目录主要的内容是记录文件名列表,文件名与目录有强烈的关联。所以对于目录时,不同的权限也有不同的作用:

  • r(read):表示具有读取目录结构列表的权限;也就是说,你可以看到这个目录下有哪些文件列表,不过也就只是看看而已;
  • w(write):这个可以写入的权限对目录来说是很强大的,它表示你具有更改该目录结构列表的权限:
    • 新建新的文件与目录;
    • 删除已经存在的文件与目录(不论该文件的权限为何);
    • 将已存在的文件或目录进行重命名;
    • 转移该目录内的文件、目录位置。
    • 总结一下:目录的w权限就与该目录下面的文件名变动有关联。
  • x(execute):目录的可执行权限有什么用?目录不能被用来执行,但是目录的x 可执行权限代表的是用户能否进入该目录成为工作目录的用途。

5.2.1 目录实际举例1

  举例说明目录的可执行权限有什么作用,假设有个目录,权限如下:

drwxr--r-- 3 root root 4096 3月 24 21:50 filename

  此时系统有个账号名称为 zhaoc,这个账号并没有支持 root 用户组,请问 zhaoc 对这个目录有何权限?是否可以切换到此目录中?

  回答:zhaoc 对此目录仅具有 r 的权限,因此 zhaoc 可以查询此目录下的文件名列表。因为 zhaoc 不具有 x 的权限,所以 zhaoc 并不能切换到此目录内这一点很重要

5.2.2 目录实际举例2

  假设我的账号名称为 zhaoc,我的主文件夹在 /home/zhaoc 这个路径下,zhaoc对此目录具有完全的 [rwx] 权限,如果在此目录下有一个文件 filename,改文件的权限如下:

-rwx------ 1 root root 4365 Sep 19 23:20 filename

  问题:zhaoc 对此文件夹的权限是什么?可否删除此文件?

  回答:由上述文件权限列表可知,此时 zhaoc 对此文件来说是 “others”的身份,因此这个文件他无法读,无法编辑,也无法执行,也就是说他无法变动这个文件的内容。但是,由于这个文件在他的主文件夹下,他在此目录下具有 [rwx] 的完整权限,因此对于 filename 这个 “文件名” 来说,zhaoc 是能够 “删除” 的,也就是说 zhaoc 这个用户能够删除 “filename” 这个文件。

6 结合工作实际

  结合我目前工作经验来看,在实际工作中,文件权限的重要性在开发服务器上会得到明显体现。比如我刚到公司的时候,所有文件权限都是只读;目录权限为可读、可执行;也就是说,我对服务器上的任何东西都没有写入权限;这样很明显的一个好处就是,防止新人不小心删除服务器的文件,给公司造成损失。

  等到后来我在公司待了一段时间,熟悉了一些东西、需要接触项目开发的时候,就给我开放了对服务器特定目录的可写操作,保证我可以在此文件夹内,进行代码修改、提交等操作。

7 总结

  1. 对用户,用户组等概念特征,有了一个基本了解;
  2. 对文件属性有了一个基本认识,以及文件属性的查看方式等;
  3. 对改变文件属性与权限的三种方法,有了更深入的了解;
  4. 对一些特定情况下的使用权限,有了很好的认识;

本篇文章就是基于书本内容的一个阅读,与自己深入了解后的一个笔记总结。若有错误之处还望指正,希望对您能有帮助!感觉不错可以留个赞哈,方便更多的人看到,谢谢各位!

你可能感兴趣的:(Linux)