Linux权限管理完全指南

发布时间:2026/8/1 2:28:41
Linux权限管理完全指南 1. 用户与权限的基本概念在 Linux 系统中每个文件和目录都属于一个用户owner和一个用户组group。权限就是对这三类身份分别设定的用户user / owner文件的拥有者通常是创建者。用户组group文件所属的组组内所有用户共享组权限。其他人other既不是拥有者也不属于该组的其他所有用户。这三类身份各自拥有三种基本权限权限对文件的意义对目录的意义r读可以查看文件内容可以列出目录中的文件列表lsw写可以修改文件内容可以在目录中创建、删除文件x执行可以执行该文件如程序、脚本可以进入该目录cd访问目录内文件2. 查看权限ls -l我们用 ls -l 来查看文件的详细权限。例如$ ls -l main.cpp -rw-r--r-- 1 alice developers 2048 Jun 30 10:00 main.cpp第一列 -rw-r--r-- 就是权限字符串我们来拆解一下- rw- r-- r--① ② ③ ④① 文件类型- 表示普通文件d 目录l 符号链接等。② 用户权限3位rw- → 可读可写不可执行③ 组权限3位r-- → 可读不可写不可执行④ 其他人权限3位r-- → 可读不可写不可执行后面的 alice 是所有者developers 是所属组。3. 修改权限chmod3.1 符号模式用 u用户、g组、o其他人、a所有人配合 、-、 来增减权限chmod ux run.sh # 给拥有者增加执行权限 chmod go-w file.txt # 去掉组和其他人的写权限 chmod arx script.sh # 所有人只有读和执行权限 chmod o-rwx secret.txt # 把其他人的所有权限删除3.2 数字模式最常用每种权限对应一个数字r4w2x1。三组权限分别用一个 0-7 的数字表示。每种权限对应一个数字r4w2x1。三组权限分别用一个 0-7 的数字表示。数字二进制权限0000---1001--x2010-w-3011-wx4100r--5101r-x6110rw-7111rwx例如我们想让一个文件拥有者读、写、执行 → 7组读、执行 → 5其他人无权限 → 0命令就是chmod 750 myprogram常见组合755目录或可执行文件的标配自己全权限别人只读和执行644普通文件默认权限自己读写别人只读700私人脚本或密钥仅自己可访问4. 修改所有者和组chown / chgrpchown 改变所有者可同时改组chown alice file.txt # 把所有者改为 alice chown alice:developers file.txt # 同时改所有者和组chgrp 只改组chgrp developers file.txt修改权限通常需要 root 或文件所有者身份。5. 默认权限与 umask新建文件或目录时系统会根据一个叫做 umask 的值来屏蔽部分权限。默认权限满值减去 umask 值就是最终权限。文件默认满值是 666因为一般不让新文件有执行权限目录是 777。查看当前 umask$ umask 0022 # 后三位是八进制掩码第一位是特殊权限位暂时不管以 umask 022 为例新文件666 - 022 644rw-r--r--新目录777 - 022 755rwxr-xr-x可以临时修改 umaskumask 002 # 现在新文件变成 664组内可写6. 特殊权限SUID、SGID、Sticky Bit粘滞位除了 rwx 之外还有三个特殊权限位它们通常用数字 4SUID、2SGID、1Sticky表示放在常规权限数字的前面。6.1 SUIDSet User ID—— 数字 4当对一个可执行文件设置 SUID 位后任何用户执行该程序时都会以文件拥有者的权限运行而不是执行者自身的权限。最经典的例子是 passwd 命令它允许普通用户修改自己的密码需要写入 /etc/shadow该文件只有 root 可写。$ ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 68208 ... /usr/bin/passwd看到用户权限位的 s 了吗它取代了原来的 x表示 SUID 已设置且拥有者有执行权限。设置 SUIDchmod us myprogram # 符号法 chmod 4755 myprogram # 数字法首位 4 表示 SUID安全风险SUID 让普通程序具有高权限若程序有漏洞可能被提权攻击因此要谨慎使用。6.2 SGIDSet Group ID—— 数字 2SGID 对文件和目录的行为不同作用于可执行文件执行时以文件所属组的权限运行类似 SUID 的组版本。作用于目录更常用在该目录下创建的新文件其所属组会自动继承父目录的组而不是创建者自己的主组。这对于多人共享协作目录非常有用。设置 SGID 目录chgrp developers shared/ chmod gs shared/ # 或 chmod 2775 shared/ ls -ld shared/ drwxrwsr-x 2 alice developers 4096 ... shared/注意权限位中的 s 出现在组权限的位置。6.3 Sticky Bit粘滞位—— 数字 1粘滞位Sticky Bit仅对目录有意义。设置了粘滞位的目录任何用户都可以在该目录下创建文件但只能删除自己拥有的文件不能删除别人的文件即使目录本身是 777 权限。最经典的例子是 /tmp 目录$ ls -ld /tmp drwxrwxrwt 20 root root 4096 ... /tmp其他人权限位的 t 表示粘滞位已设置且执行权限存在。设置粘滞位chmod ot shared_dir # 符号法 chmod 1777 shared_dir # 数字法首位 1 表示 Sticky常见应用场景多用户共享的临时目录、文件上传目录。它既能保证所有用户都能写又能防止恶意或误删他人的文件。7. 常见误区与注意事项对目录的执行权限理解不清想访问目录内文件必须要有目录的x权限。只有r权限就只能ls列出文件名但不能cd进去也不能访问文件内容。数字模式首位经常忘chmod 777只设置基本权限。要同时加 SUID、SGID 或 Sticky 必须写四位数如1777、2775、4755。忘了首位会清零特殊权限。SUID 的安全陷阱不要给不可信的二进制文件设置 SUID尤其是 root 的 SUID 程序可能成为系统漏洞的入口。目录的 w 权限不等于可删除删除文件需要目录的写权限与文件本身的写权限无关。即使文件是只读的只要用户有目录的写权限就可以删除它。权限修改需要文件所有权或 root普通用户不能随意chmod别人的文件也不能把文件的所有者chown给别人除非是 root。8. 小结Linux 权限模型基于用户、组、其他人三种身份配以读、写、执行三种权限。使用ls -l查看权限用chmod符号或数字修改。用chown、chgrp改变所有者和组。umask控制新建文件的默认权限。特殊权限SUID (4)执行时以文件所有者权限运行。SGID (2)文件以所属组运行目录中新建文件继承目录的组。Sticky (1)目录中只有文件所有者能删除自己的文件。