Linux下文件权限

本文介绍Linux下文件权限的相关知识,同时也是自己对这部分内容的一些汇总

基础权限

Linux下权限的表示。

权限 简写 数值 对文件的影响 对目录的影响
读取 r 4 查看文件内容 列出目录中文件
写入 w 2 修改文件的内容 删除,新建或重命名目录下的文件或文件夹
执行 x 1 使文件可以作为可执行程序执行 访问其子目录及cd 到该目录

LInux下,一个用户对某文件或目录有怎样的权限,取决于该用户与文件或目录之间的关系。

  • 文件所有者(u)

默认是创建该文件的人,当然你也可以将文件的所有权交给其他用户。

  • 组用户(g)

与文件所有者在同一个用户组的用户。

  • 其他用户(o)

既不是文件所有者,也不是文件所有者的组用户的用户。

上面三种权限和三种关系组成了九个二进制位的权限标识

权限示例图

从最左边开始 -rw-rw-r-- 这十位中第一位表示该文件为一个文件,剩下九位每三位依次对应 u, g, o 的 r, w, x 权限。


特殊权限

  • SUID(Set User ID,4)

该属性只对有执行权限的文件有效,对目录无效,执行具有SUID权限的程序时,进程的所有者为程序文件的所有者,不是执行程序文件的那个人(除非二者是同一个人),表示为s

  • SGID(Set Group ID,2)

对于可执行文件,执行具有SGID权限的程序时,进程的所有组为程序文件的所有组。对于目录而言,具有SGID权限的目录会使在该目录下新建的文件的所属组与该目录相同,表示为s

示例:

用户test 在一个具有SUID属性的目录test下新建一个文件 file_test,可以看到该文件的所属组与目录所属组相同。

SGID举例

  • Sticky,1

仅对目录有效。在具有Sticky属性的目录下的文件或目录只有其拥有者才可以对其进行删除和重命名操作。表示为t

示例:

用户test 在一个具有Sticky属性的目录test下删除一个属于用户centos的文件 file_centos,可以看到操作并不能成功。

Sticky示例


改变权限

  • 改变文件的权限

    • 通过数字类型改变文件权限

      1
      2
      3
      4
      5
      6
      7
      8
      chmod [-R] abcd file
      abcd : 用数字表示的权限属性
      file 为要改变权限的文件
      可以加上 -R 参数表示递归

      如: 将file 的权限变为 -rw-rwSr-T

      chmod 3664 file
    • 通过符号类型改变文件权限

      1
      2
      3
      4
      5
      6
      7
      chmod {u,g,o,a} {+(增加),-(除去),=(设置)} [r,w,x,s,t] file
      如: 给file设置u: 读写, g:读写, o: 读

      chmod u=rw-,g=rw-,o=r-- file

      给file 增加Sticky
      chmod o+t file

权限示例

  • 改变文件的拥有者

chown 命令是”change owner”的缩写,用来改变文件的所有者。

1
2
3
4
chown user file #将file 的拥有者改为user

如: 将file的拥有者改为用户test
chown test file
  • 改变文件所属组

chgrp 命令是”change group”的缩写,用来改变文件所在的群组。

1
2
3
4
chgrp group file #将file 的所属组改为group

如: 将file的所属组改为test
chgrp test file

默认权限 umask

创建文件或文件夹时的默认权限为:

1
2
3
创建文件:(-rw-rw-rw-) - umask

创建文件夹:(drwxrwxrwx) - umask
  • 查看umask值
1
2
3
umask  #以数字显示

umask -S # 以字母显示

文件隐藏属性

  • 设置文件隐藏属性

这里介绍几个个人觉得厉害的

1
2
3
4
5
6
7
8
chattr [+,-,=] [a,i,s,S] 文件或目录

+: 增加某一个特殊参数,原本的参数不变
-: 移除某一个特殊参数,原本的参数不变
=: 设置为后面接的参数
a: 设置之后,文件只能增加数据,不能删除也不能修改数据。
i: 设置之后,文件将不能被删除,改名,设置链接,也无法写入数据。
S: Linux下文件一般是非同步写入磁盘的,加上该参数,修改文件会同步写入磁盘。

示例

  • 显示文件隐藏属性
1
2
3
4
lsattr [-adR] 文件或目录
-a: 显示隐藏文件的属性
-d: 如果是目录则只显示目录的属性
-R: 递归显示子目录的数据属性
------本文结束感谢阅读------