当前位置:首页>Linux>Linux 从入门到进阶 11:多用户隔离机制与 Linux 账号体系

Linux 从入门到进阶 11:多用户隔离机制与 Linux 账号体系

  • 2026-10-11 06:42:44
Linux 从入门到进阶 11:多用户隔离机制与 Linux 账号体系

假设你和你的朋友、同学共用一台电脑,也就是几个人共同使用一台电脑。你们都会想到一个问题:我的个人数据如何不被其他人看到、修改甚至删除。

实际上,这个问题很容易解决,不管你用的是Windows系统,还是Linux系统,只要多分配几个用户账号就可以了,每个人使用不同的账号登录系统,

系统会为每一个普通用户分配独立的个人文件夹,Linux 中存放于/home/用户名,Windows 对应路径为C:\Users\用户名,这就是每个人专属的存储空间。依托操作系统内置的用户权限机制,每个用户仅对自己的个人目录拥有完整读写权限,无法随意查看、编辑、删除其他用户目录下的资料与软件配置,完整实现私人数据隔离。

上述机制就是系统的多用户机制,我们今天重点探讨Linux系统的多用户机制和账号体系。 

一、Linux 多用户机制的起源

20 世纪 60 年代计算机造价昂贵,需要多人共用一台主机进行工作和学习,这就存在不同用户数据隔离问题。

为解决这个问题,1964 年,MIT 联合通用电气、贝尔实验室启动 Multics 系统设计,设计目标是把 CPU 时间切片,轮流分配给多个登录用户,多人能同时操作同一台主机,互不卡顿。

为支撑多人同时使用,Multics 配套完整多用户体系:独立账号、用户组、文件访问权限,实现每个人数据隔离,他人无法随意查看和修改文件。

1969年 Multics 项目体量庞大、成本高昂、进度缓慢,贝尔实验室宣布退出项目。Multics 项目的开发者肯・汤普森、丹尼斯・里奇不想丢掉 Multics 成熟的分时、多用户思路,在小型 PDP-7 主机上重新开发一套轻量化系统,命名Unics(简化版 Multics),后改名为 Unix。

  • Unix 砍掉了 Multics 冗余复杂的功能,但完整继承解决多人共用主机的核心设计:

  • 分时调度:CPU 时间片轮转,多人同时登录一台主机;

  • 完整账号体系:用户、用户组、UID 身份标识;

  • 文件权限隔离:每个人文件独立,他人无法随意查看、删除;

  • 分层目录、Shell 命令解释器、一切皆文件思想。

1991年林纳斯・托瓦兹开发 Linux 时,借鉴并沿用了 Unix 分时调度、多用户权限隔离的设计思想,搭配 GNU 工具软件,形成了如今完整的 Linux 操作系统。

二、认识Linux下的用户

Linux 系统里所有用户的基础信息,都统一记录在 /etc/passwd 这个文件里。我们在终端输入这条命令,就能查看系统里全部用户:

cat /etc/passwd

执行后会输出一长串内容,节选示例如下:

root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin ……teacher:x:1000:1000:teacher:/home/teacher:/bin/bash

文件里一行就对应一个系统账号,每行内容用冒号 : 分成 7 段,每一段都有固定含义。下面以普通用户 teacher 举例,分段含义描述如下:

1、用户名:teacher,登录系统时输入的账号名称;

2、密码占位符 x:这里不会直接存明文密码,加密后的真实密码统一放在另一个文件 /etc/shadow;出现 x,代表这个账号设置过登录密码;

3、UID 用户编号:1000,系统靠这个数字区分用户,不靠名字;

  • 数字 0:专属超级管理员 root;

  • 数字 1~999:各类系统后台账号;

  • 数字 1000 及以上:我们自己创建的普通使用者账号;

4、GID 用户组编号:1000,每个用户默认归属于一个同名用户组,这是组的编号;

5、备注信息:teacher,用来填写姓名、用途等备注,不影响系统运行;

6、家目录:/home/teacher,也就是该用户的专属文件夹,登录系统后默认进入这里;

7、登录 Shell:/bin/bash,用户登录后用来输入命令的交互工具;系统用户这里大多是 /usr/sbin/nologin,代表禁止登录主机。

仔细看输出内容能发现,除了我们自己创建的登录账号 teacher,还有一大堆看不懂名称的账号。这类陌生账号基本都是系统用户,主要给后台服务程序运行使用;而 root 是系统管理员账号,拥有系统里最高的全部操作权限。

三、Linux用户构成

Linux 根据用途、UID 编号与操作权限,将账号分为三类:root超级管理员(也称为超级用户)、系统用户、普通用户。

1.root 超级用户

root用户是特殊的系统用户,用户UID固定为0,它在 Linux 操作系统中拥有最高的权限,不受文件权限、普通用户访问规则限制,可对系统执行任意操作,包括修改核心系统配置、读写所有目录文件、删除系统关键文件、启停任意服务、新增 / 删除账号等高危操作。

它不同于root之外的其它系统用户,这些系统用户仅用于后台程序运行,并默认禁止用户使用这些系统账号登录,权限被严格限制。用户使用root账号可通过本地终端、或者远程登录系统,登录系统具有最高权限,可对系统执行任意操作。

出于安全防护,Linux图形桌面系统不允许用户使用root账号登录,防止日常全程高权限操作误删系统文件。

2.系统用户

系统用户是怎么来的?

Linux 是多用户操作系统,所有进程、文件访问、服务运行都必须依托一个用户身份,这是Linux底层核心安全机制决定的,依靠多用户身份体系实现用户间私有数据隔离、进程风险隔离与分级权限管控。

系统安装完成后,会自动生成一批基础系统用户,用户UID数字为 1~999,用于操作系统底层组件运行,核心常见账号:

root(UID=0):超级管理员,最高权限特殊系统用户,所有系统核心操作都依赖它。

bin(UID=1):系统基础命令归属用户,管理 /bin、/usr/bin 基础程序文件。

daemon(UID=2):通用后台守护进程默认运行用户,早期各类无专属账号的服务统一使用。

sys(UID=3):系统设备、内核相关文件归属账号。

sync(UID=4):数据同步专用用户,执行磁盘同步命令。

mail(UID=8):邮件服务专用系统用户,管理邮件队列 /var/spool/mail。

lp(UID=7):打印服务 CUPS 配套账号。

nobody(UID=65534):最低权限匿名进程用户,用于对外访问类程序,UID 超出 1~999 但仍属于系统用户。

sshd、dbus、polkit、gdm、nginx、mysql(包管理器安装服务时新增):安装对应软件包才会追加,不属于系统预装内置账号。

 3.普通用户

多数 Linux 桌面版安装时会引导创建普通用户并设置登录密码;服务器类 Linux 安装仅配置 root 账号,不会自动生成普通用户,普通用户需安装完成后需手动创建。

每个普通用户都有自己专属的工作目录,也称为家目录,统一存放在 /home/ 目录下,目录名称与用户名保持一致,例如用户名为 user1,则对应的家目录路径为 /home/user1。

家目录是普通用户的专属存储空间,用户在此目录内拥有完整的读、写、执行权限,可以自由新建、修改、删除文件与文件夹;但默认无法随意修改、删除其他用户的家目录文件,也无权修改和编辑系统公共目录内容。

系统登录时会自动将当前会话定位至对应用户的家目录。

 四、普通用户获取root权限

普通用户的权限比较有限,当需要修改系统配置、安装软件、管理硬件、调整服务等特权操作时,会因权限不足无法完成。在这种情况下,可以使用系统提供的su和sudo命令获取管理员权限。

su和sudo是 Linux系统中两种最常用的权限提升方式,核心作用都是获取超级管理员(root)权限,但认证逻辑、权限范围、安全机制、使用场景完全不同。

1.su命令

su命令的全称是switch user,即切换用户,它可以将当前登录用户切换到root或其他可登录的用户账号。

基础语法

su [选项] [用户名]

语法说明

[选项]:可选,用来控制切换后的环境、权限、登录会话。

执行逻辑:切换身份为目标用户,执行时需要输入目标用户的登录密码,验证通过才会切换。 

表  su命令常用参数表

参数
功能说明
-
登录式切换
‌-c
以目标用户身份执行指定的命令,执行完毕后立即退出并恢复原用户身份。
-p
切换用户时不重置环境变量,保留当前用户的环境设置
-s
指定要运行的 shell

示例:

su             # 切换到root,保持当前环境su -            # 切换到root,加载root的完整环境su root         # 明确指定切换到root用户

2.sudo命令

sudo命令的全称是super user do,即超级用户执行,临时授权执行单条命令,不会切换用户身份,依旧登录当前普通用户账号,执行命令时输入当前普通用户的密码。

基础语法

sudo [选项] 要执行的特权命令 [命令参数]

[选项]:可选,用于控制提权方式、运行环境、权限校验。

执行逻辑:临时以管理员身份执行后面单条命令,执行完权限立刻回收。

表 sudo命令常用参数表

参数
功能说明
-l
仅做权限查询,查看当前登录用户被 sudoers 文件授予的所有权限
-i‌
登录式提权,模拟目标用户(默认root)完整登录流程
‌-u
默认sudo提权为root,通过 -u 可指定系统内任意普通用户身份执行命令
-k
sudo默认缓存5分钟密码认证状态,期间重复提权无需输密码,-k 可强制清空缓存,下次执行sudo必须重新输入密码

示例:

sudo apt update          # 更新软件源sudo systemctl restart nginx  # 重启服务sudo ls /root             # 查看root目录文件

在使用 sudo 的时候,输入自己的密码并验证正确之后,sudo 就会以 root 用户的身份,执行后面的命令。

五、用户的添加和删除

用户的添加和删除属于用户管理操作。在Linux系统内,用户管理属于系统级权限操作,修改 /etc/passwd、/etc/shadow、创建家目录、分配 UID/GID 都需要最高权限,普通用户没有读写这些系统文件的权限。

拥有 sudo 授权的普通用户,可通过sudo临时提升至超级系统管理员权限,执行添加、删除其他用户的操作;任意普通用户若已获得 root 密码,可通过su -完整切换至 root 身份,再执行用户增删操作。

1.用户添加命令

基础语法(root执行)

useradd [选项] 用户名

语法说明

[选项]:命令参数,可选,用于控制用户属性、家目录、shell 等。

表 useradd命令常用参数表

参数
功能说明
-m
自动创建用户家目录 /home/ 用户名,日常创建用户必加
-s‌
指定登录解释器,例 -s /bin/bash
-g
指定用户主组(组名 / 组 ID)
-u
手动指定用户 UID 编号
-p
设置加密后的密码(不推荐手动用,优先 passwd)

示例 1:基础创建用户(不带 - m,无家目录)

sudo useradd tom

仅写入系统用户文件,无家目录,无法登录,需后续设密码。

示例 2:日常标准创建(带家目录、bash 登录 shell)

sudo useradd -m -s /bin/bash tom# 设置登录密码sudo passwd tom

示例 3:自定义家目录、指定 UID

sudo useradd -m -s /bin/bash -u 1200 -d /home/mytom tomsudo passwd tom 

2.修改用户登录密码

基础语法(root执行)

passwd [选项] [用户名]

语法说明

[选项]:命令参数,可选。

[用户名]:可选。

无用户名:

  • 普通用户直接执行 passwd:只能修改自己的登录密码,需要先输入当前旧密码校验。

  • root 执行 passwd:默认修改 root 自身密码,无需旧密码。

有用户名:

必须拥有 root /sudo 管理员权限,用来重置其他用户的密码,不用验证对方旧密码。 

表 passwd命令常用参数表

参数
功能说明
-l
锁定用户账号,禁止登录
-u‌
解锁已锁定的用户账号
-d
删除 / 清空用户密码,免密登录
-e
强制用户下次登录时修改密码
-n
设置密码最小使用天数
-x
设置密码最大有效期天数

示例1:普通用户修改自身密码(不加用户名)

passwd

操作:输入旧密码,再两次输入新密码,无管理员权限也可执行。

示例2:管理员重置指定用户密码

sudo passwd tom

无需旧密码,直接设置 tom 的登录密码。

示例3:锁定用户,禁止登录

sudo passwd -l tom

示例4:设置密码有效期(最少 7 天,最多 90 天,过期前 10 天提醒)

sudo passwd -n 7 -x 90 -w 10 tom

3.修改用户的各项属性

基础语法(root执行)

usermod [选项] 用户名

语法说明

[选项]:命令参数,可选。

 表  usermod命令常用参数表

参数
功能说明
-g
修改用户主组
-aG‌
追加用户到附加组(-a 追加,不能省略)
-l
修改登录用户名
-u
修改用户 UID
-L
锁定用户账号
-U
解锁用户账号
-s
修改登录解释器

示例1:修改登录 Shell

sudo usermod -s /bin/bash tom

示例2:更换主组

sudo usermod -g student tom

示例3:修改用户名 tom → tom01

sudo usermod -l tom01 tom

示例4:把 tom 加入 wheel 组

sudo usermod -aG wheel tom

后面内容会讲到用户组,可以使用该命令将用户添加到用户组。

 4.删除用户命令

基础语法(root执行)

userdel [选项] 用户名

语法说明

[选项]:命令参数,可选。

功能说明:删除用户账号,删除 /etc/passwd、/etc/shadow、/etc/group 内该用户记录;带 -r 参数额外删除 /home/用户名 家目录。 

表 userdel命令常用参数表

参数
功能说明
-r
删除用户同时删除家目录、邮件缓存(彻底删除

示例1:仅删除账号,保留家目录文件

sudo userdel tom

示例2:彻底删除用户 + 家目录 + 邮箱(推荐)

sudo userdel -r tom

六、用户组

再讲用户组之前,我们先看一个案例。

某学校机房的 Linux 服务器,有老师账号 teacher,学生账号 stu01、stu02、stu03…… 共 30 名学生。服务器存放统一实训项目目录 /home/train_project,要求:

1、老师拥有完整读写修改权限;

2、所有学生只能查看、编辑本组实训文件,不能删除项目基础文件;

要实现上述要求,需要对老师账号teacher授权实训项目目录的读写权限,分别对每个学生账号授权实训项目目录的查看权限。

那有没有更简便高效的方式,不用逐个对学生账号配置权限,一次设置就能统一管控所有学生的访问权限?

这就需要用到 Linux 的用户组机制。我们可以把所有学生账号归入同一个用户组,只需要对这个用户组统一设置目录权限,组内所有学生自动生效,批量完成授权,大幅简化权限管理工作。

用户组相关操作命令也属于用户管理操作,需要 root 或 sudo 管理员权限执行。

1.新建用户组

基础语法(root执行)

groupadd [选项] 组名

语法说明

[选项]:命令参数,可选。

功能:新建用户组,修改系统组配置文件 /etc/group、/etc/gshadow,需要 root 或 sudo 管理员权限执行。

表 groupadd命令常用参数表

参数
功能说明
-g
手动指定组 ID(GID),数值不能重复
-r‌
创建系统用户组,GID 取值偏小,无过期机制,多用于服务程序
-f
若组已存在不报错,不重复创建,直接退出

示例1:创建普通用户组

sudo groupadd student

示例2:指定 GID 创建组

sudo groupadd -g 1010 teacher

2.删除用户组

基础语法(root执行)

groupdel组名

功能:删除指定的用户组。但不能删除用户的主组:如果有用户将该组设为主组,执行会报错,必须先修改用户主组再删除。

示例1:删除用户组

sudo groupdel student

七、小结

Linux系统将用户分为三类:root超级管理员(UID=0)权限最高,桌面端默认禁止直接登录;系统用户(UID 1~999)用于后台服务运行,禁止登录、权限受限;普通用户(UID≥1000)需手动创建,拥有独立家目录,仅私有目录具备完整权限。

普通用户可通过两种方式提权:su切换用户身份,需输入目标用户密码;sudo临时执行特权命令,输入自身密码,安全性更高。

常用用户管理命令:

1、useradd加-m、-s参数创建合规用户;

2、passwd管理用户密码与账号状态;

3、usermod可修改用户属性、追加附属组,userdel -r可彻底删除用户数据

4、groupadd、groupdel用于组的增删,推荐使用usermod -aG为用户追加附加组,避免覆盖原有用户组权限。

最新文章

随机文章