当前位置:首页>Linux>Linux 基础实战课 ③用户管理与权限控制,这些坑我替你踩过了

Linux 基础实战课 ③用户管理与权限控制,这些坑我替你踩过了

  • 2026-09-11 01:56:30
Linux 基础实战课 ③用户管理与权限控制,这些坑我替你踩过了

Linux 基础实战课 ③

用户管理与权限控制,这些坑我替你踩过了

Linux基础  实战课 

Linux 基础实战课 · 第3篇

💬 有一次给客户交付 VDI 项目,运维同事嫌每次操作都要切 root 麻烦,就直接把业务账号加进了 sudoers,并且没加任何限制——等于给了他 root 权限。后来有个同事手滑跑了一条 rm -rf,把 /var/lib/mysql 整个目录删了,数据库直接崩了。

这件事之后我意识到:Linux 用户权限管理,不只是「会用命令」,更重要的是「知道边界在哪、坑在哪」。这篇文章就把我遇到过的坑,连着正确做法,一起讲清楚。

一、Linux 的用户体系:理清楚才不会乱

Linux 是多用户操作系统,每个用户都有自己的身份,系统通过 UID(用户ID)来区分。搞清楚用户分类,后面的权限管理才不会乱。

用户类型

UID 范围

说明

root 超级用户

0

拥有系统所有权限,操作不受任何限制

系统用户

1 ~ 999

运行系统服务用的,不用来登录(如 www-data、mysql)

普通用户

1000 以上

我们日常创建的账号,权限受限制

💡 查看当前用户是谁,用 whoami;查看自己的 UID 和所属组,用 id。这两个命令我几乎每次 SSH 进服务器都会先敲一遍。

查看当前用户信息 

whoami# 显示当前用户名

id# 显示 UID、GID 和所属组

# 示例输出:uid=1000(student) gid=1000(student) groups=1000(student),27(sudo)

二、用户管理:创建、修改、删除

用户管理这部分命令不多,但坑不少。我一个一个说。

useradd — 创建新用户

创建用户 

sudo useradd alice# 创建用户(不创建家目录)

sudo useradd -m alice# 创建用户 + 同时创建家目录(推荐)

sudo useradd -m -s /bin/bash alice# 指定 shell 为 bash

sudo useradd -m -G sudo alice# 创建用户并加入 sudo 组

⚠️ 单独 useradd alice 不会创建家目录,SSH 登录后会报错。一定要加 -m 参数!这是我第一次配环境时踩的坑。

passwd — 设置或修改密码

设置密码 

sudo passwd alice# 给 alice 设置密码(root 操作,不需要知道原密码)

passwd# 修改自己的密码(需要先输入当前密码)

💡 新建用户必须立刻设密码,否则账号是锁定状态,无法登录。这步经常被忘掉。

usermod — 修改用户信息

常用修改操作 

sudo usermod -aG sudo alice# 把 alice 加入 sudo 组(-a 追加,不覆盖)

sudo usermod -aG docker alice# 把 alice 加入 docker 组

sudo usermod -s /bin/zsh alice# 修改登录 shell

sudo usermod -l newname alice# 修改用户名

⚠️ -aG 和 -G 的区别非常重要:只用 -G 会覆盖用户现有的所有附加组,加了 -a 才是追加。我见过有人因为这个把自己踢出 sudo 组,然后就再也 sudo 不了……

userdel — 删除用户

删除用户 

sudo userdel alice# 只删除用户,保留家目录

sudo userdel -r alice# 删除用户 + 删除家目录(不可恢复!)

💡 删人之前先确认他的家目录里有没有重要数据。-r 是删家目录,操作不可逆。

命令

用途

常用参数

useradd

创建新用户

-m(创建家目录), -s(指定shell), -G(加入组)

passwd

设置/修改密码

不带参数改自己的,加用户名改别人的(需root)

usermod

修改用户属性

-aG(追加加组), -s(改shell), -l(改用户名)

userdel

删除用户

-r(同时删家目录)

id

查看用户身份

不带参数查自己,加用户名查别人

三、组管理:为什么要用组?

用户组是 Linux 权限管理的重要工具。比如你有一个 /data 目录,希望 alice 和 bob 都能读写,但其他人不行——最优雅的做法是创建一个组,把他们都加进去,然后设置目录归属这个组。

groupadd / groupdel — 创建和删除组

组管理命令 

sudo groupadd developers# 创建 developers 组

sudo usermod -aG developers alice# 把 alice 加入 developers 组

sudo usermod -aG developers bob# 把 bob 也加入

sudo groupdel developers# 删除组(不会删用户)

💡 把一个目录的所属组设为 developers,然后 chmod g+rw,这个组里的用户就都有读写权限了。这是生产环境里多人协作的标准做法。

查看用户在哪些组

查看组信息 

groups alice# 查看 alice 属于哪些组

cat /etc/group# 查看所有组及其成员

四、sudo 权限配置:精细化控制比「全给」更安全

很多人配 sudo 只会把用户加进 sudo 组,完事。但这等于把整个 root 权限都给出去了,风险很高。用 sudoers 文件可以精确控制:这个用户能用 sudo 执行哪些命令、不需要密码执不执行。

把用户加入 sudo 组(最简单的方式)

加入 sudo 组 

sudo usermod -aG sudo alice

加进去之后,alice 用 sudo 可以执行所有命令,效果等同于 root。适合受信任的管理员账号。

用 visudo 精细控制权限(推荐)

编辑 sudoers 配置文件,强烈建议用 visudo 命令,它会在保存前做语法检查,避免配错了把自己锁在外面。

打开 sudoers 配置 

sudo visudo

配置格式 

# 格式:用户名主机=(以哪个用户执行)命令

aliceALL=(ALL:ALL) ALL# 给 alice 完整 sudo 权限

aliceALL=(ALL) NOPASSWD: ALL# 完整权限 + 不需要输密码

# 只允许 alice 执行 systemctl 和 nginx 相关命令

aliceALL=(ALL) /usr/bin/systemctl, /usr/sbin/nginx

⚠️ NOPASSWD: ALL 要谨慎使用。我那个同事删数据库的事,就是因为用了这个配置——他以为只是重启服务,结果命令敲错了,sudo 直接就执行了,没有密码确认的缓冲机会。

五、/etc/passwd 和 /etc/shadow:用户信息存在哪里

用户信息不是凭空来的,Linux 把它们存在两个文件里。了解这两个文件,遇到账号问题才知道去哪查。

/etc/passwd — 用户基本信息

查看用户文件 

cat /etc/passwd | grep alice

# 输出格式:用户名:x:UID:GID:注释:家目录:shell

# alice:x:1001:1001::/home/alice:/bin/bash

💡 第二个字段是 x,表示密码存在 /etc/shadow 里(加密的)。以前老系统密码直接存在这里,现在都移到 shadow 了,更安全。

/etc/shadow — 加密密码存放地

查看 shadow 文件(需要 root) 

sudo cat /etc/shadow | grep alice

# 输出格式:用户名:加密密码:最后修改日期:...

如果密码字段是 ! 或 *,说明账号被锁定,无法密码登录。可以用 passwd -u alice 解锁。

文件

存放内容

权限

/etc/passwd

用户名、UID、家目录、shell

所有人可读

/etc/shadow

加密后的密码、密码策略

只有root可读

/etc/group

组名、GID、组成员列表

所有人可读

六、真实案例:给新员工开服务器账号的正确流程

结合前面的内容,我把实际工作中给新员工开服务器账号的步骤整理成一个标准流程,可以直接抄去用。

标准开账号流程 

# 1. 创建用户(带家目录 + bash shell)

sudo useradd -m -s /bin/bash -c '新员工张三' zhangsan

# 2. 设置初始密码(并要求首次登录后修改)

sudo passwd zhangsan

sudo chage -d 0 zhangsan# 标记密码已过期,强制首次登录修改

# 3. 按需加入组(只加必要的)

sudo usermod -aG developers zhangsan# 开发组

# 4. 如果需要 sudo 权限,用 visudo 精确配置

sudo visudo

# 加一行:zhangsan ALL=(ALL) /usr/bin/systemctl

# 5. 验证账号

id zhangsan

su - zhangsan# 切换到该账号测试一下

✅ 这个流程的核心原则:最小权限——用户只拥有完成工作所必需的权限,多余的一律不给。

总结

• useradd -m 建用户,passwd 设密码,这两步缺一不可

• usermod -aG 追加加组,少了 -a 会覆盖掉原有组,踩过才知道有多坑

• sudo 权限尽量用 visudo 精细配置,不要直接给 NOPASSWD: ALL

• /etc/passwd 存用户基本信息,/etc/shadow 存加密密码,/etc/group 存组信息

• 最小权限原则:用户只拥有做好工作所必需的权限

下篇预告:《Linux 基础实战课④|软件包管理:apt 和 yum 怎么装软件、卸载软件、换源加速》。

💬 你们公司怎么管理服务器账号的?有没有因为权限问题出过事故?

评论区聊聊,正经经验和血泪教训都欢迎

👍 点赞💬 留言🔄 转发给需要的朋友

有问题欢迎评论区留言,看到都会回复

最新文章

随机文章