今天,新来的实习生小赵一不小心把开发服务器搞挂了。借这次事故复盘,我带你彻底搞懂Linux用户与权限管理的精髓。早上9点,HR通知我,后端实习生小曾今天入职,需要给他开通开发服务器的权限。
在Linux的世界里,我从不轻易交出root密码——那相当于把核按钮交给了刚学会走路的孩子。
我们需要为他做的只有三件事:创建身份、设置口令、规划权限。
第一幕 新人的工牌与钥匙
我打开终端,敲下第一行命令。这不只是建个账号,更是规划他在系统中的“数字人生”。
1. 创建数字身份:useradd
# -m: 创建家目录 /home/xiaowang (没有家目录,很多配置无处安身)# -s /bin/bash: 指定登录Shell,告别难用的默认sh# -g devops: 直接将他分配到devops组sudo useradd -m -s /bin/bash -g devops xiaozhao
在Linux系统中,账号分为三类:超级用户root、程序用户 和普通用户。
2. 配置登录密钥:passwd
账号是锁着的房间,密码是开门的钥匙。
sudo passwd xiaowang# 系统提示:输入两次密码# 运维铁律:生产环境密码必须>12位,包含大小写、数字、特殊符号
真正的密码并不明文存储在 /etc/passwd 中,而是加密后藏在影子文件 /etc/shadow 里,只有root可读,这是第一道安全防线。
3. 身份切换的艺术:su与sudo的博弈
小赵登录服务器后跑来问我:"张哥,我想装个Docker,提示权限不足,能把root密码发我吗?"
这时候,就是运维素养的体现:
- su:如果我给他root密码,让他用 su - 切换身份,相当于把王宫大门的钥匙复刻给他
- sudo:这是现代运维的做法——给他一张有明确使用记录的临时特权卡
# 在 /etc/sudoers.d/ 下新建文件,这是更安全的方式echo "xiaozhao ALL=(ALL) ALL" | sudo tee /etc/sudoers.d/xiaozhaosudo chmod 440 /etc/sudoers.d/xiaozhao
配置含义:允许xiaowang在任何主机上,以任何用户的身份执行任何命令,但需要输入自己的密码。
第二幕 403报错背后的权限天书
下午两点,小王火急火燎地跑来:“张哥,我写了个Python脚本放在 /data/scripts/ 下,Nginx调用时报403错误,我自己运行也没权限!”
我连上服务器,一眼就看穿了问题。
1. 破译权限密码:ls -l 的奥秘
ls -l /data/scripts/run.py# 显示:-rw-r----- 1 root devops 1024 Jan 20 14:00 run.py
这行输出是Linux权限体系的核心密码:
-rw-r----- 1 root devops 1024 Jan 20 14:00 run.py↑ ↑ ↑ ↑ ↑ ↑ ↑1 2 4 5 6 7 8
2-4. 属主权限:rw- 表示root可读、可写、不可执行
5-7. 属组权限:r-- 表示devops组成员只能读
8-10. 其他人权限:--- 表示其他人(如小王)无任何权限
2. 权限的数学本质:rwx与421
小赵问:“网上说的chmod 755,数字是什么意思?”
这是Linux最精妙的设计——二进制到八进制的转换:
r (读取) = 4 (二进制100) → 权重最大w (写入) = 2 (二进制010) → 权重中等x (执行) = 1 (二进制001) → 权重最小7 = 4+2+1 → rwx (属主:读+写+执行)5 = 4+0+1 → r-x (属组:读+执行)5 = 4+0+1 → r-x (其他人:读+执行)3. 权限的默认规则:umask的面纱
新手常问:为什么我创建的文件默认是644,目录是755?
秘密在于umask(权限掩码)。系统用777减去umask值,得到默认权限:
# 查看当前umaskumask# 通常输出:0022
计算过程:
- 目录默认:777 - 022 = 755 (rwxr-xr-x)
- 文件默认:666 - 022 = 644 (rw-r--r--)
文件因为不能默认有执行权限,所以用666做基数。
4. 修复权限的两种略
方案A:调整权限位(chmod)
# 符号法(符合人类直觉):给属主加上执行权限sudo chmod u+x /data/scripts/run.py# 数字法(适合批量操作):设置为rwxr-xr-xsudo chmod 755 /data/scripts/run.py
方案B:变更所有权(chown)
既然是小赵维护的脚本,就应该把归属权还给他:
现在,小赵成为文件的真正主人,可以自由调整权限了。
# 语法:chown 用户:组 文件sudo chown xiaozhao:devops /data/scripts/run.py
第三幕 那个必须牢记的死亡操作
问题解决后,我发现小赵昨天在另一个目录执行了:
chmod -R 777 /var/www/html
我立即叫停——这是运维必须刻在骨子里的禁令。
为什么777不可以?
777 = rwxrwxrwx,意味着:
- 被入侵的web服务账号(如www-data)可植入木马
最小权限原则:运维的第一铁律
永远遵循“最小权限原则”:只授予完成工作所必需的最小权限。
正确的权限配置:
- 敏感配置:600 (rw-------,仅属主可读可写)
- 日志文件:640 或 644 (根据是否需要web读取)
- 上传目录:755 但文件644(防止上传可执行脚本)
高级工具:当基础权限不够时
有时,基础权限模型不够灵活。比如,想让用户A和B都能读写某个文件,但他们不在同一个组。这时就需要ACL:
# 查看ACL权限getfacl /data/shared/# 设置ACL:允许用户xiaoli读写setfacl -m u:xiaoli:rw /data/shared/# 设置ACL:允许ops组执行setfacl -m g:ops:x /data/scripts/
第四幕 运维架构师的全局视角
权限管理不是孤立的。在真正的生产环境中,它是一张纵横交错的安全网的一部分。
1. 账号生命周期管理
2. 纵深防御体系
3. 自动化运维整合
在成熟的运维体系中,权限管理是自动化的:
# 基础设施即代码示例users: - name: xiaowang groups: ['devops', 'docker'] sudo: 'ALL=(ALL) ALL' ssh_keys: - 'ssh-rsa AAAAB3...'
结语
权限如门禁。
记住,安全不是功能,而是系统固有的属性。良好的权限管理,是构建可信系统的基石,更是运维工程师专业素养的直接体现。
从今天起,每一次敲下chmod前,都问自己一句:我真的需要给这么多权限吗?