ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Linux 怎么认人、管门、发钥匙

Linux 怎么认人、管门、发钥匙 一、为什么程序要有自己的身份想象一台服务器是一栋办公楼里面同时住着 Nginx、Java 应用和数据库。如果它们全都拿一把万能钥匙root进出那么任何一个房间出事整栋楼都完了。所以生产环境通常为每个服务准备独立账号只授予业务必需的权限。谁在访问——实际运行身份是谁属于哪些组能否访问——路径、Owner、Group 和 rwx 是否满足需求。Linux 判断一次文件访问要走四步先确定运行身份用 id 看再确认路径可达每一级目录都需要 x用 namei -l 看然后检查对象权限Owner、Group、Other 匹配当前身份用 stat 和 getfacl 看最后给出访问结果允许或拒绝。配套纪律只有一条遇到 Permission denied不要先 chmod 777。定位第一处不满足项再做最小修改。二、用户名是外号UID 才是身份证你登录时用用户名比如 yangge但 Linux 内核判断资源归属时主要使用数字身份UID 是用户的编号GID 是组的编号。用户名方便人识别数字方便内核处理就像你叫什么不重要身份证号才是系统唯一认真核对的。Ubuntu 的常见默认划分UID 0 是 root权力最大UID 1 到 999 多留给系统和服务账号例如 sshd、nginx、mysql它们不需要人登录UID 1000 及以上多用于普通用户。课件特别提醒这些范围可以通过系统配置调整不要把它们当成所有 Linux 的固定规则。三、主组和附加组户口和会员卡每个用户有且只有一个主组Primary Group它决定你新建文件时文件的默认属组类似户口本上的户籍。用户还可以加入多个附加组Supplementary Group获得额外的组访问资格类似办了多张会员卡每张卡开一扇额外的门。课件用一张图总结账号 yangge 的主组是 yangge创建文件默认继承此组同时加入附加组 devops共享部署权限和 ops运维协作权限。对应到命令id 看全部身份id -gn 看主组名id -Gn 看所有组名。四、三个文件拼出账号身份本地账号信息分散在三个文件里合起来才是完整身份文件装什么/etc/passwd账号、UID、主 GID、家目录、登录 Shell/etc/shadow密码状态、有效期、过期时间/etc/group组名、GID、附加组成员课件强调日常查询优先用 getent、id、passwd -S 和 chage -l不要直接编辑账号文件也不要只读取本地文件形成错误判断系统可能接入统一认证getent 查的是系统实际生效的身份。还有个容易忽略的细节/etc/group 的成员列表里只记录附加组成员不记主组。想知道某人的主组要拿 /etc/passwd 里的主 GID 去对应所以查完整组关系直接用 id 用户名最省事。五、账号的一生创建、限制、恢复、回收课件把账号生命周期画成五步创建useradd、设置passwd、usermod、限制锁定 lock、过期 expire、恢复解锁 unlock、回收userdel。每一步都要求用 id、passwd -S 或 chage -l 验证。两条重要观念第一追附加组用 -aG。单独 -G 是重设整个附加组列表把原来的都冲掉-aG 才是追加。就像会员卡列表一个是重新办卡一个是在旧卡后面再加一张。第二禁用账号优先锁定并保留现场确认不再需要后再删除。密码锁定不会终止已经运行的进程真实停用还要检查 SSH 密钥、计划任务和运行进程。删除前先确认没有该用户的进程在跑生产环境删除前还要归档并移交文件。六、权限串四段类型、Owner、Group、Otherls -l 输出的权限串比如 -rw-r-----拆成四段读第一段是文件类型短横线是普通文件d 是目录后面三段分别是 Owner属主、Group属组、Other其他人的 rwx。最重要的规则Linux 只选择与当前身份匹配的一组权限不会三组相加。你是属主就看 Owner 那一段看完为止Group 和 Other 跟你无关。不存在属主权限不够就去叠加组权限这回事。改归属用 chown可同时改属主和属组如 root:devopschgrp 只改属组。递归改之前先用 find 预览别在不确定的路径上直接 chown -R。七、rwx 在文件和目录上是两套含义同样三个字母作用于文件和目录含义完全不同不能套用权限对普通文件对目录r读取文件内容列出目录项名称w修改文件内容创建、删除、重命名目录项通常还需要 xx把文件作为程序执行穿越目录并访问内部对象最好用类比理解目录目录是走廊两侧的一排门牌。r 让你看到门牌上都写着什么x 让你真正走进去w 让你在走廊上装新门、拆旧门、给门换牌子。由此得出课件反复强调的结论删除一个文件主要取决于父目录的 wx不是目标文件本身有没有 w。你能写一个文件不代表你能删它你删不了是因为装它的那条走廊不让你拆门。课件实验也验证了组合的意义目录 0744 时Other 只有 r你能看到文件名列表但读不了文件也建不了新文件缺 x 和 w目录 0755 后Other 有 rx能读文件了但依然建不了新文件缺 w。八、chmod 两种写法说目标还是说变化符号方式描述变化对象u、g、o、a加操作 加、- 减、 精确设置加权限r、w、x。比如 chmod ux 就是给属主加执行位。适合在现有基础上小修小补。数字方式描述目标r4、w2、x1三位数字分别对应 Owner、Group、Other按位相加。7 是 421 全开6 是 42 读写5 是 41 读加执行4 是只读0 是全关。0640 的意思是属主读写、属组只读、其他人无权限。适合一步到位设定明确状态。一句话选择知道最终长什么样用数字只想在现在的基础上加一点或减一点用符号。九、目录逐级权限走廊要一路通访问 /srv/ruoyi/shared/application.yml不是只检查这个文件而是要从根开始穿过 /、/srv、/srv/ruoyi、/srv/ruoyi/shared 一整条走廊。任何一级目录缺少 x即使最终文件可读也无法到达。namei -l 命令把一条路径逐级拆开显示每一级的类型、权限、Owner 和 Group是排障神器。课件给出检查纪律从根目录开始定位第一处不满足项不要只盯着最后一个文件。这回答了复盘问题里的经典一问文件是 640 时为什么仍可能无法读取——文件本身没问题可能是路上某级目录的 x 不够。十、umask出厂前就裁掉的权限新文件从 666 起步新目录从 777 起步umask 决定裁掉哪些位。注意两点第一按位屏蔽不做十进制减法不是 666 减 027第二普通文件默认不会获得执行位。课件示例 umask 027文件 666 屏蔽后得 640目录 777 屏蔽后得 750。不同登录环境的 umask 可能不同实验前先记住当前值实验后恢复。想临时改 umask 又不污染当前终端用圆括号括号里的命令在子 Shell 中运行退出括号后一切复原。十一、三类特殊权限三把不同的锁普通 rwx 描述访问能力特殊权限改变规则特殊权限数字位改变什么常见对象SUID4000执行时临时取得文件 Owner 的有效身份可执行文件SGID2000新对象继承目录的 Group共享目录Sticky Bit1000限制删除或改名他人拥有的目录项公共可写目录显示上Owner、Group、Other 的 x 位置分别显示 s、s、t。小写 s 或 t 表示特殊权限和执行权限同时存在大写 S 或 T 表示设了特殊权限但没有执行权限通常需要继续检查。课件给 SUID 的比喻是尚方宝剑钦差普通用户拿到宝剑带 SUID 的程序例如 passwd可以临时代表皇帝文件 Owner例如 root办事但他并没有变成皇帝能做什么仍由程序代码决定。典型例子/usr/bin/passwd 权限是 4755普通用户不能直接写 /etc/shadow却能通过 passwd 改自己的密码因为 passwd 只在受控代码路径里用 root 权限。SGID 解决协作问题多人共用目录时如果新文件都归创建者主组所有其他人可能没法继续协作。目录设了 SGID新文件就继承目录的组。注意它只管所属组继承实际能不能读写仍受 rwx、umask 和 ACL 共同影响。Sticky Bit 解决公共目录互删问题0777 的公共目录里谁都能删别人的文件。加上 Sticky Bit如 /tmp 的 1777权限串末位是 t删除和改名只限文件 Owner、目录 Owner 或 root。写权限还在只是别人删不了你的东西。课件同时给出风险提示SUID 扩大进程身份必须重点审计不要给解释器脚本或通用工具cat、rm、Shell随意添加。十二、最小权限刚好满足业务课件对最小权限的定义很精确并非权限越少越好而是刚好满足业务并且没有多余授权。若依的设计就是范例程序和配置让 root 拥有、ruoyi 组只读目录 0750、文件 0640日志目录归 ruoyi 自己0750可以创建追加Other 一律不授权。应用能读程序、能写日志但不能篡改发布程序。反例是 chmod 777它让所有本机用户都能读、写并进入目录既扩大修改和删除风险也会掩盖真实故障原因。故障恢复了但门全开了。排查 Permission denied 的标准顺序课件五步先确认实际运行身份ps、id 或服务配置再逐级检查路径namei -l 或 ls -ld然后用 stat 看类型、Owner、Group 和 rwx必要时用 getfacl 看 ACL最后用应用身份做最小读写测试和业务复测。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进