Linux权限

文章目录

  • 一·、Linux权限概念
    • 1.文件访问者分类
    • 2.文件类型和访问权限
  • 二、Linux权限管理
    • 1.chmod
    • 2.chown
    • 3.chgrp
    • 4.umask
  • 三、Linux权限设置
  • 四、目录权限
  • 五、粘滞位
  • 六、总结

一、Linux 权限概念

Linux 操作系统是一个多用户系统,这意味着同一时间可能有多个用户在使用同一台机器。为了保障系统的安全性和用户数据的隐私,Linux 设计了一套完善的权限管理系统。这套系统的核心是控制谁(用户)可以对哪些资源(主要是文件和目录)进行哪些操作(读、写、执行)。

1. 文件访问者分类

在 Linux 中,针对任何一个文件或目录,都将用户分为三类:

  • 文件所有者 (Owner/u): 创建该文件或目录的用户。通常对该文件拥有最高的控制权。
  • 所属组 (Group/g): 文件或目录被分配到一个特定的用户组。属于该组的成员用户共享对文件的某些访问权限。一个用户可以属于多个组。
  • 其他用户 (Others/o): 除了文件所有者和所属组成员之外的其他所有用户。

这种分类方式允许管理员精细地控制不同用户对资源的访问级别。

2. 文件类型和访问权限

使用 ls -l 命令可以查看文件或目录的详细信息,输出结果的开头部分就包含了类型和权限信息:

cpp 复制代码
drwxr-xr-x 2 owner group 4096 Jun 12 10:30 Documents
-rw-r--r-- 1 owner group 1024 Jun 12 10:25 report.txt
  • 第一个字符:文件类型
    • - : 普通文件 (Regular file)
    • d : 目录 (Directory)
    • l : 符号链接 (Symbolic link)
    • c : 字符设备文件 (Character device file)
    • b : 块设备文件 (Block device file)
    • p : 命名管道 (Named pipe)
    • s : 套接字 (Socket)
  • 接下来的九个字符:访问权限 (Permissions)
    • 这九个字符分为三组,每组三个字符,分别对应文件所有者 (u)所属组 (g)其他用户 (o) 的权限。
    • 每组中的三个字符分别代表:
      • 第一个字符:读权限 (r - Read)
        • 对于文件:允许查看文件内容。
        • 对于目录:允许列出目录内容(使用 ls 命令)。
      • 第二个字符:写权限 (w - Write)
        • 对于文件:允许修改文件内容。
        • 对于目录:允许在目录中创建、删除、重命名文件或子目录。
      • 第三个字符:执行权限 (x - eXecute)
        • 对于文件:允许将文件作为程序或脚本运行。
        • 对于目录:允许进入该目录(使用 cd 命令),并访问目录中的元数据(但要访问目录内文件的内容,还需要文件本身的读权限)。
    • 示例:rwxr-xr--
      • 所有者:读、写、执行 (rwx)
      • 所属组:读、执行 (r-x),无写权限
      • 其他用户:只读 (r--),无写和执行权限

二、Linux 权限管理

管理员和文件所有者可以使用以下命令来修改文件的权限、所有者和所属组。

1. chmod (Change Mode)

功能:修改文件或目录的访问权限。

使用方法:

  • 符号法 (相对设置法) :使用 u (所有者), g (所属组), o (其他用户), a (所有用户) 和运算符 + (添加权限), - (移除权限), = (设置权限) 以及 r, w, x
    • 格式:chmod [ugoa][[+-=][rwx]] 文件或目录
    • 示例:
      • chmod u+x script.sh :给文件所有者添加执行权限。
      • chmod g-w file.txt :移除所属组的写权限。
      • chmod o=r-- data.csv :设置其他用户的权限为只读。
      • chmod a+x program :给所有用户添加执行权限。
      • chmod go-rw secret.doc :移除所属组和其他用户的读写权限。
  • 数字法 (绝对设置法) :用三位八进制数字表示权限。每位数字代表 u, g, o 的权限组合。
    • 权限值计算:
      • r = 4
      • w = 2
      • x = 1
      • 无权限 = 0
    • 每组权限的值是上述数字之和。
    • 格式:chmod [数字] 文件或目录
    • 示例:
      • chmod 755 dir/7 (所有者: 4+2+1 = rwx), 5 (所属组: 4+0+1 = r-x), 5 (其他用户: r-x)。常用于目录或可执行文件。
      • chmod 644 file.txt6 (所有者: rw-), 4 (所属组: r--), 4 (其他用户: r--)。常用于普通文件。
      • chmod 700 private.key7 (所有者: rwx), 0 (所属组: ---), 0 (其他用户: ---)。严格私有文件。

2. chown (Change Owner)

功能:修改文件或目录的所有者 (Owner) 和/或所属组 (Group)。

使用方法:

  • 格式:chown [新所有者][:[新所属组]] 文件或目录
  • 示例:
    • chown alice report.txt :将 report.txt 的所有者改为 alice,所属组不变。
    • chown :developers project/ :将目录 project/ 的所属组改为 developers,所有者不变。
    • chown alice:developers script.sh :将 script.sh 的所有者改为 alice,所属组改为 developers
    • chown -R alice:developers data/ :递归地 (-R) 将目录 data/ 及其下所有文件和子目录的所有者改为 alice,所属组改为 developers

注意:通常只有 root 用户才能改变文件的所有者。

3. chgrp (Change Group)

功能:修改文件或目录的所属组 (Group)。

使用方法:

  • 格式:chgrp [新所属组] 文件或目录
  • 示例:
    • chgrp sales data.csv :将 data.csv 的所属组改为 sales
    • chgrp -R www html/ :递归地 (-R) 将目录 html/ 及其下所有内容的所属组改为 www

注意:普通用户只能将自己所属的组设置为文件的所属组。

4. umask (User File Creation Mask)

功能:设置新建文件和目录时的默认权限。它代表的是需要从默认权限中"屏蔽"掉(即去掉)的权限位。

  • 默认权限
    • 文件:通常是 666 (rw-rw-rw-)
    • 目录:通常是 777 (rwxrwxrwx)
  • umask:一个三位或四位的八进制数(通常显示四位,第一位代表特殊权限)。它指定了哪些权限不应该被授予。
  • 计算实际权限
    • 文件:默认 666 - umask 值 = 实际权限
    • 目录:默认 777 - umask 值 = 实际权限
    • 注意:这里的减法在权限位上是逻辑"与"操作,不是数学减法。更直观的理解是 umask 指定了禁止的权限。
  • 查看当前 umask
    • 命令:umask
    • 示例输出:00220002
  • 设置 umask
    • 命令:umask [值] (例如 umask 0027)
    • 示例:如果 umask0022
      • 新建文件权限:666 - 022 = 644 (rw-r--r--)
      • 新建目录权限:777 - 022 = 755 (rwxr-xr-x)
    • 示例:如果 umask0007
      • 新建文件权限:666 - 007 = 660 (rw-rw----)
      • 新建目录权限:777 - 007 = 770 (rwxrwx---)

umask 通常在用户的 Shell 配置文件 (如 ~/.bashrc) 中设置。


三、Linux 权限设置 (综合应用)

在实际管理中,通常结合使用上述命令:

  1. 创建用户和组 :使用 useradd, groupadd
  2. 设置文件所有者/组 :使用 chown, chgrp 将文件分配给正确的用户和组。
  3. 设置访问权限 :使用 chmod (符号法或数字法) 精确控制 u/g/o 的 r/w/x 权限。
  4. 设置默认权限 :通过 umask 控制新创建文件的初始权限。
  5. 处理目录树 :使用 -R 选项递归地修改目录及其内容的权限和所有者/组。

四、目录权限的特殊性

目录的 r, w, x 权限含义与文件不同,理解这点非常重要:

  • 读权限 (r)
    • 允许列出目录内容(如 ls 命令)。但仅 r 权限,没有 x 权限,无法查看文件属性(大小、权限、时间戳等),文件名可能显示为问号 ?
  • 写权限 (w)
    • 允许在目录中创建、删除、重命名文件或子目录。即使你对目录内的某个文件没有写权限,只要你对包含它的目录有写权限,你就能删除这个文件! 这是因为删除操作修改的是目录的内容列表。
  • 执行权限 (x)
    • 允许进入目录(cd 命令)。
    • 允许访问目录内文件或子目录的元数据(如 ls -l 查看详细信息、stat 命令),前提是你同时拥有该文件本身的读权限(如果需要读内容)。
    • 是访问目录内任何文件的基础。没有 x 权限,即使你有文件的 r 权限,也无法读取文件内容;即使你有文件的 w 权限,也无法修改文件内容;即使你有文件的 x 权限,也无法执行文件。

总结目录权限的关键点:

  • 查看 目录内容列表,需要 r 权限。
  • 修改 目录内容(增删改文件/子目录名),需要 wx 权限。
  • 访问 目录内的文件(读内容、写内容、执行),需要:
    • 对该目录拥有 x 权限。
    • 对目标文件本身拥有相应的 r, w, x 权限。

五、粘滞位 (Sticky Bit)

这是一个特殊的权限位,主要用于共享目录(如 /tmp)。

  • 作用 :在设置了粘滞位的目录中,只有文件的所有者、目录的所有者或 root 用户才能删除或重命名该文件 。即使其他用户对该目录有写权限(w),也不能删除或重命名不属于他们的文件。
  • 设置方法
    • 符号法:chmod +t directory/
    • 数字法:在原有的三位权限数字前加 1 (如 1777, chmod 1777 /tmp)。1 代表粘滞位。
  • 查看 :使用 ls -l,如果目录的其他用户执行权限位是 t (例如 drwxrwxrwt),或者大写 T (如果该位原本没有 x 权限),则表示设置了粘滞位。
  • 典型应用/tmp 目录。所有用户都可以在里面创建临时文件,但只能删除自己创建的文件,不能删除别人的文件。

六、总结

Linux 的权限系统是其安全架构的基石:

  1. 核心概念:基于用户(Owner)、组(Group)、其他(Others)三类访问者,通过读(r)、写(w)、执行(x)三种权限控制对文件和目录的访问。
  2. 管理工具
    • chmod :修改权限(符号法 u/g/o/a +/- r/w/x 或数字法 755, 644)。
    • chown:修改所有者和/或所属组。
    • chgrp:修改所属组。
    • umask:设置新建文件和目录的默认权限。
  3. 目录权限r(列表内容), w(修改内容列表), x(进入/访问元数据) 的含义与文件不同。x 权限是访问目录内文件的前提。
  4. 特殊权限 :粘滞位 (+t, 1xxx),常用于共享目录(如 /tmp),限制只有文件所有者或 root 才能删除文件。
  5. 安全原则 :遵循最小权限原则,只授予必要的权限。理解 umask 和递归选项 -R 对于正确设置权限至关重要。
相关推荐
R&L_201810018 小时前
三维旋转变换
c++·坐标变化
HalvmånEver8 小时前
Linux:Ext系列⽂件系统(一)
大数据·linux·运维
草莓熊Lotso8 小时前
C++11 核心进阶:引用折叠、完美转发与可变参数模板实战
开发语言·c++·人工智能·经验分享·后端·visualstudio·gitee
专业开发者8 小时前
技术说明:基于 Wi-Fi Aware™的 Miracast® 应用
linux·运维·网络
拾光Ծ8 小时前
【linux】环境变量(详解)
linux·运维·服务器
乌萨奇也要立志学C++8 小时前
【洛谷】贪心专题之哈夫曼编码 从原理到模板题解析
c++·算法
落羽的落羽8 小时前
【C++】并查集的原理与使用
linux·服务器·c++·人工智能·深度学习·随机森林·机器学习
虾..16 小时前
Linux 软硬链接和动静态库
linux·运维·服务器
Evan芙17 小时前
Linux常见的日志服务管理的常见日志服务
linux·运维·服务器