Linux文件系统权限管理

目录

    • 一、权限对象
      •   1、owner身份(文件所有者)
      •   2、group身份(与文件所有者同组的用户)
      •   3、others身份(其他人)
    • 二、权限类型
      •   ①对于文件而言
      •   ②对于文件而言
    • 三、文件属性介绍
    • 四、权限管理命令
      • 1、chmod命令
      • 2、chown命令
      • 3、chgrp命令(了解)
    • 五、进程安全上下文
    • 六、基本权限ACL
      • 1、查看ACL
      • 2、配置ACL
      • 3、实例
    • 七、权限掩码umask
      • 1、查看umask
      • 2、设置umask
    • 八、文件特殊权限SUID、SGID、SBIT
      • 1、Set UID
      • 2、Set GID
      • 3、Sticky Bit
    • 八、隐藏属性
      • 1、lsattr命令
      • 2、chattr命令

  Linux最优秀的地方之一就是多任务环境,为了让各个使用者具有较为安全的文件数据,因此文件的权限管理变得尤为重要,在Linux系统中一般将文件可存取访问的身份分为3个类别: owner、group、others,我们称为 权限对象,且这三类身份都具有: read、write、execute等权限,我们称为 权限类型

一、权限对象

  1、owner身份(文件所有者)

  由于Linux是多用户、多任务的操作系统,因此可能常常有多人同时在某台主机上工作,为了考虑每个人的隐私,文件所有者这个权限就尤为重要。每个人均可在主机上设置文件的权限,让其成为个人的“私密文件”,即个人所有者。因为设置了适当的文件权限,除本人(文件所有者)之外的用户无法查看文件内容。

  2、group身份(与文件所有者同组的用户)

  群组是权限中最有用的功能之一,群组简单理解就是用户组,类似于我们公司的各个部门之间,或者学校班级之间的划分,每个班级就是一个群组,群组内的资源是共享的,群组间是相互隔离的。

  3、others身份(其他人)

  不属于文件所有者或文件所属群组成员的用户。


tips:这么说大家可能还不是很了解,这里举个栗子:

Linux文件系统权限管理_第1张图片

  张三、李四、王五是舍友住在三室一厅的房子里,他们分别是自己房间的所有者(owner);这里有一个用户组(group),这个组有张三、李四、王五三个成员,这个组里的成员都可以进入客厅;隔壁赵六,既不能进入他们的个人房间,也不能去他们三个共用的客厅,显而易见就是其他人(others)

二、权限类型

  ①对于文件而言

权 限 说 明
读权限(r) 可获取文件的数据
写权限(w) 可修改文件的数据
执行权限(x) 可以将此文件运行为进程

  ②对于文件而言

权 限 说 明
读权限(r) 可使用ls命令获取其下的所有文件列表
写权限(w) 可在此目录下“创建/删除//复制/移动”文件
执行权限(x) 可以cd至此目录中,并且可以使用ls -l命令来获取所有文件的详细属性信息

三、文件属性介绍

  在Linux中,是如何查看文件的权限信息呢?ls命令就可以查看文件的相关属性(也可以使用 " ll " 命令,等价于 " ls -l " )。其中,标红的部分就是Linux的文档权限属性信息。
Linux文件系统权限管理_第2张图片
  对于这十个字段,所表达的含义可以结合这张图来理解:
Linux文件系统权限管理_第3张图片

十位字符表示含义:
第1位:表示文档类型,取值常见的有"d"表示文件夹、"-"表示文件、"l"表示软链接、"s"表示套接字等等;
第2-4位:表示文档所有者的权限情况,第2位表示读权限的情况,取值有r、-;第3位表示写权限的情况,取值有w、-;第4位表示执行权限的情况,取值有x、-。
第5-7位:表示与所有者同在一个的用户的权限情况,第5位表示读权限的情况,取值有r、-;第6位表示写权限的情况,取值有w、-;第7位表示执行权限的情况,取值有x、-。
第8-10位:表示其他用户的权限情况,第8位表示读权限的情况,取值有r、-;第9位表示写权限的情况,取值有w、-;第10位表示执行权限的情况,取值有x、-。

四、权限管理命令

1、chmod命令

  • 命令解释
      chmod - change file mode bits(修改文件或目录的权限)
      只有root用户和文档的所有者,才可以给文档设置权限。
  • 命令语法
      chmod [选项] 权限模式 文件
  • 命令常用选项
选 项 解 释
-R 递归设置权限(当文件类型为目录时使用)
  • 权限模式是什么呢?

  权限模式就是该文件需要设置的权限信息,分为字母形式数字形式

  ① 字母形式

给谁设置 含 义 分配方式 含 义 权限字符 含 义
u 所有者(owner) + 新增权限(相对当前) r 读权限
g 用户组(group) - 删除权限(相对当前) w 写权限
o 其他人(others) = 将权限设置成具体的值(注重结果) x 执行权限
a 所有人(all) - 没有权限

  实例:创建/tmp/test(-rw-rwx—)文件并给其设置权限,要求所有者拥有全部的权限,同组用户拥有读和执行权限,其他用户拥有读权限和写权限。

[root@localhost tmp]# chmod u=rwx,g=rx,o=rw test    //第一种方法
[root@localhost tmp]# ll
总用量 0
-rwxr-xrw-. 1 root root 0 3月  12 20:14 test

[root@localhost tmp]# chmod u+x,g-w,o+rw test    //第二种方法
[root@localhost tmp]# ll
总用量 0
-rwxr-xrw-. 1 root root 0 3月  12 20:14 test


  ② 数字形式

权 限 数 值
读权限(r) 4
写权限(w) 2
执行权限(x) 1

  实例:为/tmp/test文件设置权限,要求所有者拥有全部的权限,同组用户拥有读和执行权限,其他用户只读权限。

  全部权限(u):读+写+执行=4+2+1=7
  读和执行(g):读+执行=4+1=5
  读权限(o):读=4

[root@localhost tmp]# chmod 754 test
[root@localhost tmp]# ll
总用量 0
-rwxr-xr--. 1 root root 0 3月  12 20:14 test

tips:如果权限数字中但凡出现23的数字,则该权限有不合理的情况。为什么呢?
   那是因为2表示只有写权限,3表示拥有写和执行权限。那么大家想一想,用户没有读权限,如何打开文件去写呢?

2、chown命令

  • 命令解释
      chown - change file owner and group(更改文件所有者和所属组,仅管理员可用)
  • 命令语法
      chown [选项]… [所有者][:[所属组]] 文件…
  • 命令常用选项
选 项 解 释
-R 递归修改(将目录内的目录或文件一并修改)
  • 实例

  创建/tmp/test文件,修改所有者为tom,所属组为jerry。

[root@localhost tmp]# ll    //初始信息
总用量 0
drwxr-xr-x. 2 root root 18 3月  12 21:09 test
[root@localhost tmp]# chown tom:jerry test    //修改所属者和所属组
[root@localhost tmp]# ll    //修改成功
总用量 0
drwxr-xr-x. 2 tom jerry 18 3月  12 21:09 test

3、chgrp命令(了解)

  • 命令解释
      chgrp - change group ownership(更改文件所属组,仅管理员可用)
  • 命令语法
      chgrp [选项]… 所属组 文件…
  • 命令常用选项
选 项 解 释
-R 递归修改(将目录内的目录或文件一并修改)
  • 实例:修改/tmp/test文件的所属组为root。
[root@localhost tmp]# ll    //初始信息
总用量 0
drwxr-xr-x. 2 tom jerry 18 3月  12 21:09 test
[root@localhost tmp]# chgrp root test/    //修改所属组
[root@localhost tmp]# ll    //修改成功
总用量 0
drwxr-xr-x. 2 tom root 18 3月  12 21:09 test

五、进程安全上下文

  1、任何一个可执行程序文件是否可以执行,取决于发起者对文件是否有x权限;
  2、若进程启动成功,进程的属主为发起者,属组为进程发起者的所属组;
  3、进程所能够访问文件的权限,取决于进程的发起者:
    ① 进程的属主与文件的属主是否相同;如果相同,则应用属主的权限;
    ② 否则,则检查进程的属主是否属于文件的属组;如果是,则应用属组的权限;
    ③ 否则,就只能应用others的权限。

六、基本权限ACL

  ACL的全称是Access Control List(访问控制列表),一个针对文件/目录的访问控制列表。它在UGO权限管理的基础上为文件系统提供了一个额外的更灵活的权限管理机制。ACL允许你给任何的用户或用户组设置任何文件/目录的访问权限。
  作为UGO权限管理的补充,ACL自然有UGO办不到的事情,例如:
    ① 可以针对用户来设置权限
    ② 可以针对用户组来设置权限
    ③ 子文件/目录继承父母录的权限

1、查看ACL

  • 命令解释
      getfacl - get file access control lists(获取文件访问控制列表)
  • 命令语法
      getfacl [-aceEsRLPtpndvh] 文件 …
  • 命令常用选项
选 项 解 释
-R 递归列出所有文件和目录的acl

2、配置ACL

  • 命令解释
      setfacl - set file access control lists(设置文件访问控制列表)
  • 命令语法
      setfacl [-bkndRLPvh] [{-m|-x} acl_参数] 文件 …
  • 命令常用选项
选 项 解 释
-m 配置文件的acl,不可与-x合用
-x 删除acl,不可与-m合用
-b 删除所有acl
-k 删除默认acl
-R 递归地对所有文件和目录应用操作
-d 配置"默认acl参数",只对目录有效,该目录新建的数据会继承此默认值

3、实例

  ① 创建/tmp/testdir目录,并为tom(others)用户赋予x权限使其可以进入testdir目录。

[root@localhost tmp]# mkdir testdir    //创建/tmp/testdir(drw-r--r--)目录
[root@localhost tmp]# chmod 644 testdir/    //修改testdir目录权限
[root@localhost tmp]# ll
总用量 0
drw-r--r--. 2 root root 6 3月  13 10:33 testdir

root@localhost testdir]# su - tom    //切换至tom用户(tom用户属于其他人)
[tom@localhost tmp]$ cd testdir/    //尝试进入testdir目录(因为没有x权限,所以拒绝访问)
bash: cd: testdir/: 权限不够

[tom@localhost tmp]$ su - root    //切换至root用户
密码:
上一次登录:五 3月 13 10:21:37 CST 2020从 192.168.140.1pts/0 上
[root@localhost ~]# setfacl -m u:tom:x /tmp/testdir/    //为tom用户对testdir目录添加x权限
[root@localhost tmp]# ll    //查看文件信息也发生了变化
总用量 0
drw-r-xr--+ 2 root root 22 3月  13 10:33 testdir
[root@localhost tmp]# getfacl testdir/    //查看testdir目录的acl
# file: testdir/
# owner: root
# group: root
user::rw-
user:tom:--x    //tom用户拥有x权限
group::r--
mask::r-x
other::r--

[root@localhost tmp]# su - tom    //切换至tom用户测试是否可以进入testdir目录
上一次登录:五 3月 13 10:47:38 CST 2020pts/0 上  
[tom@localhost ~]$ cd /tmp/testdir/
[tom@localhost testdir]$    //进入成功

  ② 删除tom用户对/tmp/testdir目录的所有acl权限。

[root@localhost ~]# setfacl -x u:tom /tmp/testdir/    //删除tom用户对testdir目录的权限acl权限
[root@localhost ~]# getfacl /tmp/testdir/    //查看testdir目录的acl
getfacl: Removing leading '/' from absolute path names
# file: tmp/testdir/
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--    //user:tom:--x 这条记录以及被删除

  ③ 使/tmp/testdir目录下"文件/目录"继承/tmp/testdir目录的acl权限。

[root@localhost ~]# chmod 745 /tmp/testdir/    修改testdir目录的权限为(-rw-rw-r-x)
[root@localhost ~]# setfacl -m d:u:tom:rw /tmp/testdir/    //为tom用户对testdir添加子目录/文件会继承的rw权限
[root@localhost ~]# touch /tmp/testdir/testfile    //创建testfile文件
[root@localhost ~]# getfacl -R /tmp/testdir/    //递归查看testdir目录下全部文件的acl
getfacl: Removing leading '/' from absolute path names
# file: tmp/testdir/
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
default:user::rw-
default:user:tom:rwx    //其子目录/文件默认tom用户拥有rw权限
default:group::r--
default:mask::rwx
default:other::r--


# file: tmp/testdir//testfile
# owner: root
# group: root
user::rw-
user:tom:rw-    //tom用户拥有rw权限
group::r--
mask::rw-
other::r--

[root@localhost ~]# su - tom    //切换至tom用户测试是否可以进入向testfile文件中写入内容
上一次登录:五 3月 13 13:35:50 CST 2020pts/0 上
[tom@localhost ~]$ echo "Hello World" > /tmp/testdir/testfile
[tom@localhost ~]$ cat /tmp/testdir/testfile
Hello World

  ④ 删除/tmp/testdir目录的全部acl权限。

[root@localhost tmp]# setfacl -b /tmp/testdir/    移除所有acl权限

七、权限掩码umask

  在我们创建新的目录和文件时本身也是有它默认的权限,这个默认权限是什么呢?就是由权限掩码umask所确定的。它的功能可以说与chmod刚好相反,代表默认拿走的,也就是说不要的权限。
  所以说umask就是用来指定"目前用户在新建文件或者目录时的权限默认值"。那么如何得知或设置这个umask呢?

1、查看umask

[root@localhost ~]# umask    //以数字类型的方式显示出权限设置
0022
//其中第一个0与特殊权限有关,可以暂时不用理会
//后三位022则与普通权限(rwx)有关
[root@localhost ~]# umask -S    //以符号类型的方式显示出权限设置
u=rwx,g=rx,o=rx

  那么这个数字具体是怎么表示权限的呢?
  文件:666-umask  目录:777-umask
  那又为什么文件是666去减呢?那是因为文件默认不能拥有执行权限,如果普通文件都有执行权限,那么势必安全性就会很低(一些木马程序就有权限直接被执行)!所以,如果减得的结果中有执行权限,则会加1进行修改。
例如:
  umask:023
  文件:666-023=643 需要加"1",所以为644
  目录:777-023=745

2、设置umask

  设置umask很简单,这里不做过多讲述。

[root@localhost ~]# umask 023    //设置umask为023
[root@localhost ~]# umask
0023

八、文件特殊权限SUID、SGID、SBIT

1、Set UID

  当s这个标志出现在文件所有者的x权限上时,就被称为Set UID,简称为SUID。那么这个特殊权限的特殊性的作用是什么呢?
  ① SUID权限仅对二进制程序(binary program)有效;
  ② 执行者对于该程序需要具有x的可执行权限;
  ③ 本权限仅在执行该程序的过程中(run-time)有效;
  ④ 执行者将具有该程序所有者(owner)的权限。

  这么说大家可能不太理解,SUID这个权限的目的到底是什么呢?

例如:当用户修改自己密码的时候需要使用passwd这个命令,这个二进制文件的权限为:"-rwsr-xr-x",所以系统中每一个用户都可以执行,但是在修改密码的过程中需要将密码写入/etc/shadow文件中,但是这个文件的权限为:"----------"。从进程安全上下文中,大家可以知道一个命令对文件的调用权限取决于发起者对文件的权限,所以根本是拒绝写入的!这时就用到了这个s权限,执行passwd命令的过程中发起者就拥有了root的权限,所以用户就可以借助root的权力,修改/etc/passwd文件了。

  tips:属主的执行权限为如果原本有执行权限,显示为小写s;否则为大写S。

2、Set GID

  如果这个s放在文件的所属用户组的x权限上时,就被称为Set GID,简称为SGID。和SUID一样,只是SGID是获得该程序所属用户组的权限。
  ① SGID对二进制程序有用;
  ② 程序执行者对该程序需要具有x的可执行权限;
  ③ 执行者将具有该程序所属组(group)的权限。
  ④ SGID主要用在目录上:在此目录下创建新的文件时,新的文件的属组和目录的属组相同。

  如果大家已经理解SUID,那么相信前三点不是难点,第四点为大家举个栗子:

[root@localhost tmp]# mkdir testdir    //创建testdir目录
[root@localhost tmp]# chmod g+s o+w testdir/    //为testdir目录添加SGID权限以及其他人给予w权限
[root@localhost tmp]# ll    //权限给予成功
总用量 4
drwxr-srwx. 2 root root 4096 3月  17 00:17 testdir
[root@localhost tmp]# su - tom    //切换至tom用户
[tom@localhost ~]$ touch /tmp/testdir/testfile    //在testdir目录下创建testfile文件
[tom@localhost ~]$ cd /tmp/testdir/    //转到/tmp/testdir目录下
[tom@localhost testdir]$ ll    //查看testfile有何特殊
总用量 0
-rw-rw-r--. 1 tom root 0 3月  17 00:35 testfile    //`可以看出用户组还是root`

  tips:属组的执行权限为如果原本有执行权限,显示为小写s;否则为大写S。

3、Sticky Bit

  这个就是针对others来设置的了,目前只针对目录有效,作用是:当用户在该目录下建立文件或目录时,仅有自己和root才有权力删除。
  最有代表的就是/tmp目录(drwxrwxrwt),任何人都可以在里面增加、修改文件,但仅有root与该目录/文件的创建者能够删除自己的目录或文件。
  tips:其他人的执行权限为如果原本有执行权限,显示为小写t;否则为大写T。

八、隐藏属性

  Linux系统中的文件和目录,除了可以设定普通权限和特殊权限外,还有一些隐藏属性

属 性 含 义
A 文件的atime不可被修改,可以减少磁盘I/O数量,有利于提高性能和续航能力
S 磁盘I/O同步选项,功能类似sync
a 即append,只能向文件中添加数据,而不能删除
i 文件不能被删除、改名、设置链接关系、写入或追加数据,只有root可以设置这个属性
c 即compresse,文件会自动地经压缩后在存储,读取时会自动地解压
d 即no dump,设定文件不能成为dump程序的备份目标
s 删除文件或目录时,会被完全从硬盘空间中删除,不可恢复
u 与s相反,删除文件或目录时,其内容会被保存,用于后期恢复数据,常用来防止意外删除文件或目录

1、lsattr命令

  • 命令解释
      lsattr - list file attributes on a Linux second extended file system(查看文件或目录的隐藏属性)
  • 命令语法
      lsattr [选项] 文件或目录名
  • 命令常用选项
选 项 解 释
-a 显示所有文件和目录的隐藏属性
-d 只列出目录本身的隐藏属性,不会对目录下的文件或子目录进行操作
-R 递归操作,列出当前目录及其子目录下的文件和目录的隐藏属性
  • 实例

  查看文件的隐藏属性;

[root@localhost ~]# lsattr anaconda-ks.cfg
-------------e- anaconda-ks.cfg

2、chattr命令

  • 命令解释
      chattr - change file attributes on a Linux file system(修改文件或目录的隐藏属性,仅root可以使用)
  • 命令语法
    chattr [模式] 文件或目录名
  • 模式

  模式格式+/-/= 属性

参 数 含 义
+ 增加某些特殊属性,其他属性保持不变
- 删除某些特殊属性,其他属性保持不变
= 重置为仅后面接的特殊属性
  • 实例

  给文件赋予 i 属性;

[root@localhost ~]# chattr +i anaconda-ks.cfg    //赋予i属性
[root@localhost ~]# lsattr anaconda-ks.cfg    //查看
----i--------e- anaconda-ks.cfg
[root@localhost ~]# rm -f anaconda-ks.cfg    //即使是root用户也不能删除
rm: cannot remove `anaconda-ks.cfg': Operation not permitted

你可能感兴趣的:(Linux用户组和权限管理)