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

道阻且长,行则将至。埋头苦干,不鸣则已,一举成名!加油骚年 掘金第一篇文章,望你们多多关照,谢谢各位前辈!html

1 前言

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

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

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

  本文将会围绕如下方面展开: vim

在这里插入图片描述

2 基本概念

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

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

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

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,部分命令参数截图以下:

在这里插入图片描述

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
    在这里插入图片描述
  • 列3:表示这个文件或“目录”的“全部者帐号”,按个人理解,就是这个文件是谁第一个建立出来的。
  • 列4:表示这个文件所属的用户组,Group。
  • 列5:表示这个文件的容量大小,默认单位为B
  • 列6:表示这个文件第一次建立的日期,或者是最近的修改日期。其实也就是最后一次修改的日期。补充一点,若是但愿显示完整的时间格式,可使用以下命令:
ls -l --full-time
复制代码

在这里插入图片描述

  • 列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. 对一些特定状况下的使用权限,有了很好的认识;

本篇文章就是基于书本内容的一个阅读,与本身深刻了解后的一个笔记总结。如有错误之处还望指正,但愿对您能有帮助!感受不错能够留个赞哈,方便更多的人看到,谢谢各位!

相关文章
相关标签/搜索