一、前言

本文主要从以下几个方面谈谈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 表示目录。
  • 接下来的三个字符表示文件所有者的权限。
  • 紧随其后的三个字符表示用户组的权限。
  • 最后的三个字符表示其他用户的权限。

Linux九位权限体系

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特殊属性

lsattrchattr 都是用于管理文件和目录特殊属性的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