假设你和你的朋友、同学共用一台电脑,也就是几个人共同使用一台电脑。你们都会想到一个问题:我的个人数据如何不被其他人看到、修改甚至删除。
实际上,这个问题很容易解决,不管你用的是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 这个文件里。我们在终端输入这条命令,就能查看系统里全部用户:
执行后会输出一长串内容,节选示例如下:
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,系统靠这个数字区分用户,不靠名字;
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命令常用参数表
| |
| |
| 以目标用户身份执行指定的命令,执行完毕后立即退出并恢复原用户身份。 |
| |
| |
示例:
su # 切换到root,保持当前环境su - # 切换到root,加载root的完整环境su root # 明确指定切换到root用户
2.sudo命令
sudo命令的全称是super user do,即超级用户执行,临时授权执行单条命令,不会切换用户身份,依旧登录当前普通用户账号,执行命令时输入当前普通用户的密码。
基础语法
sudo [选项] 要执行的特权命令 [命令参数]
[选项]:可选,用于控制提权方式、运行环境、权限校验。
执行逻辑:临时以管理员身份执行后面单条命令,执行完权限立刻回收。
表 sudo命令常用参数表
| |
| 仅做权限查询,查看当前登录用户被 sudoers 文件授予的所有权限 |
| 登录式提权,模拟目标用户(默认root)完整登录流程 |
| 默认sudo提权为root,通过 -u 可指定系统内任意普通用户身份执行命令 |
| 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命令常用参数表
| |
| 自动创建用户家目录 /home/ 用户名,日常创建用户必加 |
| |
| |
| |
| 设置加密后的密码(不推荐手动用,优先 passwd) |
示例 1:基础创建用户(不带 - m,无家目录)
仅写入系统用户文件,无家目录,无法登录,需后续设密码。
示例 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 [选项] [用户名]
语法说明
[选项]:命令参数,可选。
[用户名]:可选。
无用户名:
有用户名:
必须拥有 root /sudo 管理员权限,用来重置其他用户的密码,不用验证对方旧密码。
表 passwd命令常用参数表
示例1:普通用户修改自身密码(不加用户名)
操作:输入旧密码,再两次输入新密码,无管理员权限也可执行。
示例2:管理员重置指定用户密码
无需旧密码,直接设置 tom 的登录密码。
示例3:锁定用户,禁止登录
示例4:设置密码有效期(最少 7 天,最多 90 天,过期前 10 天提醒)
sudo passwd -n 7 -x 90 -w 10 tom
3.修改用户的各项属性
基础语法(root执行)
usermod [选项] 用户名
语法说明
[选项]:命令参数,可选。
表 usermod命令常用参数表
示例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命令常用参数表
示例1:仅删除账号,保留家目录文件
示例2:彻底删除用户 + 家目录 + 邮箱(推荐)
六、用户组
再讲用户组之前,我们先看一个案例。
某学校机房的 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命令常用参数表
| |
| |
| 创建系统用户组,GID 取值偏小,无过期机制,多用于服务程序 |
| |
示例1:创建普通用户组
示例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为用户追加附加组,避免覆盖原有用户组权限。