一、前言¶
本文主要从以下几个方面谈谈Linux权限管理体系:
- 了解Linux权限
- 文件和目录权限
- 文件所有者、用户组和其他用户
- 特殊权限
二、了解Linux权限¶
Linux权限是非常重要的,因为它决定了谁能访问文件或目录,以及能够执行什么操作。
2.1 权限类型¶
在Linux中,权限分为三种主要类型:
- 读权限(Read): 允许用户查看文件的内容。读权限由字母"r"表示。
- 写权限(Write): 允许用户修改文件的内容。写权限由字母"w"表示。
- 执行权限(Execute): 适用于可执行文件,允许用户运行其中包含的程序或脚本。执行权限由字母"x"表示。
2.2 用户类别¶
Linux下面任何一个文件/目录与用户的关系有3种关系:
- 文件所有者(User): 文件的创建者,拥有最高权限。
- 用户组(Group): 可以包含多个用户,共享特定文件的权限。
- 其他用户(Others): 系统中的其他用户,不属于文件所有者或用户组。
2.3 权限表示方式¶
文件权限以一串字符表示,通常是9个字符的组合。这9个字符分为三组,每组包括3个字符,分别表示文件的权限。例如,-rwxr-xr-- 表示文件权限,这个字符串的含义如下:
- 第一个字符表示文件类型,通常是
-表示普通文件,d表示目录。 - 接下来的三个字符表示文件所有者的权限。
- 紧随其后的三个字符表示用户组的权限。
- 最后的三个字符表示其他用户的权限。

2.4 权限计算方式¶
针对每个权限字母设置了一个对应的数字,通过数字表示对应的权限。
| 权限 | 含义 | 权限对应的数字 |
|---|---|---|
| r | read 是否可读 | 4 |
| w | write 是否可写 | 2 |
| x | execute 是否可执行(一般是命令,脚本) | 1 |
| - | 没有权限 | 0 |
2.5 系统默认权限¶
Linux系统通过umask命令控制文件和目录的默认权限,其中默认权限就是总权限(文件总权限为666,目录总权限为777)减去umask的值(默认为022),文件umask如果某一位是奇数,需要减去umask后这一位上+1
| 分类 | 默认权限 |
|---|---|
| 文件 | 644 |
| 目录 | 755 |
查看默认umask
$ umask
0022
设置umask值为012
$ umask 012
三、文件和目录权限¶
3.1 文件权限VS目录权限¶
| 权限 | 文件 | 目录 |
|---|---|---|
| r | 是否可以读取文件内容(r) | 是否可以查看目录内容,需要x权限配合(rx) |
| w | 是否可以修改文件内容,一般还需要r权限配合(rw) | 是否可以在目录中创建,删除,重命名文件权限,需要rx权限配合(rwx) |
| x | 是否可以执行文件(命令,脚本),一般还需要r权限配合(rwx,rx) | 是否可以进入目录,是否可以访问目录下文件属性(rwx,rx) |
3.2 小结¶
| 日常操作 | 需要的权限 |
|---|---|
| 查看文件的内容 | 文件要有r权限. |
| 编辑或修改文件内容 | 文件要有rw权限. |
| 执行脚本/命令 | 文件需要有rx权限. |
| 查看目录内容 | 目录要有rx权限 |
| 创建文件,删除文件 | 文件所在目录要有rwx权限 |
| 重命名 | 文件所在目录要有rwx权限 |
四、权限相关操作¶
## 4.1 更改文件权限
更改文件权限一般使用chmod命令,具体如下:
一、 chmod命令常用用法
| chmod命令选项 | 命令说明 |
|---|---|
| chmod 数字权限 文件 | 使用数字形式修改权限 |
| chmod 字符权限 文件 | 使用字符形式修改权限 |
二、 chmod命令示例
示例: 修改a.txt的权限为755
$ chmod 755 a.txt
示例: 给a.sh添加执行权限
$ chmod +x a.sh
示例: 给/etc/rc.d/rc.local(所有位置)增加执行权限
$ chmod a+x /etc/rc.d/rc.local
示例: 给/etc/rc.d/rc.local文件所有者增加执行权限
$ chmod u+x /etc/rc.d/rc.local
$ chmod u=x /etc/rc.d/rc.loca
4.1 更改文件所有者和用户组¶
更改文件权限一般使用chown命令,具体如下:
一、 chown命令常用用法
| chown命令选项 | 命令说明 |
|---|---|
| chown 文件所有者.用户组 文件(其中前面的.可以替换成:) | 修改文件所有者,用户组 |
| chown 字符权限 文件 | 使用字符形式修改权限 |
二、 chown命令示例
示例: 修改a.txt所有者和用户组为mysql(用户mysql需要存在)
$ chown mysql:mysql a.txt
五、特殊权限¶
特殊权限,包括粘滞位(sticky)、设置用户ID(SUID)和用户组ID(SGID),在Linux文件权限中用于控制文件和程序的特殊行为。
5.1 什么是用户ID¶
设置用户ID(SUID)是一种特殊权限标志,适用于可执行文件。它允许普通用户在运行特定程序时获得程序所有者的权限,而不是自己的权限。
通常,SUID 权限用于允许普通用户执行一些需要特权的操作,例如更改密码或执行网络相关操作。
SUID 权限在可执行文件权限中用字母 "s" 表示。对于用户来说,SUID 用 "s" 表示;对于组来说,SUID 用 "S" 表示。对应的权限数字4
注意:如果文件所有者不包含x则显示大写S;如果文件所有者包含x则显示小写s
5.2 怎么设置用户ID¶
设置用户ID的方式有两种,一种是通过权限数字设置;另一种是通过字符设置。
权限数字设置用户ID
$ chmod u+s file
字符设置用户ID
$ chmod 4755 目录
5.1 用户组ID(SGID)¶
5.1.1 什么是用户组ID¶
设置用户组ID(SGID)是一种特殊权限标志,适用于目录。它确保在该目录中创建的文件都属于该目录的用户组,而不是文件创建者的用户组。
SGID 权限通常用于协作目录,以确保多个用户在同一用户组下协作。
SGID 权限在目录权限中用字母 "s" 表示。对于用户组来说,SGID 用 "s" 表示;对于其他用户来说,SGID 用 "S" 表示。对应的权限数字2
5.1.2 怎么设置用户组ID¶
设置用户ID的方式有两种,一种是通过权限数字设置;另一种是通过字符设置。
权限数字设置用户组ID
$ chmod g+s directory
字符设置用户组ID
$ chmod 2755 目录
5.2 粘滞位(sticky)¶
5.2.1 什么是粘滞位¶
粘滞位通常用于目录,特别是共享目录,以确保只有目录的所有者可以删除其中的文件。
当粘滞位设置在一个目录上时,只有文件的所有者才能删除自己的文件。其他用户无法删除不属于他们的文件。
粘滞位在目录权限中用字母 "t" 表示。例如,如果在 /tmp 目录上设置了粘滞位,权限可能显示为 drwxrwxrwt。对应的权限数字1
5.2.2 怎么设置粘滞位¶
设置粘滞位的方式有两种,一种是通过权限数字设置;另一种是通过字符设置。
权限数字设置粘滞位
$ chmod o+t /tmp/
字符设置粘滞位
$ chmod 1777 /tmp/
5.3 小结¶
| Linux3位特殊权限 | 判断 | 含义 | 例子 |
|---|---|---|---|
| 用户ID(SUID) | 命令的u的位置上有个s或S(如果文件所有者不包含x则显示大写S;如果文件所有者包含x则显示小写s),对应的权限数字4 |
相当于拥有这个命令的所有者的权限 | passwd命令 |
| 用户组ID(SGID) | 命令的g的位置上有个有个s或S(如果文件所有者不包含x则显示大写S;如果文件所有者包含x则显示小写s),对应的权限数字2 |
相当于拥有这个命令的用户组的权限 | 无 |
| 粘滞位(sticky) | 命令的o的位置上有个t,对应的权限数字1 | 对于包含粘滞位权限的目录,每个用户都可以在目录下创建内容,但是每个用户只能管理自己的文件 | /tmp/目录 |
六、Linux特殊属性¶
lsattr 和 chattr 都是用于管理文件和目录特殊属性的Linux命令。它们通常用于提高文件系统的安全性和权限控制。lsattr 用于查看文件和目录的特殊属性,而 chattr 用于设置或清除这些特殊属性。这两个命令通常需要超级用户权限或适当的权限才能操作,因为它们涉及文件系统的权限和安全性。
lsattr 使用如下:
一、 lsattr命令常用用法
| lsattr命令选项 | 命令说明 |
|---|---|
| lsattr 文件/目录 | 用于查看文件和目录的特殊属性 |
二、 lsattr命令示例
示例: 查看a.txt文件的特殊属性
$ lsattr a.txt
chattr 使用如下:
一、 chattr命令常用用法
| chattr命令选项 | 命令说明 |
|---|---|
| chattr +a 文件/目录 | 设置追加位。当追加位设置在文件上时,只有文件的内容可以被追加,但不能被修改或删除。 |
| chattr -a 文件/目录 | 取消设置追加位。 |
| chattr +i 文件/目录 | 设置不可修改位。当不可修改位设置在文件上时,文件的内容不能被修改、删除,甚至超级用户也无法更改它。 |
| chattr -i 文件/目录 | 取消设置不可修改位。 |
二、 lsattr命令示例
示例: 修改a.txt文件的特殊属性为只能追加
$ chattr +a a.txt
示例: 取消a.txt文件的特殊属性为只能追加
$ chattr -a a.txt
示例: 修改a.txt文件的特殊属性为不可修改位
$ chattr +i a.txt
示例: 修改a.txt文件的特殊属性为不可修改位
$ chattr -i a.txt