Linux系列之文件和目录权限

前言 我们知道,root用户基本上可以在系统中做任何事。其他用户有更多的限制,并且通常被收集到组中。你把有类似需求的用户放入一个被授予相关权限的组,每个成员都继承组的权限。
让我们看一下:

  • 查看权限(Checking permissions)
  • 更改权限(Changing permissions)
  • 默认权限(Default permissions)
  • 特殊权限(Special permissions)
授予权限 权限有三个级别,分别是:
  • r:读取权限。
  • w:写入权限。
  • x:执行权限。
当一个文件被创建时,通常创建它的用户是它的所有者,而拥有组是用户当前的组。我们可以通过使用chown命令,来将文件的所有权转移到不同的用户。
chown gps /tmp/file.txt

这里,我们把/tmp 目录下的file.txt的所有权授予用户gps
我们也可以转移文件的所有权从一个组到另一个组,使用chgrp命令来达到目的。
chgrp cloudadmins newIDS

假设我们有一个名为newIDS的应用程序,这里我们把组的所有权交给newIDScloudadmins组。
查看权限
ls -l

Linux系列之文件和目录权限
文章图片

带有-l (long)开关的ls命令将显示目录的内容,包括权限在内。让我们把这个问题再细分一下。
drwxr-xr-x 2 azureuser azureuser 4096 Feb 14 22:31 Videos

第一个字符表示文件类型,例子当中是d,意味着它是一个目录。这个字符可以是:
  • (-) 常规文件。
  • (d) 目录。
  • (c) 特殊字符。
  • (b) 特殊块。
  • (p) fifo(命令管道)。
  • (l) 符号链接。
  • (s) 套接字。
通常情况下,你会看到d-l 。在本文中我们将重点关注-d 。符号链接有点类似于文件链接。
然后我们可以看到:
rwxr-xr-x

共有9个字符,头三个表示用户的权限;中间三个表示组的权限;后面三个表示其他用户的权限。
  • 在该示例中,组用户拥有rwx(读、写、执行)权限。
  • 组拥有r-x(读、不可写、执行)权限,-表示没有授予相应的权限。
  • 其他用户拥有r-x(读、不可写、执行)权限。
2 azureuser azureuser 4096 Feb 14 22:31 Videos

剩余的列包括:链接的数量、用户、大小、创建日期以及名称。
如有需要,可以更改权限。
更改权限 只有root用户或者文件的所有者才可以更改权限,我们使用chmod命令来处理,并且我们可以使用十进制符号或者UGO(User, Group, Other),让我们先看看十进制符号。
使用十进制符号更改权限
该表包含所有可能的权限组合及其八进制和二进制表示。
二进制 八进制 rwx
000 0 ---
001 1 --x
010 2 -w-
011 3 -wx
100 4 r--
101 5 r-x
110 6 rw-
111 7 rwx
如果我们想表示所有者、组、其他用户的所有权限,我们可以使用
777

该示例中,每个数字都是7,表示所有者、组、其他用户的权限。在表格中,我们发现八进制中的7对应rwx ,也就是所有的(读、写、执行)权限。那么应该如何使用chmod呢?
chmod 777 sample.txt

这会给予所有者所有权限、组所有权限、所有其他用户所有权限。
chmod 700 sample.txt chmod 774 sample.txt chmod 755 sample.txt

  • 第一行将会给予所有者所有权限、组没有权限、其他用户没有权限。
  • 第二行将会给予所有者所有权限、组所有权限、其他用户只读权限。
  • 第三行将会给予所有者所有权限、组读和执行的权限、其他用户读和执行的权限。
Linux系列之文件和目录权限
文章图片

使用UGO更改权限
用来更改权限的数字方法是最常用的,但我们仍可以使用符号方法:UGO(User, Group, Other)。
  • - 移除权限。
  • + 添加权限。
  • = 设置权限。
让我们移除拥有sample.txt的用户的写权限。
chmod u-w sample.txt

Linux系列之文件和目录权限
文章图片

我们可以一次更改多个权限。
chmod u-rw sample.txt

Linux系列之文件和目录权限
文章图片

chmod u+rwx,o+rwx sample.txt

Linux系列之文件和目录权限
文章图片

默认权限 Linux自动赋予了所有文件和目录默认权限。文件的默认权限为666,目录的默认权限是777。默认情况下,下载文件后不能立即执行它。
可以使用umask(user file-creation mask)方法更改默认权限。这个方法表示你想从一个文件或目录的基本权限中删除的权限。
umask是一个三位数的八进制数字,对应三个权限数字。在大多数 Debian 系统中,umask 被设置为 022。它被减去权限数后,就会得到新的权限状态。
新文件 新目录 权限
666 777 Linux基本权限
-022 -022 umask
644 755 结果权限
每位用户可以在个人的.profile 文件中,为文件和目录设置个人的默认umask值。
查看umask的当前值:
umask

Linux系列之文件和目录权限
文章图片

特殊权限
set user ID (SUID) set group ID (SGUID) sticky bit

SUID
SUID位表示任何用户都可以用所有者的权限来执行文件,但这些权限并不超出使用该文件的范围。要改变这个位,你要把chmod后的第一个值改为4,通常你只用3个数字,因为第一个数字被默认为0。 如果你在一个文件的所有者权限中看到一个s代替x,这意味着SUID位被设置。
chmod 4644 sample.txt

Linux系列之文件和目录权限
文章图片

SGID
SGID将组的所有权分配给文件。对共享组目录很有用。你可以将SGID应用于目录和文件。
在一个文件上设置了SGID位,如果所有者属于具有执行该文件权限的组,那么没有执行权限的人也可以执行该文件。
在一个目录上设置了SGID位,在该目录中创建的新文件的所有权就归属该目录创建者的组,而不是文件创建者的组。
SGID位在常规权限前表示为2。如果你在一个文件或目录的组权限中看到一个s代替x,这意味着SGID位被设置。
chmod 2644 sample.txt

Linux系列之文件和目录权限
文章图片

Sticky Bit(粘滞位)
这种权限在其他用户中由t代替x。当你在一个目录上设置粘滞位时,人们只能删除该目录中属于他们的文件。他们不能删除属于其他人的文件,无论文件权限的组合是什么。你只能对目录应用粘滞位。如果你在一个目录的其他用户的权限中看到一个t代替x,这意味着粘滞位被设置。
chmod 1777 sample.txt

【Linux系列之文件和目录权限】粘滞位被现代Linux系统所忽略,但你至少应该熟悉这个术语。

    推荐阅读