linux 文件权限设置详解

在 Linux 中,文件和目录的权限控制非常重要。权限控制决定了用户对文件的操作能力,主要包括对文件的读取、写入和执行权限。Linux 使用 rwx 方式来表示权限,r 代表读取 (Read),w 代表写入 (Write),x 代表执行 (Execute)。

文件权限的基本结构

在 Linux 中,使用 ls -l 命令可以查看文件的权限,权限信息通常显示在文件的最左侧,结构如下:

复制代码
-rwxr-xr-x 1 user group 4096 Jan 1 12:34 file.txt 

从上面的例子可以分解出以下内容:

  • - : 表示文件类型,- 表示普通文件,d 表示目录,l 表示符号链接,b 表示块设备文件,c 表示字符设备文件等。

  • rwxr-xr-x: 这是文件的权限,分为三个部分,每部分三个字符,分别表示不同用户类别的权限:

    1. 第1组 (rwx): 文件拥有者的权限
    2. 第2组 (r-x): 与文件拥有者同组的用户的权限
    3. 第3组 (r-x): 其他用户的权限
  • 1: 文件的硬链接数。

  • user: 文件的拥有者。

  • group: 文件的所属用户组。

  • 4096: 文件的大小(单位:字节)。

  • Jan 1 12:34: 文件的最后修改时间。

  • file.txt: 文件名。

文件权限解释

  • r (read): 读取文件内容的权限。
  • w (write): 修改文件内容的权限。
  • x (execute) : 执行文件的权限。对于目录,x 权限表示进入该目录的权限(即可以 cd 到该目录)。

例如:

  • rwx: 具有读取、写入和执行的权限。
  • r-x: 具有读取和执行的权限,但没有写入权限。
  • rw-: 具有读取和写入权限,但没有执行权限。

权限的数字表示

在 Linux 中,文件权限可以用三个数字来表示,每个权限用一个数字来表示,具体如下:

  • r = 4 (读取权限)
  • w = 2 (写入权限)
  • x = 1 (执行权限)

数字是相加的,因此每种权限都有对应的数字表示:

  • rwx = 4 + 2 + 1 = 7
  • rw- = 4 + 2 = 6
  • r-- = 4 = 4
  • r-x = 4 + 1 = 5
  • wx- = 2 + 1 = 3
  • --- = 0

因此,文件权限 rwxr-xr-x 的数字表示为 755

  • 文件拥有者(user): rwx → 7
  • 同组用户(group): r-x → 5
  • 其他用户(others): r-x → 5

修改文件权限

使用 chmod 命令可以修改文件或目录的权限,chmod 可以使用符号表示法(如 rwx)或数字表示法(如 755)来设置权限。

使用符号表示法
  • +: 添加权限
  • -: 移除权限
  • =: 设置具体的权限(清除其他权限)

例子:

  • chmod +x file.txt:给 file.txt 文件增加执行权限。
  • chmod -x file.txt:从 file.txt 文件中移除执行权限。
  • chmod u+x file.txt:给文件拥有者增加执行权限(u 代表 user,即文件拥有者)。
  • chmod g-w file.txt:从文件所在组用户中移除写入权限(g 代表 group,即文件所属组)。
  • chmod o+r file.txt:给其他用户添加读取权限(o 代表 others,即其他用户)。
  • chmod u=rwx,g=rx,o=r file.txt:设置文件拥有者为 rwx,组用户为 rx,其他用户为 r
使用数字表示法

数字表示法直接通过三个数字来设置权限:

  • 第一个数字表示文件拥有者的权限。
  • 第二个数字表示与文件拥有者同组的用户的权限。
  • 第三个数字表示其他用户的权限。

例子:

  • chmod 755 file.txt: 设置文件拥有者为 rwx(7),组用户为 r-x(5),其他用户为 r-x(5)。
  • chmod 644 file.txt: 设置文件拥有者为 rw-(6),组用户为 r--(4),其他用户为 r--(4)。
  • chmod 777 file.txt: 设置所有用户(拥有者、组用户、其他用户)都具有 rwx(7)权限。

修改文件所有者和所属组

使用 chown 命令可以修改文件的拥有者和所属用户组。

语法
复制代码
chown [选项] 用户:组 文件 
  • 用户: 文件的新拥有者。
  • : 文件的新所属组。

例子:

  • chown user1 file.txt: 将文件的拥有者修改为 user1,不改变所属组。
  • chown user1:group1 file.txt: 将文件的拥有者修改为 user1,将所属组修改为 group1
  • chown :group1 file.txt: 将文件的所属组修改为 group1,不改变文件拥有者。

设置特殊权限

除了常规的读、写、执行权限外,Linux 还提供了三种特殊权限:SetuidSetgidSticky Bit

1. Setuid (s)
  • Setuid 权限设置在可执行文件上时,它允许以文件所有者的身份执行该文件,即使执行该文件的用户不是文件的所有者。

  • Setuid 权限通过在执行权限的位置使用小写字母 s 来表示。

    例子:

    复制代码
    chmod u+s file # 给文件设置 setuid 权限 
2. Setgid (s)
  • Setgid 权限可以作用于文件和目录。

    • 对于文件,它使得执行该文件的用户以文件所属组的身份执行文件。
    • 对于目录,它确保新创建的文件和目录继承父目录的组。

    例子:

    复制代码
    chmod g+s directory # 设置目录的 setgid 权限 chmod g+s file # 设置文件的 setgid 权限 
3. Sticky Bit (t)
  • Sticky Bit 权限主要用于目录。当设置 Sticky Bit 权限时,目录中的文件只能由文件的所有者、目录的所有者或 root 用户删除或重命名,其他用户无法删除文件,即使他们有写入权限。

    例子:

    复制代码
    chmod +t directory # 给目录设置 sticky bit 权限 

总结

  • Linux 文件权限通过三个部分(拥有者、所属组、其他用户)来设置。
  • 权限通过 rwx 或数字(如 755)表示。
  • 使用 chmod 修改文件权限,chown 修改文件拥有者和所属组。
  • 还有 Setuid、Setgid 和 Sticky Bit 等特殊权限控制。
相关推荐
博语小屋4 小时前
设计一个简单的网络计算器并将其守护进程化
linux·网络·tcp/ip
星火开发设计4 小时前
枚举类 enum class:强类型枚举的优势
linux·开发语言·c++·学习·算法·知识
喜欢吃燃面9 小时前
Linux:环境变量
linux·开发语言·学习
代码游侠9 小时前
ARM开发——阶段问题综述(二)
运维·arm开发·笔记·单片机·嵌入式硬件·学习
Mr.朱鹏11 小时前
Nginx路由转发案例实战
java·运维·spring boot·nginx·spring·intellij-idea·jetty
java_logo11 小时前
OpenCode 企业级 Docker 部署完整指南
运维·docker·容器·opencode·opencode本地化部署·opencode部署手册·opencode部署方案
TTBIGDATA12 小时前
【knox】User: knox is not allowed to impersonate admin
大数据·运维·ambari·hdp·trino·knox·bigtop
佑白雪乐13 小时前
<Linux基础第10集>复习前面内容
linux·运维·服务器
春日见13 小时前
自动驾驶规划控制决策知识点扫盲
linux·运维·服务器·人工智能·机器学习·自动驾驶