Linux 文件与目录权限

基本权限

基本权限有三种,分别是:读(r,Read)、写(w,Write)、执行(x,eXecute)。

同样的权限标记对于文件和目录代表不同的意义。

文件权限

文件包括一般文本文件、数据库和二进制可执行文件。文件权限只针对文件内容而言,和改名、删除等操作无关。

数字 字符 权限
4 r 读取文件内容。例如使用 cat 命令查看,使用 vim 以只读方式打开。
2 w 编辑修改文件内容,但不包括删除文件。例如使用 vimsed 等对文件内容进行修改并保存。
1 x 文件具有可以被系统执行的权限。例如命令和脚本必须拥有此权限才能直接执行。

目录权限

目录主要的内容是记录文件名清单,所以目录权限实际关联的是目录下文件属性查看与更改。

数字 字符 权限
4 r 仅查询目录下的文件或目录名称,无法看到属性,相当于执行不加参数的 ls 命令。
2 w 改变目录结构清单权限,也就是在目录下新建、删除、重命名文件或目录。
1 x 进入目录的权限,查询目录下的文件属性。

权限参考

根据使用场景来配置权限。

用户进入目录所需权限

  • 目录需要 x 权限,来运行 cd 切换目录。
  • 目录需要 r 权限,来使用 ls 命令查看目录中文件列表。

用户读取目录内文件所需权限

  • 目录需要 x 权限来进入目录。
  • 文件需要 r 权限来运行 catmore 等读取文件命令。

用户修改目录内文件所需权限

  • 目录需要 x 权限来进入目录。
  • 文件需要 r 和 w 权限来使用 vi 等工具进行文件读写。

用户创建一个文件所需权限

  • 目录需要 w 和 x 权限来创建文件。

用户执行目录下的命令所需权限

  • 目录需要 x 权限来进入目录。
  • 文件需要 x 权限来运行命令。

特殊权限

在 Linux 系统中,还有一些特殊权限。

SUID

当 s 标志出现在文件所有者的 x 权限上时,被称为 Set UID,其含义为:

  • SUID 权限仅对二进制程序有效,不能用在脚本上;
  • 执行者对该程序需要具有 x 的可执行权限;
  • 本权限仅在执行该程序的过程中(run-time)有效;
  • 执行者将具有该程序所有者的权限。

例如一般用户运行 passwd 命令修改密码,需要修改 /etc/shadow 文件。但是该文件的权限只有 root 可读写,而用户运行 passwd 程序时,会暂时获得 passwd 程序的 root 权限,从而可以通过 passwd 命令修改 /etc/shadow 文件。

这是因为运行 passwd 后会启动一个新的进程,该进程会产生一个新的 PID。在该 PID 产生时,SUID 会给予该 PID 特殊的权限设置,使得执行者在该进程中具有该程序所有者的权限。

SGID

当 s 标志出现在文件所属组的 x 权限上时,被称为 Set GID。SGID 可以针对文件或目录来设置。

针对文件,SGID 有以下功能:

  • SGID 对二进制程序有效;
  • 程序执行者对该程序来说,需要具备 x 的权限;
  • 执行者在执行的过程中将会获得该程序所属组的权限。

例如,一般用户使用 locate 这个程序可以查询 /var/lib/mlocate/mlocate.db 文件的内容,会暂时获得 slocate 用户组的权限。

针对目录,SGID 有以下功能:

  • 用户若对此目录具有 r 和 x 的权限时,该用户能够进入此目录;
  • 用户在此目录下的有效用户组将会变成该目录的用户组;
  • 若用户在此目录下具有 w 的权限,则用户所创建的新文件的所属组与此目录的所属组相同。

SBIT

当 t 出现在文件所有者的其他用户 x 权限上时,被称为 Sticky Bit。其含义为:

  • SBIT 权限仅对目录有效;
  • 当用户对该目录具有 w 和 x 权限时,即具有写入权限时;
  • 当用户在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件。

例如,用户 1 对目录 A 具有 w 的权限,里面还有其他用户的文件。此时,目录 A 加上了 SBIT 权限时,用户 1 只能修改自己创建的文件,无法删除他人文件。