拒绝瞎 777!一文搞懂 Linux 文件权限底层到高阶玩法

发布时间:2026/7/20 20:32:42
拒绝瞎 777!一文搞懂 Linux 文件权限底层到高阶玩法 在 Linux 操作系统的安全体系中文件权限管理是核心基石之一。它通过精细化的权限分配机制实现了对文件访问、修改、执行等操作的严格管控保障了系统数据的安全性与完整性。本文将从基础权限原理出发逐步深入到权限配置、特殊权限应用及默认权限管理结合实操案例为你全面拆解 Linux 文件权限管理的核心逻辑与实践技巧。文章目录一、Linux 文件系统权限基础原理1.三类权限主体2.权限字符串解析10位字符的核心含义3.权限优先级规则4.rwx 权限的核心含义文件 vs 目录二、文件权限管理实操chmod、chown、chgrp 命令1.chmod 命令修改文件/目录权限1符号法直观易懂适合精细化调整2数字法高效便捷适合批量配置2.chown 与 chgrp 命令修改属主与属组1chown 命令修改属主/同时修改属主和属组2chgrp 命令专门修改属组3.文件权限总结三、默认权限管理umask 命令1.umask 核心规则2.umask 实操案例3.umask 持久化配置四、高级权限管理特殊权限SUID、SGID、Sticky1.SUID针对可执行文件临时获取属主权限2.SGID针对目录实现组内文件共享3.Sticky针对公共目录防止文件被误删4.查找系统中的特殊权限文件五、总结一、Linux 文件系统权限基础原理Linux 采用灵活且严谨的权限模型能够适配绝大多数场景下的权限管控需求。其核心逻辑围绕“权限主体”与“权限类型”展开通过二者的组合实现对文件操作的精准限制。1.三类权限主体Linux 将文件的访问主体划分为三类分别对应不同的权限层级优先级依次递减文件属主User通常是创建该文件的用户对文件拥有最高级别的管控权限权限优先级最高。文件属组Group默认是文件属主所属的主组组内所有成员共享该组对应的文件权限。其他用户Other除文件属主和属组成员外系统中所有其他用户权限优先级最低。2.权限字符串解析10位字符的核心含义通过ls -l命令可查看文件的详细权限信息以示例-rw-r-----. 1 laoma wheel 2262 Dec 23 08:47 myfile为例权限部分-rw-r-----.的10位字符可分为四部分各部分含义如下字符位置代表含义示例解析myfile第1位文件类型标识-普通文件d目录l软链接b/c块/字符设备第2-4位文件属主User权限rw-属主拥有读、写权限无执行权限第5-7位文件属组Group权限r--属组成员仅拥有读权限无写、执行权限第8-10位其他用户Other权限---其他用户无任何权限3.权限优先级规则若某用户同时属于文件属主和属组成员如示例中 laoma 用户既是属主也是 wheel 组成员系统将优先匹配**文件属主权限**属组权限不再生效。这一规则确保了文件创建者的核心管控权避免权限冲突。4.rwx 权限的核心含义文件 vs 目录需特别注意的是r读、w写、x执行三种基础权限在普通文件和目录上的含义截然不同这是权限管理的易错点也是核心考点。二、文件权限管理实操chmod、chown、chgrp 命令掌握权限管理的核心命令是实现精细化权限配置的关键。Linux 提供chmod修改权限、chown修改属主、chgrp修改属组三大命令满足各类权限调整需求。1.chmod 命令修改文件/目录权限chmod是权限管理最常用的命令用于调整文件或目录的读、写、执行权限支持两种语法格式符号法和数字法可根据场景灵活选择。1符号法直观易懂适合精细化调整语法格式chmod WhoHowWhat /path/to/file参数说明Who指定权限主体u属主、g属组、o其他、a所有用户。How指定权限操作添加权限、-移除权限、精确设置权限。What指定权限类型r读、w写、x执行。实操案例以/lab/passwd文件为例演示符号法权限调整# 1. 查看文件初始权限[rootcentos7 lab]# ls -l passwd-rw-r--r--.1root root231211月814:17passwd# 2. 给属主添加执行权限[rootcentos7 lab]# chmod ux ./passwd[rootcentos7 lab]# ls -l passwd-rwxr--r--.1root root231211月814:17passwd# 3. 一次性调整多主体权限属主移除写、执行权限属组添加写权限其他用户移除所有权限[rootcentos7 lab]# chmod u-wx,gw,o- passwd[rootcentos7 lab]# ls -l passwd-r--rw----.1root root231211月814:17passwd# 4. 一次性设置所有用户权限为读、写、执行[rootcentos7 lab]# chmod arwx passwd[rootcentos7 lab]# ls -l passwd-rwxrwxrwx.1root root231211月814:17passwd2数字法高效便捷适合批量配置语法格式chmod ### /path/to/file参数说明三位数字分别对应属主、属组、其他用户的权限每位数字取值为0-7对应二进制权限组合0代表无权限7代表读、写、执行全权限二进制与十进制、权限的对应关系如下二进制十进制对应权限权限说明0000---无任何权限0011--x仅执行权限0102-w-仅写权限0113-wx写执行权限1004r--仅读权限1015r-x读执行权限1106rw-读写权限1117rwx读写执行权限实操案例以/lab/passwd文件为例演示数字法权限调整# 1. 设置权限为属主读、写属组写、执行其他用户读对应二进制110 011 100十进制634[rootcentos7 lab]# chmod 634 passwd[rootcentos7 lab]# ls -l passwd-rw--wxr--.1root root231211月814:17passwd# 2. 设置权限为属主读、写、执行属组读、执行其他用户读、执行常用的755权限适合可执行程序[rootcentos7 lab]# chmod 755 passwd[rootcentos7 lab]# ls -l passwd-rwxr-xr-x.1root root231211月814:17passwd# 3. 查看文件权限的数字形式和符号形式[rootcentos7 lab]# stat -c %A passwd # 查看符号权限-rwxr-xr-x[rootcentos7 lab]# stat -c %a passwd # 查看数字权限7552.chown 与 chgrp 命令修改属主与属组在实际运维中经常需要调整文件的属主和属组以适配团队协作、权限管控需求。chown用于修改文件属主可同时修改属组chgrp专门用于修改文件属组。1chown 命令修改属主/同时修改属主和属组语法格式仅修改属主chown 新属主 /path/to/file同时修改属主和属组chown 新属主:新属组 /path/to/file递归修改目录及内部所有文件权限chown -R 新属主:新属组 /path/to/dir实操案例# 1. 查看文件初始属主和属组[rootcentos7 lab]# ls -l passwd-rwxr-xr-x.1root root231211月814:17passwd# 2. 修改文件属主为 laoma[rootcentos7 lab]# chown laoma passwd[rootcentos7 lab]# ls -l passwd-rwxr-xr-x.1csh root231211月814:17passwd# 3. 同时修改属主为 laowang、属组为 wheel[rootcentos7 lab]# chown laowang:wheel passwd[rootcentos7 lab]# ls -l passwd-rwxr-xr-x.1laowang wheel231211月814:17passwd# 4. 递归修改目录 dir01 及内部所有文件的属主和属组为 laowang:wheel[rootcentos7 lab]# chown -R laowang:wheel dir01/[rootcentos7 lab]# ls -R -ld dir01 dir01/*drwxrwx---.2laowang wheel2011月814:22 dir01 -rwxrwx---.1laowang wheel011月814:22 dir01/file012chgrp 命令专门修改属组语法格式chgrp 新属组 /path/to/file支持-R递归参数用法与chown一致。实操案例将passwd文件的属组修改为 wheel[rootcentos7 lab]# chgrp wheel passwd[rootcentos7 lab]# ls -l passwd-rwxr-xr-x.1csh wheel231211月814:17passwd3.文件权限总结三、默认权限管理umask 命令在 Linux 中新建文件或目录时其默认权限由umask权限掩码决定。umask的核心作用是“剔除权限”即从默认最大权限中剔除umask对应的权限得到实际默认权限。1.umask 核心规则新建普通文件的最大默认权限为666读、写权限无执行权限避免安全风险。新建目录的最大默认权限为777读、写、执行全权限。实际默认权限 最大默认权限 - umask 值数字法计算。2.umask 实操案例# 1. 查看当前 umask 值默认值为 0022[cshcentos7 ~]$umask0022# 2. 新建文件和目录查看默认权限文件666-022644目录777-022755[cshcentos7 ~]$mkdirlabcdlab[cshcentos7 lab]$touchf1mkdird1[cshcentos7 lab]$ls-ltotal0drwxr-xr-x.2csh csh6Nov817:05 d1# 755权限-rw-r--r--.1csh csh0Nov817:05 f1# 644权限# 3. 修改 umask 值为 0000不剔除任何权限新建文件和目录[cshcentos7 lab]$umask0[cshcentos7 lab]$touchf2mkdird2[cshcentos7 lab]$ls-ld*2 drwxrwxrwx.2csh csh6Nov817:07 d2# 777权限-rw-rw-rw-.1csh csh0Nov817:07 f2# 666权限# 4. 修改 umask 值为 0077剔除属组、其他用户所有权限新建文件和目录[cshcentos7 lab]$umask077[cshcentos7 lab]$touchf3mkdird3[cshcentos7 lab]$ls-ld*3 drwx------.2csh csh6Nov817:10 d3# 700权限-rw-------.1csh csh0Nov817:10 f3# 600权限3.umask 持久化配置临时修改的 umask 值仅在当前终端生效若需永久生效可将配置写入对应配置文件针对单个用户将umask 077写入用户家目录的~/.bashrc文件。针对所有用户将umask 077写入系统全局配置文件/etc/bashrc。# 单个用户持久化配置[cshcentos7 lab]$echoumask 077~/.bashrc[cshcentos7 lab]$source~/.bashrc# 使配置立即生效# 所有用户持久化配置需 root 权限[rootcentos7 ~]# echo umask 077 /etc/bashrc[rootcentos7 ~]# source /etc/bashrc # 使配置立即生效四、高级权限管理特殊权限SUID、SGID、Sticky除基础的 rwx 权限外Linux 还提供三种特殊权限SUID、SGID、Sticky用于解决特殊场景下的权限管控问题进一步提升系统安全性和协作效率。1.SUID针对可执行文件临时获取属主权限核心作用普通用户执行带有 SUID 权限的可执行文件时会临时获取该文件属主的权限执行结束后权限恢复。最典型的应用是passwd命令普通用户可通过该命令修改自身密码实际修改的是/etc/shadow文件该文件默认仅 root 可修改。# 1. 查看 /etc/shadow 文件权限仅 root 可修改[cshcentos7 ~]$ls-l/etc/shadow ----------.1root root1264Nov816:38 /etc/shadow# 2. 查看 passwd 命令权限带有 SUID 权限权限位显示为 s[cshcentos7 ~]$ls-l$(whichpasswd)-rwsr-xr-x.1root root27856Apr12020/usr/bin/passwd# 3. 给可执行文件添加 SUID 权限以 vim 为例[rootcentos7 ~]# chmod us /usr/bin/vim[rootcentos7 ~]# ls -l /usr/bin/vim-rwsr-xr-x.1root root233721610月142020/usr/bin/vim# 4. 删除 SUID 权限[rootcentos7 ~]# chmod u-s /usr/bin/vim2.SGID针对目录实现组内文件共享核心作用针对目录设置 SGID 权限后该目录内新建的所有文件和子目录其属组会继承父目录的属组而非创建者的主组适用于团队协作场景如开发组共享目录。# 1. 准备用户和组[rootcentos7 lab]# groupadd devops # 创建开发组[rootcentos7 lab]# useradd -G devops dev1 # 创建用户 dev1加入 devops 组[rootcentos7 lab]# useradd -G devops dev2 # 创建用户 dev2加入 devops 组# 2. 准备共享目录修改属组为 devops添加属组读写执行权限[rootcentos7 lab]# mkdir webapp[rootcentos7 lab]# chgrp devops webapp[rootcentos7 lab]# chmod grwx webapp# 3. 无 SGID 权限用户 dev1 创建的文件属组为自身主组[rootcentos7 lab]# su dev1[dev1centos7 lab]$touchwebapp/dev-f1[dev1centos7 lab]$ ll webapp/dev-f1 -rw-rw-r--.1dev1 dev107月2215:12 webapp/dev-f1# 属组为 dev1# 4. 添加 SGID 权限用户 dev1 创建的文件属组继承父目录的 devops[rootcentos7 lab]# chmod gs webapp[rootcentos7 lab]# su dev1[dev1centos7 lab]$touchwebapp/dev-f2[dev1centos7 lab]$ ll webapp/dev-f2 -rw-rw-r--.1dev1 devops07月2215:13 webapp/dev-f2# 属组为 devops# 5. 验证组内共享用户 dev2 可修改该文件[rootcentos7 lab]# su dev2[dev2centos7 lab]$echohello worldwebapp/dev-f2[dev2centos7 lab]$catwebapp/dev-f2 hello world3.Sticky针对公共目录防止文件被误删核心作用针对公共目录如/tmp设置 Sticky 权限后目录内的文件仅能被其属主、目录属主或 root 用户删除其他用户即使拥有目录写权限也无法删除他人文件避免公共目录文件被误删。# 1. 查看 /tmp 目录权限带有 Sticky 权限权限位显示为 t数字权限为 1777[rootcentos7 lab]# ls -ld /tmpdrwxrwxrwt.20root root409611月816:50 /tmp[rootcentos7 lab]# stat -c %a /tmp1777# 2. 验证普通用户无法删除他人文件[cshcentos7 ~]$rm/tmp/other-user-file# 尝试删除他人文件rm: cannot remove/tmp/other-user-file:Operation not permitted# 3. 验证普通用户可删除自己创建的文件[cshcentos7 ~]$touch/tmp/csh-f1[cshcentos7 ~]$rm/tmp/csh-f1# 可正常删除4.查找系统中的特殊权限文件可通过find命令查找系统中带有特殊权限的文件便于排查安全隐患# 查找系统中所有带有 SUID 权限的文件[rootcentos7 ~]# find / -perm -4000 # 4000 对应 SUID 权限的数字标识[rootcentos7 ~]# find / -perm -us # 符号法查找 SUID 文件# 查找系统中所有带有 SGID 权限的文件[rootcentos7 ~]# find / -perm -2000[rootcentos7 ~]# find / -perm -gs# 查找系统中所有带有 Sticky 权限的目录[rootcentos7 ~]# find / -perm -1000[rootcentos7 ~]# find / -perm -ot五、总结Linux 文件权限管理围绕“主体u/g/o”和“权限r/w/x”展开核心要点可概括为基础权限rwx 权限在文件和目录上的含义截然不同需重点区分。权限配置chmod修改权限、chown修改属主/属组是核心命令支持符号法和数字法。默认权限由umask决定核心规则是“最大权限 - umask 值”。特殊权限SUID临时获取属主权限、SGID目录文件属组继承、Sticky公共目录防误删解决特殊场景权限问题。通过本文的学习与实操相信你已掌握 Linux 文件权限管理的核心逻辑与实操技巧。在实际运维中需结合场景合理配置权限兼顾安全性与便捷性避免因权限配置不当引发安全风险。