十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

【Linux系统编程】shell与权限(2)——从 rwx 到 chmod/chown

【Linux系统编程】shell与权限(2)——从 rwx 到 chmod/chown 主页传送门:良木生香个人专栏:《C语言》《数据结构-初阶》《鼠鼠的C学习之路》《Linux系统编程》人为善,福随未至,祸已远行;人为恶,祸虽未至,福已远离前言在 Linux 中权限是系统安全的基石。普通用户和 root 有什么区别su 和 su - 有什么不同sudo 怎么用白名单机制是什么chmod 和 chown 怎么改权限这篇文章从用户身份切换出发带你彻底理解 Linux 权限体系。文章目录[toc]一、Linux 权限的本质——用户身份与权限体系1.1 普通用户与 root——两种身份两种世界1.2 su 命令——切换用户身份1.3 su vs su - ——一个细节坑了无数人1.4 sudo 命令——临时借用 root 权限1.5 白名单机制——谁可以用 sudo二、ls -l 输出解读——10 个字符看懂文件权限三、三类访问者——拥有者、所属组、其他人四、rwx 权限详解——读、写、执行4.1 权限匹配机制——Linux 怎么判断你有没有权限4.2 三种权限的含义4.3 目录权限的坑——r 和 x 的区别五、三个关于权限的面试问题问题 1进入一个目录需要什么权限问题 2什么决定了文件或者目录的默认权限问题 3root 新建的文件普通用户不读不写不执行那么普通用户可以删除吗4.4 权限的二进制表示六、chmod 指令——修改文件权限6.1 符号模式字母模式6.2 八进制数字模式最常用6.3 常用权限组合速查6.4 递归修改目录权限七、chown 指令——修改文件拥有者一、Linux 权限的本质——用户身份与权限体系1.1 普通用户与 root——两种身份两种世界Linux 把用户分为两类普通用户和root超级管理员。对比项普通用户root超级管理员用户 IDUID ≠ 0UID 0权限受限只能操作自己的文件无所不能可以操作任何文件符号$#能否修改系统配置❌ 不能✅ 可以能否删除任何文件❌ 不能✅ 可以能否创建/删除用户❌ 不能✅ 可以终端提示符的区别# 普通用户的提示符$[larrylocalhost ~]$# root 的提示符#[rootlocalhost ~]#安全原则**日常操作使用普通用户需要管理员权限时再用sudo临时获取。这样可以防止误操作破坏系统。root 的能力有多大可以读写/删除任何文件包括系统核心文件可以修改任何用户的密码可以创建和删除用户可以启动/停止任何服务可以修改网络配置警告root 权限太大了一旦误操作可能直接让系统崩溃所以 Linux 有一个机制普通用户需要 root 授权才能执行特权操作这就是sudo和白名单机制的由来。1.2 su 命令——切换用户身份suSwitch User用于切换用户身份。# 切换到 root需要输入 root 的密码su-# 切换到指定普通用户需要输入该用户的密码su- larry# 查看当前用户身份whoami# 输出larry# 查看当前用户 IDid# 输出uid1000(larry) gid1000(larry) groups1000(larry)su 的常见用法命令含义说明su -切换到 root 并加载 root 环境完全切换推荐使用su - username切换到指定用户切换到其他普通用户su不加-切换到 root 但保留当前环境变量不推荐环境变量混乱exit或Ctrl D退出当前登录回到上一个用户退出 su 回到普通用户1.3 su vs su - ——一个细节坑了无数人这是非常容易混淆的坑点su和su -看起来差不多实际上有本质区别命令行为结果su只切换用户身份保留当前 shell 的环境变量PATH 可能还是普通用户的路径su -切换用户身份同时加载目标用户的完整环境PATH 变成 root 的环境干净切换# 用 su不加 -[larrylocalhost ~]$suPassword: 输入 root 密码[rootlocalhost larry]# echo $PATH# 此时 PATH 仍然是 /home/larry/binroot 的环境没有完全加载# 用 su -加 -[larrylocalhost ~]$su- Password: 输入 root 密码[rootlocalhost ~]# echo $PATH# 此时 PATH 是 /usr/local/sbin:/usr/local/bin:/sbin:/bin:...# root 的完整环境变量已加载结论su - 完全切换切换用户 加载环境推荐使用su 半切换只切换用户不切换环境容易出 bug记忆口诀su -的-代表完整环境就像王婆说媒要完整传递信息不能只传一半。1.4 sudo 命令——临时借用 root 权限sudoSwitch User and DO允许普通用户临时借用 root 权限执行单条命令执行完权限自动收回。# 以 root 身份执行一条命令需要输入当前用户的密码sudoapt-getinstallvim# 以 root 身份编辑系统文件sudovim/etc/hosts# 以 root 身份查看文件sudocat/etc/shadow# shadow 文件普通用户无权查看# 以其他用户身份执行sudo-ularrywhoami# 以 larry 的身份执行 whoamisudo 的工作流程普通用户执行 sudo 命令 → 输入自己密码 → sudo 检查白名单 → 有权限则执行 → 权限自动收回为什么 sudo 用自己的密码而不是 root 密码因为如果 sudo 用 root 密码那普通用户必须知道 root 密码才能执行特权操作这样 root 密码就泄露了。sudo 用当前用户的密码只要用户在白名单里就能临时获取 root 权限——既方便又安全。1.5 白名单机制——谁可以用 sudo普通用户默认不能用 sudo需要管理员把他加入白名单/etc/sudoers。查看当前用户是否有 sudo 权限# 普通用户执行以下命令如果有权限就能看到配置sudo-l添加 sudo 权限的方法# 方法一编辑白名单文件sudovisudo# 在文件中添加一行larryALL(ALL)ALL# 含义larry 用户在所有主机上可以以所有用户身份执行所有命令# 保存退出后larry 就可以使用 sudo 了白名单文件的格式用户名 主机(可切换到的用户) 可执行的命令 larry ALL(ALL) ALL # larry 可以执行所有命令 tom ALL(ALL) /usr/bin/systemctl # tom 只能执行 systemctl常用的白名单配置配置含义安全性larry ALL(ALL) ALLlarry 可以执行所有 sudo 命令需谨慎larry ALL(ALL) NOPASSWD: ALLlarry 执行 sudo 不需要密码危险生产禁用%wheel ALL(ALL) ALLwheel 组的成员都可以用 sudo推荐把用户加入 wheel 组即可# 把用户加入 wheel 组自动获得 sudo 权限CentOS/RHEL 推荐方式sudousermod-aGwheel larry# 把用户加入 sudo 组Ubuntu/Debian 推荐方式sudousermod-aGsudolarry设置用户密码新用户首次使用前必须设置# root 给普通用户设置密码sudopasswdlarry# 普通用户修改自己的密码passwd# 输入当前密码 → 输入新密码 → 确认新密码二、ls -l 输出解读——10 个字符看懂文件权限在 Linux 中用ls -l查看文件详情输出格式如下-rw-r--r--.1root root12346月2718:245.txt10 个字符的含义- rw- r-- r-- │ │ │ │ │ │ │ └── 其他人(other)的权限: r-- │ │ └─────── 所属组(group)的权限: r-- │ └──────────── 拥有者(user)的权限: rw- └──────────────── 文件类型: - 普通文件第一位文件类型字符含义例子-普通文件.txt、.cpp、可执行程序d目录directory文件夹l软链接link快捷方式c字符设备键盘、鼠标b块设备硬盘、U盘p管道进程间通信s套接字网络通信后 9 位权限位3 组 × 3 位位置含义例子rw-r--r--第 2-4 位拥有者(user)权限rw-第 5-7 位所属组(group)权限r--第 8-10 位其他人(other)权限r--三、三类访问者——拥有者、所属组、其他人Linux 把能访问文件的用户分成三类角色英文说明类比拥有者user (u)文件的创建者房主所属组group (g)与拥有者同组的用户家人其他人other (o)既不是拥有者也不在同组路人# 查看文件的拥有者和所属组ls-l5.txt# 输出-rw-r--r--. 1 root root 1234 6月 27 18:24 5.txt# ↑ ↑# 拥有者 所属组为什么要有组想象一个公司开发组成员需要互相访问项目文件但不想让其他部门看到。把开发组成员放到同一个 group设置文件 group 权限为rwxother 权限为---就实现了组内共享、组外隔离。四、rwx 权限详解——读、写、执行4.1 权限匹配机制——Linux 怎么判断你有没有权限在讲 rwx 之前必须先理解Linux 的权限匹配规则Step 1: 判断发起者是谁 ├── 是文件的拥有者→ 匹配 user 权限前 3 位 ├── 是拥有者同组的人→ 匹配 group 权限中 3 位 └── 都不是→ 匹配 other 权限后 3 位 关键规则一旦匹配成功立即停止后面的权限位不再检查举个例子# 文件权限-rwxr--r--# user group other# rwx r-- r--# 场景用户 tom 属于 group1而文件的所属组也是 group1# 但 tom 不是文件的拥有者# 匹配过程# 1. tom 是拥有者吗不是 → 继续# 2. tom 和文件同组吗是→ 匹配 group 权限r--# 3. 停止不再检查 other 权限# 结果tom 只能读不能写不能执行# 即使 other 权限是 r--也是只读但 tom 已经被 group 匹配了坑点**如果拥有者把自己的权限设为---但 group 权限是rwx那么拥有者反而没有权限因为匹配到 user 就停止了不会继续检查 group。4.2 三种权限的含义权限字符对文件的作用对目录的作用读 (read)r读取文件内容列出目录中的文件ls写 (write)w修改/删除文件内容在目录中创建/删除文件执行 (execute)x执行文件程序/脚本进入目录cd4.3 目录权限的坑——r 和 x 的区别这是面试最爱考的坑点权限组合能否ls能否cd能否创建文件r--✅ 能看到文件名❌ 不能进入❌--x❌ 看不到✅ 能进入❌进入后也看不到文件r-x✅ 能看到✅ 能进入❌rw-✅ 能看到❌ 不能进入❌rwx✅ 能看到✅ 能进入✅坑点**只有r没有x→ 能ls看到文件名但cd不进去只有x没有r→ 能cd进去但ls看不到文件需要知道确切文件名才能访问。五、三个关于权限的面试问题问题 1进入一个目录需要什么权限答案需要x执行权限。进入目录的本质是切换当前工作目录到该目录下这需要内核验证你对该目录有执行权限。详细分析权限对目录的作用r读能ls列出目录中的文件名w写能在目录中创建/删除文件x执行能cd进入目录实验验证# 1. 创建一个测试目录mkdirtest_dircdtest_dirtouchfile1.txt file2.txtcd..# 2. 移除目录的 x 权限保留 r 权限chmod644test_dir# r--r--r--# 3. 尝试进入目录lstest_dir# ✅ 能看到 file1.txt file2.txt有 r 权限cdtest_dir# ❌ Permission denied没有 x 权限# 4. 加上 x 权限移除 r 权限chmod100test_dir# --x------# 5. 再次尝试cdtest_dir# ✅ 能进入ls# ❌ Permission denied没有 r 权限看不到文件lsfile1.txt# ✅ 如果你知道文件名可以直接访问结论cd进入目录 → 必须有x权限ls看文件名 → 必须有r权限在目录中创建/删除文件 → 必须有w权限实际应用为什么目录的默认权限是755rwxr-xr-x而不是644因为目录如果没有x权限别人就进不去了所以目录必须给所有人x权限同时用r控制能否看到文件列表。问题 2什么决定了文件或者目录的默认权限这个问题涉及 umask 机制将在后续详细补充。问题 3root 新建的文件普通用户不读不写不执行那么普通用户可以删除吗这个问题涉及 Linux 的删除文件机制不是看文件权限而是看目录权限将在后续详细补充。4.4 权限的二进制表示每个权限位用 1 位二进制表示rwx │││ ││└── x (执行) 1 │└─── w (写) 2 └──── r (读) 4 rwx 4 2 1 7 rw- 4 2 0 6 r-x 4 0 1 5 r-- 4 0 0 4常用权限组合权限二进制八进制含义rwx1117读写执行rw-1106读写r-x1015读执行r--1004只读-wx0113写执行-w-0102只写--x0011只执行---0000无权限六、chmod 指令——修改文件权限6.1 符号模式字母模式chmod[who][operator][permission]文件名选项含义whou(user)、g(group)、o(other)、a(all)operator(添加)、-(移除)、(设置)permissionr(读)、w(写)、x(执行)# 给拥有者添加执行权限chmodux5.txt# 移除拥有者的写权限chmodu-w5.txt# 给所属组添加写权限chmodgw5.txt# 给其他人添加执行权限chmodox5.txt# 设置所有人只有读权限覆盖原有权限chmodar5.txt# 组合操作拥有者读写执行组和其他人只读chmodurwx,gor5.txt6.2 八进制数字模式最常用三位数字分别对应拥有者、所属组、其他人# 最高权限所有人都可读可写可执行测试环境生产禁用chmod7775.txt# 常用拥有者全权限组和其他人只读chmod6445.txt# 可执行程序拥有者全权限组和其他人可读可执行chmod755program# 目录拥有者全权限组和其他人可读可进入chmod755mydir/6.3 常用权限组合速查命令权限位适用场景chmod 777rwxrwxrwx测试环境临时用生产环境禁用chmod 755rwxr-xr-x可执行程序、目录chmod 644rw-r--r--普通文件源代码、文本chmod 600rw-------私密文件密钥、密码chmod 700rwx------个人目录chmod 750rwxr-x---团队共享目录安全警告chmod 777意味着任何人都能改你的文件生产环境中尽量避免。6.4 递归修改目录权限# 修改目录及其所有子文件/子目录的权限chmod-R755mydir/七、chown 指令——修改文件拥有者# 修改文件的拥有者chownstudent5.txt# 同时修改拥有者和所属组chownroot:root5.txt# 只修改所属组拥有者不变chown:student5.txt# 或chgrpstudent5.txt# 递归修改目录及其内容的拥有者chown-Rstudent:student mydir/chown vs chmod 的区别chown改的是这个文件属于谁拥有者/组chmod改的是谁能对这个文件做什么权限位后记Linux 权限管理是系统安全的基石。今天我们深入理解了用户身份体系普通用户 vs root、身份切换su/su -/sudo、以及白名单机制。这些知识点是面试高频考点也是日常运维的必备技能。下一篇文章我们将继续深入 Linux 权限管理探索 umask 默认权限、软链接和硬链接等核心概念。 那么以上就是本次所有的内容了有什么描述不对的、不恰当的地方恳请大佬指正看到后会第一时间修改感谢您的阅读~
返回列表