跳转到内容

linux文件、目录权限

属主、属组其他用户

在Linux系统中,每个文件和目录都有明确的属主(Owner)和属组(Group),这是权限管理的基础机制,用于控制资源访问权限。

  • 属主:文件的创建者默认成为属主,拥有文件的最高控制权
  • 属组:文件可归属于一个用户组(如开发组、运维组),组内成员共享文件的组权限

Linux通过属主、属组、其他用户三个角色分配权限。

  • 属主权限:文件所有者独立控制的权限(如读写执行rwx)。
  • 属组权限:组成员共享的权限。
  • 其他用户权限:非属主、非属组成员的权限。

可以通过id命令查看用户身份信息。

Terminal window
id
# uid=0(root) gid=0(root) groups=0(root)

uid-> 用户名

gid-> 属组id

不同linux发行版本针对uid、gid编号是不同的。普通用户的编号从500开始,而Ubuntu编号则从1000开始。

属主信息定义在/etc/password

属组信息定义在/etc/group

文件读取、写入和执行

这里将使用命令ls -l,查看某个文件的权限来了解其中的各个含义。

Terminal window
drwxr-xr-x 5 root root 4096 May 2 22:28 docker-compose

文件和目录的访问权限按照读、写、执行的顺序来定义。前10个字符是文件的属性,第1个字符是文件的类型。

上述例子中drwxr-xr-x是文件的属性,其中第1个字符d代表docker-compsoe是一个目录。

关于第1个字符的文件类型表如下:

属性文件类型
-普通文件
d目录
l符号连接
c字符设备文件
b块设备文件

文件属性中剩下的9个字符是文件模式,分别代表文件属主、文件属组、其他用户的读取、写入、执行权限。

r、w、x对文件、目录的效果如下:

对文件的作用(file):

权限属性文件
r允许读取文件内容 (如通过 catless 命令查看)
w允许修改文件内容 (如通过 vim 编辑或 echo追加内容)但删除文件由目录权限控制,与文件本身的 、w、 权限无关
x允许执行文件(如运行脚本或二进制程序)若文件是脚本或程序,必须同时具备 r 和 x 权限才能执行

对目录的作用(Directory):

权限属性文件
r允许列出目录内容(如通过 ls 查看文件名)但无法访问文件元数据或内容,需配合 x 权限
w允许在目录中创建、删除、重命名文件或子目录。 如通过 vim 编辑或 echo追加内容)
x允许进入目录(cd 到目录)无 x 权限时,即使有r 也无法操作目录内文件

常见的文件属性示例:

文件属性含义
-rwx------文件属主,可读、可写、可执行,属组和其他用户没有权限访问
-rw-------文件属主,可读、可写,属组和其他用户没有权限访问
-rw-r--r--文件属主,可读、可写,属组和其他用户有可读权限
-rwxr-xr-x文件属主,可读、可写、可执行,属组和其他用户有可读、可执行权限
-rw-rw----文件属主、属组可读、可写,其它用户没有权限访问
lrwxrwxrwx符号链接,符号链接的权限都是虚设的。真正的权限是由符号链接指向的文件决定的
drwxrwx---目录,属主和属组有进入该目录并有创建、重命名、删除文件的权限
drwxr-x---目录,属主有进入该目录并有创建、重命名、删除文件的权限,属组可进入该文件,但是不能创建、删除、重命名文件,其它用户无权限访问。

chmod修改权限

chmod命令可以修改文件或目录的权。

chmod支持2种不同的模式来表示权限

  • 八进制表示法
  • 符号表示法

八进制表示法

使用八进制数0~7设置需需要的权限,每个八进制数可以描述3个二进制数位,恰巧和文件模式的记录方式对应。

八进制、二进制表示文件模式

八进制二进制文件模式
0000---
1001--x
2010-w-
3011-wx
4100r--
5101r-x
6110rw-
7111rwx
  • x-对应八进制数1
  • w-对应八进制数2
  • r-对应八进制数4

对应的文件模式,只需要把对应的字符转换为八进制数就行,不需把第1个文件类型字符考虑进去,比如-rwxr-x-wx对应的八进制数为753

符号表示法

符号表示法分为3个部分,简单的符号表示法格式:谁受影响-执行操作-设置权限,设置多组权限的时候,需要用,逗号进行分割。

  • 会影响谁(属主、属组、其他用户)
  • 执行什么操作
  • 设置什么权限

通过字符u、g、o、a的组合来指定要修改谁的权限。u、g、o、a表示含义表如下:

符号含义
uuser的缩写,表示文件或目录的属主
ggroup的缩写,表示属组
oohter的缩写,表示其他用户
aall的缩写,等同于u、g、o三者的组合

操作符+表示添加权限

操作符-表示去除权限

操作符=表示赋予指定权限,同时去除其他的权限

权限符号表示法示例:

表示法含义
u+x属主添加执行权限
u-x属主去掉执行权限
+x属主、属组、其他用户添加执行权限
o-rw其他用户去掉可读、可写权限
go=rw属组、其他用户赋值可读、可写权限
u+x,go=rx属主添加可执行权限,属组、其他用户赋值可读、可执行权限

为某个文件添加属主、属组:可读、可写、可执行,其他用户:可读权限对应的权限两种表示法示例如下:

八进制表示:chmod 774 temp.file

符号表示:chmod ug=rwx,o=r temp.file

chown更新文件属主、属组

chown命令用于修改文件或目录的 所有者(Owner) 和 所属组(Group)。它是文件权限管理的重要工具

  • 将文件所有权转移给其他用户
  • 调整文件的所属用户组
  • 修复因权限问题导致的文件访问错误

只有 root 用户或当前文件所有者,有权修改文件所有权,否则就使用sudo命令

chown [选项] 新所有者[:新组] 文件或目录

chown命令参数示例:

参数结果
bob将文件的当前属主修改为用bob
bob:users将文件的当前属主修改为用bob,将文件属组修改为users
:admins文件属主不变,将文件的属组修改为admins
bob:将文件的属主更改为bob,将文件的属组修改为用户bob的登录组

设置默认的权限

在linux使用umask命令设置创建文件和目录时的默认权限掩码。

linux的文件、目录默认创建权限如下:

  • 文件默认权限:普通文件通常以 666(rw-rw-rw-)为初始权限(无执行权限)。
  • 目录默认权限:目录通常以 777(rwxrwxrwx)为初始权限。

最终权限 = 默认权限 - umask

例如:umask=022

文件:666 - 022 = 644 → rw-r—r—

目录:777 - 022 = 755 → rwxr-xr-x

核心作用:定义新建文件/目录的“初始权限规则”。

它通过“屏蔽”特定权限位,确保文件或目录在创建时自动拥有合理的权限,避免手动反复修改。

umask # 数字格式(如 0022)
umask -S # 符号格式(如 u=rwx,g=rx,o=rx)