📖 知识点简介
权限管理是运维的安全底线。Linux 是一个多用户系统,每个文件都有"主人"(owner)和"所属组"(group),并通过 rwx 三组权限位控制访问。从创建用户到权限精确配置,掌握这套体系是防止越权操作、保护系统安全的关键。
前两篇我们学了文件操作和进程管理,今天补齐用户、组、文件权限这个三角知识块。
🛠 核心命令整理
一、用户管理
| 命令 | 用途 | 常用参数 |
|---|---|---|
useradd |
创建用户 | -m 创建家目录 · -s 指定 shell · -g 指定主组 · -G 附加组 |
usermod |
修改用户属性 | -aG 追加到组 · -L 锁定 · -U 解锁 · -l 改登录名 |
userdel |
删除用户 | -r 一并删除家目录和邮件池 |
passwd |
设置/修改密码 | --stdin 从 stdin 读密码(脚本用)· -l / -u 锁定/解锁 |
chage |
密码过期管理 | -d 0 强制下次登录修改 · -M 90 90 天过期 |
id |
查看用户 UID/GID | 不加参数显示当前用户 |
who / w |
谁登录了系统 | w 显示更详细(负载、登录时间、当前命令) |
二、组管理
| 命令 | 用途 | 常用参数 |
|---|---|---|
groupadd |
创建组 | -g 指定 GID |
groupmod |
修改组 | -n 改组名 |
groupdel |
删除组 | --- |
gpasswd |
管理组成员 | -a 添加用户 · -d 移除用户 · -M 设置成员列表 |
三、文件权限管理
| 命令 | 用途 | 常用参数 |
|---|---|---|
chmod |
修改权限 | 符号法 u+x,g-w · 数字法 755, 644 · -R 递归 |
chown |
修改所有者 | chown user:group file · -R 递归 |
chgrp |
修改所属组 | -R 递归 |
umask |
设置默认权限掩码 | umask 0022 → 文件 644,目录 755 |
ls -l |
查看权限 | 第一列如 drwxr-xr-- 标识文件类型 + 三组 rwx |
四、高级权限(重点)
| 权限 | 表示 | 作用 |
|---|---|---|
| SUID | u+s / 4xxx |
执行时以文件所有者身份运行,如 /usr/bin/passwd(常规用户也得改密码) |
| SGID | g+s / 2xxx |
目录下新建文件继承目录的所属组,团队协作常用 |
| Sticky Bit | o+t / 1xxx |
目录内仅文件所有者可删,如 /tmp(权限 1777) |
💻 实操示例
场景一:新员工入职,创建运维账号
bash
# 创建运维组
groupadd ops
# 创建用户,指定 shell、附加到 ops 组
useradd -m -s /bin/bash -G ops zhangsan
# 强制首次登录改密码
passwd zhangsan # 设置初始密码
chage -d 0 zhangsan # 强制下次登录修改
# 验证
id zhangsan
# 输出: uid=1002(zhangsan) gid=1002(zhangsan) groups=1002(zhangsan),1005(ops)
场景二:项目目录权限配置(SGID + ACL)
bash
# 创建共享目录
mkdir -p /data/project
# 设置所属组
chown root:ops /data/project
# SGID + 读写执行(组成员可写)
chmod 2775 /data/project
# 2 -> SGID, 775 -> rwxrwxr-x
# 验证:组内用户新建文件
su - zhangsan -c "touch /data/project/test.txt"
ls -l /data/project/test.txt
# 输出: -rw-rw-r-- 1 zhangsan ops 0 ... ← 组自动继承为 ops
场景三:日志文件只允许追加(防止篡改)
bash
# 给日志文件设置不可变属性
chattr +a /var/log/app/audit.log
# +a 仅允许追加,不可删除/重命名(需 root)
lsattr /var/log/app/audit.log
# 输出: ----a--------e--- audit.log
⚠️ 常见坑点 / 注意事项
-
useradd 不加 -m 可能没有家目录 --- 不同发行版默认行为不同,CentOS 默认创建,Ubuntu 默认不创建,加
-m最保险。 -
passwd --stdin 已弃用 --- 在脚本中批量改密码时,推荐用
echo "user:pass" | chpasswd替代,兼容性更好。 -
SUID 不要乱用 ---
chmod u+s给脚本或非必要二进制文件加 SUID 是安全大忌,攻击者可能利用提权。能用 sudo 就不用 SUID。 -
Sticky Bit 忘了设 --- 共享目录不加
o+t,用户 A 可以删用户 B 的文件,生产环境容易出事故。 -
umask 在脚本中也要注意 --- Shell 脚本里创建临时文件最好显式设置
umask 0077,防止其他用户读到敏感数据。 -
chmod -R 伤及无辜 --- 递归改权限时慎用
chmod -R 777。若目录内有敏感执行文件(如密钥脚本),生产环境秒变"裸奔"。