第7章 拥有者和权限

所属:第二部分 使用文件 来源:Linux命令速查手册

Linux是多用户系统,文件权限是系统安全的基石。每个文件都有所有者、所属组,以及三套独立的权限设置。


7.1 修改文件或目录属于的用户组

chgrp groupname filename

修改文件或目录的所属组。

示例:

chgrp developers project.txt

7.2 递归修改目录属于的用户组

chgrp -R groupname directory

递归修改目录及其所有内容的所属组。


7.3 使用chgrp命令查看文件用户组的变化

chgrp -v groupname filename
chgrp -c groupname filename
  • -v 显示所有修改过程(verbose)
  • -c 只在有变化时显示(changes)

7.4 修改文件和目录的拥有者

chown username filename

修改文件所有者。

⚠️ 通常需要 root 权限才能修改文件所有者。


7.5 同时修改文件和目录的拥有者和用户组

chown username:groupname filename
chown username.groupname filename

同时修改所有者和组。

递归修改目录:

chown -R username:groupname directory/

7.6 理解权限的基础

三组用户

每个文件有三套独立的权限:

类别缩写说明
所有者u (user)文件的拥有者
所属组g (group)文件所属用户组的成员
其他用户o (other)系统中其他所有人
所有人a (all)以上全部(u+g+o)

三种权限

权限字母数字对文件的含义对目录的含义
r4可以查看文件内容可以列出目录内容(ls)
w2可以修改、删除文件可以增删改目录中的文件
执行x1可以运行程序/脚本可以进入/访问目录(cd)

数字权限计算

每组权限用一个数字表示(r=4, w=2, x=1):

权限组合数字说明
rwx7全部权限(4+2+1)
rw-6读写(4+2)
r-x5读和执行(4+1)
r--4只读
---0无权限

完整权限示例:

  • 644 = rw-r--r--(所有者读写,其他人只读)
  • 755 = rwxr-xr-x(所有者全部,其他人读+执行)
  • 600 = rw-------(只有所有者能读写)
  • 700 = rwx------(只有所有者有全部权限)

7.7 用字母表示法修改文件和目录的权限

chmod u+x filename     # 所有者增加执行权限
chmod g-w filename     # 组去掉写权限
chmod o+r filename     # 其他增加读权限
chmod a+r filename     # 所有人增加读权限
chmod ug=rw filename   # 所有者和组设为读写
chmod +x filename      # 所有人加执行权限(a+x的简写)

语法格式

chmod [对象][操作][权限] 文件

对象

  • u = user(所有者)
  • g = group(组)
  • o = other(其他)
  • a = all(所有人,默认)

操作

  • + = 增加权限
  • - = 去掉权限
  • = = 设置为指定权限(其他位清除)

权限

  • r = 读
  • w = 写
  • x = 执行

7.8 用数字权限修改文件和目录的权限

chmod 644 filename     # rw-r--r--
chmod 755 filename     # rwxr-xr-x
chmod 600 filename     # rw-------
chmod 700 directory    # rwx------

直接用三位数字设置完整权限,最常用。

常见权限推荐

权限适用场景
644普通文件(文本、配置、网页等)
755可执行文件、目录、脚本
600私密文件(密钥、密码等)
700私密目录
777所有人可读写执行(⚠️ 尽量避免,不安全)

7.9 递归地修改权限

chmod -R 644 directory/
chmod -R u+w directory/

递归修改目录下所有文件和子目录的权限。

⚠️ 注意:目录需要执行权限才能访问,递归时文件和目录权限最好分开设置。


7.10 设置和清除suid

什么是SUID

SUID (Set User ID):程序执行时,以文件所有者的身份运行,而不是执行者的身份。

只对可执行文件有效,对目录无效。

chmod u+s filename     # 设置suid
chmod u-s filename     # 清除suid
chmod 4755 filename    # 数字方式设置suid(前面加4)

典型例子/usr/bin/passwd 有suid位,普通用户执行时临时获得root权限,才能修改密码文件。

⚠️ SUID程序有安全风险,不要随意给程序加suid。

权限显示上,suid会占用所有者的x位:

  • 原来有x → 显示 s(小写)
  • 原来没x → 显示 S(大写,表示无效)

7.11 设置和清除sgid

什么是SGID

SGID (Set Group ID):

  • 对文件:执行时以文件所属组的身份运行
  • 对目录:目录中新建的文件自动继承该目录的组(非常有用!)
chmod g+s filename/directory     # 设置sgid
chmod g-s filename/directory     # 清除sgid
chmod 2755 filename/directory    # 数字方式设置sgid(前面加2)

SGID目录的应用场景

团队协作目录:设置sgid后,所有人在里面创建的文件都属于同一个组,方便共享。

chmod g+s /home/team_project/

权限显示上,sgid占用组的x位:

  • 原来有x → 显示 s
  • 原来没x → 显示 S

7.12 设置和清除sticky bit

什么是Sticky Bit

Sticky Bit(粘滞位):对目录设置后,只有文件所有者才能删除自己的文件,即使其他人有写权限。

对目录有效,对文件基本不用了。

chmod +t directory     # 设置sticky bit
chmod -t directory     # 清除sticky bit
chmod 1755 directory   # 数字方式设置(前面加1)

典型例子

/tmp 目录就设置了sticky bit:所有人都能在里面创建文件,但只能删自己的。

权限显示上,sticky bit占用其他用户的x位:

  • 原来有x → 显示 t(小写)
  • 原来没x → 显示 T(大写)

7.13 小结

权限管理三剑客

命令作用
chown修改所有者(owner)
chgrp修改所属组(group)
chmod修改权限(mode)

特殊权限位速记

特殊权限数字前缀对文件对目录
SUID4xxx以所有者身份执行无效
SGID2xxx以所属组身份执行新建文件继承组
Sticky1xxx无效只能删自己的文件

权限查看

ls -l filename

输出格式:drwxr-xr-x

  • 第1位:文件类型
  • 2-4位:所有者权限
  • 5-7位:组权限
  • 8-10位:其他用户权限

理解权限是Linux系统管理的基础,务必掌握。


Linux Shell 权限 chmod chown chgrp suid sgid sticky