文章目录
- 一·、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= 4w= 2x= 1- 无权限 = 0
- 每组权限的值是上述数字之和。
- 格式:
chmod [数字] 文件或目录- 示例:
chmod 755 dir/:7(所有者: 4+2+1 =rwx),5(所属组: 4+0+1 =r-x),5(其他用户:r-x)。常用于目录或可执行文件。chmod 644 file.txt:6(所有者:rw-),4(所属组:r--),4(其他用户:r--)。常用于普通文件。chmod 700 private.key:7(所有者: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- 示例输出:
0022或0002- 设置 umask :
- 命令:
umask [值](例如umask 0027)- 示例:如果
umask是0022:
- 新建文件权限:
666 - 022 = 644(rw-r--r--)- 新建目录权限:
777 - 022 = 755(rwxr-xr-x)- 示例:如果
umask是0007:
- 新建文件权限:
666 - 007 = 660(rw-rw----)- 新建目录权限:
777 - 007 = 770(rwxrwx---)
umask通常在用户的 Shell 配置文件 (如~/.bashrc) 中设置。
三、Linux 权限设置 (综合应用)
在实际管理中,通常结合使用上述命令:
- 创建用户和组 :使用
useradd,groupadd。 - 设置文件所有者/组 :使用
chown,chgrp将文件分配给正确的用户和组。 - 设置访问权限 :使用
chmod(符号法或数字法) 精确控制 u/g/o 的 r/w/x 权限。 - 设置默认权限 :通过
umask控制新创建文件的初始权限。 - 处理目录树 :使用
-R选项递归地修改目录及其内容的权限和所有者/组。
四、目录权限的特殊性
目录的 r, w, x 权限含义与文件不同,理解这点非常重要:
- 读权限 (r) :
- 允许列出目录内容(如
ls命令)。但仅r权限,没有x权限,无法查看文件属性(大小、权限、时间戳等),文件名可能显示为问号?。
- 允许列出目录内容(如
- 写权限 (w) :
- 允许在目录中创建、删除、重命名文件或子目录。即使你对目录内的某个文件没有写权限,只要你对包含它的目录有写权限,你就能删除这个文件! 这是因为删除操作修改的是目录的内容列表。
- 执行权限 (x) :
- 允许进入目录(
cd命令)。 - 允许访问目录内文件或子目录的元数据(如
ls -l查看详细信息、stat命令),前提是你同时拥有该文件本身的读权限(如果需要读内容)。 - 是访问目录内任何文件的基础。没有
x权限,即使你有文件的r权限,也无法读取文件内容;即使你有文件的w权限,也无法修改文件内容;即使你有文件的x权限,也无法执行文件。
- 允许进入目录(
总结目录权限的关键点:
- 要查看 目录内容列表,需要
r权限。- 要修改 目录内容(增删改文件/子目录名),需要
w和x权限。- 要访问 目录内的文件(读内容、写内容、执行),需要:
- 对该目录拥有
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 的权限系统是其安全架构的基石:
- 核心概念:基于用户(Owner)、组(Group)、其他(Others)三类访问者,通过读(r)、写(w)、执行(x)三种权限控制对文件和目录的访问。
- 管理工具 :
chmod:修改权限(符号法u/g/o/a +/- r/w/x或数字法755,644)。chown:修改所有者和/或所属组。chgrp:修改所属组。umask:设置新建文件和目录的默认权限。- 目录权限 :
r(列表内容),w(修改内容列表),x(进入/访问元数据) 的含义与文件不同。x权限是访问目录内文件的前提。- 特殊权限 :粘滞位 (
+t,1xxx),常用于共享目录(如/tmp),限制只有文件所有者或 root 才能删除文件。- 安全原则 :遵循最小权限原则,只授予必要的权限。理解
umask和递归选项-R对于正确设置权限至关重要。