Alex_McAvoy

想要成为渔夫的猎手

Linux 文件与目录的权限

【概述】

Linux 文件属性 中,介绍了使用 ls 命令查看文件的属主、属组、其他权限,以及使用 chmod 命令修改文件权限,下面,详细的介绍文件权限的相关内容

【默认权限】

文件默认权限是指,当用户新建一个文件或目录时权限的默认值,umask 命令用于指定默认权限

查看默认权限

在查看系统的默认权限时,有两种方法 umaskumask -S

直接使用 umask 命令,会给出 4 位数字,第一位是特殊权限用的,后面会进行详细介绍,后三位分别对应 user、group、other 的权限,其含义是该默认值需要减掉的权限(被拿掉的权限),r、w、x 分别对应了 4、2、1

在默认情况下,root 的默认权限会拿掉比较多的属性,其 umask 默认为 022,而对于一般用户,其 umask 默认为 002

如下图,输入 umask 后给出 0002,这代表了用户、组未被拿掉任何权限,其他用户被拿掉写权限

而使用 umask -S 命令,会给出系统默认权限的字符形式。

修改默认权限

umask 也可用于修改默认权限,在其后跟 3 位分别对应 user、group、other 权限的数字,该数字是被拿掉的权限

如下图,将默认权限设为 222,代表 user、group、other 分别被拿掉了写权限

目录与文件的默认权限

一般创建的文件,其目的是用于数据记录,不应该有执行权限,只有 r、w 两个选项,即其权限最大是 666,默认权限为:-rw-rw-rw

而目录需要进入,这就与执行权限有关,因此其所有权限均为开放,即其最大权限是 777,默认权限为:drwxrwxrwx

umask 为 002 时,user 和 group 未被拿走任何权限,但 other 被拿走了 w 权限,那么当用户新建文件或目录时,有不同的权限:

  • 新建文件:(-rw-rw-rw-)-(————w-)=>-rw-rw-r—
  • 新建目录:(drwxrwxrwx)-(————w-)=>drwxrwxr-x

【特殊权限】

概述

文件的特殊权限有三个,分别是 SUIDSGIDSBIT,这三个权限与系统账号和系统进程有关

之前介绍的权限,均为 r、w、x,而在特殊权限中,引入了另外两个标志,分别是 st

SUID 与 SGID

SUID 是 Set User ID,SGID 是 Set Group ID

我们知道,在 Linux 中,系统内核是根据进程的运行用户的 ID 来确定一个进程对资源的访问权限,而这个运行用户的 ID 就包括 UID 和 GID

在 Linux 系统中,当一个文件的 user 的可执行位被设为 s,那么说明该文件被设置了 UID,即 Set UID(SUID);如果一个文件的 group 的可执行位被设为 S,那么说明该文件被设置了 GID,即 Set GID(SGID)

SUID 权限仅可作用于文件,且对二进制程序有效,当一个文件被被设置 SUID 后,其有以下特点:

  • 一个执行者若想执行该程序,需要拥有该程序的可执行权限(x)
  • 可执行权限(x)仅在执行该程序的过程中有效
  • 执行者将具有程序所有者的权限。

SGID 权限除了作用于文件(二进制程序)外,还可作用于目录

当一个文件被设置 SGID 后,其有以下特点:

  • 一个执行者若想执行该程序,需要拥有该程序的可执行权限(x)
  • 在执行过程中,将会获得该程序用户组的支持

而当一个目录被设置 SGID 后,其有以下特点:

  • 只有当某用户拥有该目录的 r 和 x 权限时,才能进入目录
  • 若用户具有该目录的 w 权限(可新建文件),则用户所创建的新文件的用户组与此目录组相同
  • 用户在此目录下的有效用户组将会变成该目录的用户组

SBIT

SBIT 是 Sticky Bit,其标志位为 s,目前只针对目录有效,其作用是:

  • 当用户具有该目录的 w、x 权限时,将拥有写入权限
  • 当用户在该目录下创建文件和目录时,仅有自己和 root 用户才有权利删除该文件

特殊权限的设置

对于基础三位 r、w、x 权限,在其前再加一位数字,并进行如下规定:

  • 4 代表 SUID
  • 2 代表 SGID
  • 1 代表 SBIT

这样一来,使用 chmod 命令即可进行设置特殊权限

如下图,为 test.txt 文件加入 SUID 和 SGID 权限

感谢您对我的支持,让我继续努力分享有用的技术与知识点!