在 Linux 系统的运维工作中,账号与权限管理是保障系统安全的第一道防线。Linux 通过严谨的账号分类、权限机制和配置文件,实现了对用户操作的精细化管控。
一、先搞懂:Linux 账号体系的底层逻辑
Linux 是一个多用户、多任务的操作系统,每一个能登录系统的用户,都对应着一个唯一的账号。这些账号不是孤立存在的,而是通过'用户 - 组'的关联方式,实现权限的批量管理。
Linux 账号与权限管理涵盖用户分类、核心配置文件解析及常用管理命令。主要介绍超级用户、普通用户与程序用户的区别,以及 UID/GID 机制。详细讲解/etc/passwd、/etc/shadow 和/etc/group 文件结构。提供 useradd、passwd、usermod 等命令的实战用法,包括创建、修改、删除用户及组的操作。最后总结最小权限原则、定期审计等安全最佳实践,帮助运维人员构建安全的 Linux 系统环境。

在 Linux 系统的运维工作中,账号与权限管理是保障系统安全的第一道防线。Linux 通过严谨的账号分类、权限机制和配置文件,实现了对用户操作的精细化管控。
Linux 是一个多用户、多任务的操作系统,每一个能登录系统的用户,都对应着一个唯一的账号。这些账号不是孤立存在的,而是通过'用户 - 组'的关联方式,实现权限的批量管理。
Linux 里的用户账号主要分为三类,各自的权限和用途完全不同:
超级用户(root):这是系统的'管理员账号',拥有对整个系统的最高权限,可以执行任何操作,比如删除系统文件、修改核心配置。它就像 Windows 里的 Administrator 账号,但权限更大。日常操作中我们应该避免直接用 root 登录,否则一个误操作就可能导致系统崩溃。
普通用户:这类账号需要由 root 或其他管理员创建,权限受到严格限制。普通用户只能在自己的'家目录'(如 /home/zhangsan)里拥有完整的读写权限,对系统其他目录的访问则需要额外授权。
程序用户:这类账号并不是给人用的,而是给系统服务或程序运行时使用的,比如 nginx、mysql 账号。它们通常不能登录系统,主要作用是让服务以最低权限运行,避免程序漏洞被黑客利用后获取系统最高权限。
为了更高效地管理用户权限,Linux 引入了'组账号'的概念。我们可以把多个用户加入同一个组,然后给这个组设置权限,组里的所有用户都会自动继承这些权限。
基本组:每个用户创建时,系统会自动创建一个和用户名同名的组,这个组就是该用户的基本组。用户的文件默认都会归属到这个基本组。
附加组:除了基本组,用户还可以被加入其他组,这些组就叫附加组。比如技术部的员工 zhangsan,基本组是 tech,后来因为工作需要被加入邮件管理员组 mailadm,那么 mailadm 就是他的附加组。
在 Linux 系统内部,其实并不是通过用户名来识别用户的,而是通过数字形式的 UID(用户标识号)和 GID(组标识号)。
UID 规则:root 用户的 UID 固定为 0,程序用户的 UID 默认在 1~499 之间,普通用户的 UID 则从 500 开始分配。
GID 规则:和 UID 对应,root 组的 GID 固定为 0,程序组的 GID 默认在 1~499 之间,普通组的 GID 从 500 开始分配。
Linux 的账号信息都保存在几个核心配置文件里,理解这些文件的结构,是深入掌握账号管理的基础。
这个文件里保存了所有用户的基本信息,包括用户名、UID、GID、家目录等,任何用户都可以读取它的内容。每一行对应一个用户,用冒号 : 分隔成 7 个字段:
root、zhangsan。x,表示密码已经被加密并转移到 /etc/shadow 文件中。/home/用户名。/bin/bash,如果设置为 /sbin/nologin 则表示该用户不能登录系统。举个例子,root:x:0:0:root:/root:/bin/bash 这一行就表示:用户名是 root,密码存在 /etc/shadow 里,UID 和 GID 都是 0,用户说明是 root,家目录是 /root,登录 Shell 是 /bin/bash。
这个文件是 /etc/passwd 的'安全升级版',保存了用户的加密密码、密码有效期等敏感信息,只有 root 用户才能读取。每一行同样用冒号分隔,包含 9 个字段,其中最关键的是:
!! 或 * 则表示该用户没有密码,无法登录。这个文件保存了所有组的信息,包括组名、GID、组成员等,每一行用冒号分隔成 4 个字段:
root、tech。x,组密码保存在 /etc/gshadow 中(很少使用)。比如 root:x:0:root 这一行表示:组名是 root,GID 是 0,组成员是 root 用户。
了解了基本概念和配置文件,我们就可以动手管理用户账号。Linux 提供了一系列命令来完成这些操作,下面是最常用的实战命令。
这是创建用户的核心命令,最简单的用法就是直接跟用户名:
useradd zhangsan
执行这个命令后,系统会自动完成以下操作:
/etc/passwd 和 /etc/shadow 文件末尾添加该用户的记录。/home 目录下创建用户的家目录 /home/zhangsan,并复制初始配置文件(如 .bashrc)。如果需要自定义用户属性,可以添加各种选项:
-u:指定用户的 UID,如 useradd -u 1005 lisi。-d:指定用户的家目录,如 useradd -d /opt/wangwu wangwu。-e:指定用户的失效日期,格式为 YYYY-MM-DD,如 useradd -e 2026-12-31 ftpuser。-g:指定用户的基本组,如 useradd -g tech zhaoliu。-G:指定用户的附加组,多个组用逗号分隔,如 useradd -G tech,mailadm sunqi。-s:指定用户的登录 Shell,如 useradd -s /sbin/nologin mysql(创建程序用户)。举个例子,创建一个管理员账号 admin,基本组为 wheel,附加组为 root,家目录为 /admin:
useradd -d /admin -g wheel -G root admin
创建用户后,必须设置密码才能登录,使用 passwd 命令:
passwd zhangsan
执行后会提示你输入两次密码,输入时不会显示任何字符,这是正常的安全机制。如果是 root 用户,可以直接修改其他用户的密码,不需要验证旧密码。
如果需要修改已存在用户的属性,使用 usermod 命令,选项和 useradd 基本一致:
usermod -G tech,dev zhangsan。usermod -L zhangsan。usermod -U zhangsan。删除用户的命令是 userdel,加上 -r 选项可以同时删除用户的家目录和邮件文件:
userdel -r zhangsan
⚠️ 注意:如果用户当前正在登录系统,无法直接删除,需要先让用户退出登录。
组账号的管理命令和用户账号类似,下面是核心操作:
创建一个新组的命令很简单:
groupadd tech
如果需要指定 GID,可以用 -g 选项:
groupadd -g 1008 dev
修改组的名称或 GID:
groupmod -n department tech(把 tech 组改名为 department)。groupmod -g 1009 dev。删除一个空组(组里没有用户):
groupdel tech
⚠️ 注意:如果组是某个用户的基本组,无法直接删除,需要先删除该用户或修改用户的基本组。
把用户加入组或从组中移除:
gpasswd -a zhangsan tech(把 zhangsan 加入 tech 组)。gpasswd -d zhangsan tech。gpasswd -A zhangsan tech(让 zhangsan 管理 tech 组,可以添加/删除成员)。有时候我们需要快速查询用户或组的信息,下面几个命令可以帮你高效完成:
比如查询 zhangsan 属于哪些组:
groups zhangsan
输出结果会显示该用户的基本组和附加组,如 zhangsan : tech mailadm。
查询 root 用户的标识信息:
id root
输出结果会显示 UID、GID 以及所属的所有组,如 uid=0(root) gid=0(root) groups=0(root),1(daemon)。
这个命令可以查看当前有哪些用户登录了系统,以及他们的操作:
w
输出结果会包含用户名、登录终端、登录时间、来源 IP 以及当前正在执行的命令。
比如从 /etc/group 中查询包含 root 的组:
grep "root" /etc/group
这在排查用户组归属时非常有用。
这是因为指定的 UID 已经被其他用户占用了,解决方法是换一个未被使用的 UID,或者不指定 UID 让系统自动分配。
普通用户需要在命令前加 sudo 来临时获取 root 权限,如:
sudo useradd lisi
执行后需要输入当前用户的密码,验证通过后就能以 root 权限执行命令。
可以用 pkill -u 用户名 强制终止该用户的所有进程,然后再删除用户:
pkill -u zhangsan
userdel -r zhangsan
重启系统,在开机引导界面按 e 进入编辑模式,找到以 linux16 开头的行,在末尾添加 init=/bin/bash,然后按 Ctrl+X 启动系统,进入单用户模式后,用 passwd root 重置密码。
/etc/passwd、/etc/shadow 等文件,删除不再使用的账号,避免安全隐患。掌握这些知识,你就能应对绝大多数 Linux 账号与权限管理的场景了。记住,实践是最好的老师,建议你在虚拟机里反复练习这些命令,熟悉每个操作的效果和报错场景,这样在遇到问题时才能快速定位和解决。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online