目录
宝子们!有没有过刚接触 Linux 时,对着满屏命令一脸懵的时刻?比如想新建个用户,输完命令却提示 “权限不够”;或者手滑删了个账号,结果连自己的文件都打不开…… 其实这些 “坑”,本质上都是没搞懂「用户管理」这门课!
别觉得它听起来很 “运维大佬”,其实咱们日常用 Linux,小到给朋友开个 FTP 账号,大到管理公司服务器的员工权限,都得靠它撑场面。毕竟服务器里的文件、服务就像家里的抽屉,总不能谁都能随便翻吧?用户管理就是给每个 “人” 配好专属钥匙,既保证安全,又不耽误干活 —— 今天咱就用唠嗑的方式,把这门课的 “入门密码” 扒得明明白白~
一、用户管理
1.用户与组基础概念
1.1 用户分类及特征
Linux 系统通过用户角色实现权限分层,核心分为三类用户:
-
超级用户(root)
- 唯一标识:UID=0,GID=0
- 权限:系统最高权限,可执行任何操作
- 建议:仅用于系统管理,日常操作使用普通用户
-
普通用户
- 唯一标识:UID 范围在 CentOS 7 中为 1000+,CentOS 6 中为 500+
- 权限:仅限自身宿主目录的完全控制权限
- 管理:需由 root 用户创建
-
程序用户(系统用户)
- 唯一标识:UID 范围在 CentOS 7 中为 1-999,CentOS 6 中为 1-499
- 用途:运行系统服务(如 apache、ftp),不可登录系统
- 特点:随软件安装自动创建,维持服务运行
1.2 组账号体系
组是权限管理的核心单位,分为两种类型:
-
基本组(主组)
- 特性:用户默认所属组,与用户名同名
- 创建:新建用户时自动生成
- 示例:
useradd john会自动创建john组
-
附加组(补充组)
- 特性:用户可加入的额外组,实现权限扩展
- 管理:通过命令添加 / 移除,一个用户可属于多个附加组
- 示例:
usermod -aG ftpusers john将 john 加入 ftpusers 组
1.3 UID 与 GID 机制
- UID(用户标识号):系统识别用户的唯一数字标识
- GID(组标识号):系统识别组的唯一数字标识
- 对应关系:每个用户至少关联一个 GID(基本组),可关联多个 GID(附加组)
2. 用户账号配置文件
2.1 /etc/passwd 文件
存储用户基本信息,格式为:
用户名:密码占位符:UID:GID:描述:宿主目录:登录Shell
- 密码占位符
x表示密码存储在/etc/shadow中 - 示例:
root:x:0:0:root:/root:/bin/bash
UID(0):用户的唯一标识符,用来标识不同的用户,通常 root 用户的 UID 为 0,普通用户的 UID 从 1000 开始(取决于系统配置)。
GID(0):基本组的 ID,通常是该用户的基本组 ID。
用户描述(root):该字段一般用于描述该用户的详细信息,通常为用户的全名或其他说明。
宿主目录(/root):用户登录时的默认工作目录,通常对于 root 用户是 /root,对于普通用户是 /home/用户名。
2.2 /etc/shadow 文件
存储密码及安全信息,格式为:
用户名:加密密码:最后修改时间:最小间隔:最大期限:警告天数:宽限天数:失效时间:保留
例子:root:$6$randomsalt$randomhashedpassword:18821:0:99999:7:::
解释:
root:用户名。
$6$randomsalt$randomhashedpassword:加密后的密码字符串。
18821:上次密码修改的时间,表示自 1970 年 1 月 1 日以来的第 18821 天。
0:最小修改间隔,表示密码可以随时修改。
99999:最大修改间隔,表示密码永不过期。
7:密码过期前的警告天数,提前 7 天提醒用户。
:::密码过期宽限期和账户失效时间为空,表示没有设置相关限制。
2.3 密码策略管理工具 chage
用于设置密码有效期参数:
chage -l 用户名 # 查看当前设置
chage -M 90 用户名 # 设置密码最大有效期90天
chage -E 2024-12-31 用户名 # 设置账户失效日期
chage -d 0 用户名 # 强制下次登录修改密码
[root@localhost ~]# chage -l john
最近一次密码修改时间 :8月 13, 2025
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7
[root@localhost ~]# chage -E 2024-04-29 john #其中,john为用户,用户将在2024年4月29日失效(不可登录)
[root@localhost ~]# chage -d 2024-6-30 john #设置最后一次修改密码的日期为2024年6月30日
[root@localhost ~]# chage -l john
最近一次密码修改时间 :6月 30, 2024
密码过期时间 :8月 29, 2024
密码失效时间 :从不
帐户过期时间 :4月 29, 2024
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :60
在密码过期之前警告的天数 :7
[root@localhost ~]# date -d -u #如果不知道时间可以用date查看
-u:UTC时间
2025年 08月 13日 星期三 00:00:00 CST
3. 用户账号管理命令
3.1 创建用户 useradd
useradd 用户名 # 基本创建
useradd -u 1005 用户名 # 指定UID
useradd -d /home/admin 用户名 # 指定宿主目录
useradd -s /sbin/nologin 用户名 # 禁止登录Shell
useradd -e 2024-12-31 用户名 # 设置失效日期
useradd -g 基本组 -G 附加组1,附加组2 用户名 # 指定组
基本组是用户默认所属的组,通常与用户名相同。每个用户在创建时会自动拥有一个与用户名相同的基本组。在创建用户john时,系统会为用户自动创建与其同名的基本组john
[root@localhost ~]# usermod -aG wheel john
[root@localhost ~]# id john
uid=1003(john) gid=1003(john) 组=1003(john),10(wheel)
#-aG:这是两个选项的组合,-a 表示追加(不覆盖用户已有的所属组),-G 表示指定附加组
wheel:目标用户组名称,在许多 Linux 发行版中,wheel 组是具有 sudo 权限的管理员组
john:要被修改的用户名
## 执行这个命令后,用户 john 将获得 wheel 组的权限,通常意味着可以使用 sudo 命令来执行需要管理员权限的操作。
注意:执行这个命令通常需要 root 权限,所以你可能需要先用 su - 切换到 root 用户,或者在命令前加上 sudo(如果你当前用户已有 sudo 权限)。
[root@localhost ~]# useradd -d /admin -g wheel -G root admin
[root@localhost ~]# id admin
uid=1005(admin) gid=10(wheel) 组=10(wheel),0(root)
#该用户(用户名为admin,UID 为 1005)的主组是wheel(GID 为 10),同时附加组包含root(GID 为 0),这意味着该用户拥有极高的系统权限,可能具备sudo权限甚至直接等同于root用户的权限。
[root@localhost ~]# useradd -e 2025-1-1 -s /sbin/nologin lisa2
[root@localhost ~]# useradd -u 707 lisa3
[root@localhost ~]# tail -2 /etc/passwd
lisa2:x:1006:1006::/home/lisa2:/sbin/nologin
lisa3:x:707:1007::/home/lisa3:/bin/bash
4. 密码管理 passwd
passwd 用户名 # 交互式设置密码
echo "123456" | passwd --stdin 用户名 # 非交互式设置
passwd -l 用户名 # 锁定账户
passwd -u 用户名 # 解锁账户
passwd -d 用户名 # 清空密码
passwd -S 用户名 # 查看状态
[root@localhost ~]# passwd -l lisa
锁定用户 lisa 的密码 。
passwd: 操作成功
[root@localhost ~]# passwd -S
passwd:该选项需要使用用户名称。
[root@localhost ~]# passwd -S lisa
lisa LK 2025-08-13 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# passwd -u lisa
解锁用户 lisa 的密码。
passwd: 警告:未锁定的密码将是空的。
passwd: 不安全的操作(使用 -f 参数强制进行该操作)
[root@localhost ~]# passwd -S lisa
lisa LK 2025-08-13 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# passwd -d lisa
清除用户的密码 lisa。
passwd: 操作成功
[root@localhost ~]# passwd -S lisa
lisa NP 2025-08-13 0 99999 7 -1 (密码为空。)
[root@localhost ~]# echo "123" | passwd --stdin lisa
更改用户 lisa 的密码 。
passwd:所有的身份验证令牌已经成功更新。
5. 修改用户属性 usermod
usermod -l 新用户名 旧用户名 # 修改登录名
usermod -d /new/home 用户名 # 修改宿主目录
usermod -s /bin/sh 用户名 # 修改登录Shell
usermod -g 新基本组 用户名 # 修改基本组
usermod -G 附加组1,组2 用户名 # 设置附加组(覆盖原有)
usermod -aG 附加组 用户名 # 追加附加组
usermod -L 用户名 # 锁定账户
usermod -U 用户名 # 解锁账户
[root@localhost ~]# mv /admin /home/
[root@localhost ~]# usermod -d /home/admin admin
[root@localhost ~]# cat /etc/passwd|grep admin
admin:x:1005:10::/home/admin:/bin/bash
[root@localhost ~]# usermod -L admin
[root@localhost ~]# passwd -S admin
admin LK 2025-08-13 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# usermod -U admin
[root@localhost ~]# usermod -l webmaster admin
[root@localhost ~]# grep "admin" /etc/passwd
webmaster:x:1005:10::/home/admin:/bin/bash
6. 删除用户 userdel
userdel 用户名 # 删除用户
userdel -r 用户名 # 同时删除宿主目录
[root@localhost ~]# id lisa2
uid=1006(lisa2) gid=1006(lisa2) 组=1006(lisa2)
[root@localhost ~]# userdel -r lisa2
[root@localhost ~]# ls -ld /home/lisa2
ls: 无法访问/home/lisa2: 没有那个文件或目录
二、组账号管理命令
2.1 组操作基础命令
groupadd 组名 # 创建组
groupadd -g 1005 组名 # 指定GID创建组
groupdel 组名 # 删除组
2.2 组成员管理 gpasswd
gpasswd -a 用户名 组名 # 添加用户到组
gpasswd -d 用户名 组名 # 从组移除用户
gpasswd -M 用户1,用户2 组名 # 设置组的所有成员
三、 账号信息查询工具
3.1 常用查询命令
| 命令 | 功能 | 示例 |
|---|---|---|
id | 查看用户 UID/GID 信息 | id john |
groups | 查看用户所属组 | groups john |
finger | 查看用户详细信息 | finger john |
w/who/users | 查看当前登录用户 | w |
[root@localhost ~]# id lisa
uid=1004(lisa) gid=1004(lisa) 组=1004(lisa)
[root@localhost ~]# groups lisa
lisa : lisa
四、su命令切换用户
4.1 用途及用法
-
用途:Substitute User,切换用户
-
格式 :su - 目标用户
4.2 密码验证
-
root:任意用户,不验证密码
-
普通用户:”其他用户,验证目标用户的密码
[benet@benet79-2]# su - root 口令: 注:带 - 选项表示将使用目标用户的登录Shell环境 [root@benet79-2 ~]# whoami root
五、文件权限管理
5.1 权限表示方法
- 字符表示:
r(读)=4,w(写)=2,x(执行)=1 - 权限位结构:
属主权限(3 位)+属组权限(3 位)+其他用户权限(3 位) - 示例:
-rwxr-xr--表示:- 属主:读、写、执行(7)
- 属组:读、执行(5)
- 其他:读(4)
5.2 权限修改命令 chmod
chmod u+x 文件名 # 给属主添加执行权限
chmod g-w 文件名 # 从组权限移除写权限
chmod o=r 文件名 # 给其他用户只读权限
chmod 755 文件名 # 数字方式设置权限
chmod -R 755 目录名 # 递归设置目录权限
5.3 设置文件和目录的归属chown
chown命令
-
chown 属主 文件或目录
-
chown :属组 文件或目录
-
chown 属主:属组 文件或目录
常用选项
-
-R:递归修改指定目录下所有文件、子目录的归属
六、sudo机制介绍
通过su命令可以非常方便地切换为另一个用户,但前提条件是必须知道目标用户的登 录密码。例如,若要从zhangsan 用户切换为 root 用户,必须知道 root 用户的密码。对于生产环 境中的 Linux 服务器,每多一个人知道特权密码,其安全风险也就增加一分。 有没有一种折中的办法,既可以让普通用户拥有一部分管理权限,又不需要将 root 用户的密码告诉他呢?答案是肯定的,使用 sudo命令就可以提升执行权限。不过,需要由管理员预先进行授权,指定允许哪些用户以超级用户(或其他普通用户)的身份来执行哪些命令。
etc/sudoers文件的默认权限为440,需使用专门的 visudo 工具进行编辑。虽然也可以用 vi 进行编辑,但保存时必须执行“:w!”命令来强制操作,否则 系统将提示为只读文件而拒绝保存。 配置文件/etc/sudoers 中,授权记录的基本配置格式如下所示。
user MACHINE=COMMANDS
用户 主机 命令
6.2 sudo [参数选项] 命令
-
-l 列出用户在主机上可用的和被禁止的命令;一般配置好/etc/sudoers后,要用这个命令来查看和测试是不是配置正确的;
-
-v 验证用户的时间戳;如果用户运行sudo 后,输入用户的密码后,在短时间内可以不用输入口令来直接进行sudo 操作;用-v 可以跟踪最新的时间戳;
-
-u 指定以以某个用户执行特定操作;
-
-k 删除时间戳,下一个sudo 命令要求用求提供密码;
ifconfig ens33:0 192.168.10.40/24
#授权配置主要包括用户、主机、命令三个部分,即授权哪些人在哪些主机上执行哪些命 令。各部分的具体含义如下。 注:Runas_Alias:在哪些主机以谁的身份运行 的别名 这个不怎么使用
6.3 用户组设置sudo提权
-
用户(user):直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有用户)。
-
主机(MACHINE):使用此配置文件的主机名称。此部分主要是方便在多个主机间共用同一份 sudoers 文件,一般设为 localhost 或者实际的主机名即可。
-
命令(COMMANDS):允许授权的用户通过 sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔。
6.4 案列
6.4.1 案列一
需求:wangliu 用户可以使用useradd usermod(wangliu root用户下的权限 useradd usermod)
配置
# 在visudo编辑界面添加以下配置
Lisa ALL=(root) NOPASSWD:/usr/sbin/useradd, /usr/sbin/usermod
# 配置说明:
# Lisa:被授权的用户账号
# ALL:允许在所有主机上执行命令
# (root):可以root管理员身份运行命令
# NOPASSWD:/usr/sbin/useradd:执行useradd命令时无需输入Lisa的密码
# /usr/sbin/usermod:未加NOPASSWD,执行时需要输入Lisa的密码(默认行为)
# 1. 从root用户切换到Lisa用户
su - Lisa
# 2. 用sudo执行useradd命令创建jerry用户
sudo /usr/sbin/useradd jerry
# 因为配置了NOPASSWD,此处不会提示输入密码(如果提示密码,说明配置有误)
# 3. 查看/etc/passwd文件确认用户创建成功
tail -2 /etc/passwd
# 成功输出示例:
# Lisa:x:1005:1005::/home/Lisa:/bin/bash # Lisa用户自身信息
# jerry:x:1006:1006::/home/jerry:/bin/bash # 新创建的jerry用户信息
# 出现以上内容说明配置生效,Lisa成功创建用户
6.4.2 案列二 用户可以临时创建网卡
visudo
Tom kgc=(root) NOPASSWD:/usr/sbin/ifconfig
验证:
su - Tom
[Tom@kgc root]$ ifconfig ens33:0 192.168.1.11/24
#初次使用sudo时需验证当前用户的密码,默认超时时长为5分钟,在此期间不再重复验证密码。
sudo - l
#查看当前用户获得哪些sudo授权
6.4.3 用户别名案例
当使用相同授权的用户较多,或者授权的命令较多时,可以采用集中定义的别名。用户、 主机、命令部分都可以定义为别名(必须为大写),分别通过关键字User_Alias、Host_Alias、Cmnd_Alias来进行设置。
#查看组下面的用户
grep "wheel" /etc/group
用户别名的语法格式:
(1)User_Alias 用户别名:包含用户、用户组(%组名(使用%引导))、还可以包含其他其他已经用户的别名
User_Alias OPERATORS=zhangsan,tom,lisi,%wheel #组前加,
(2)Host_Alias 主机别名:主机名、IP、网络地址、其他主机别名 !取反
Host_Alias MAILSVRS=smtp,pop
(3)Cmnd_Alias 命令路劲、目录(此目录内的所有命令)、其他事先定义过的命令别名
Cmnd_Alias PKGTOOLS=/bin/rpm,/usr/bin/yum
① 案例一 用户别名
Host_Alias MYHOSTS = kgc,localhost
别名
User_Alias MYUSERS = zhangsan,wangwu,lisi
Cmnd_Alias MYCMNDS = /sbin/*,!/sbin/reboot,!/sbin/poweroff,!/sbin/init,!/usr/bin/rm #*下面都可以运行,!下不可以,!优先级>*
#!是取反的意思
#init 6 重启 into 0 关机
#别名设大写
MYUSERS MYHOSTS=NOPASSWD:MYCMNDS
② 案列二 用户别名
例如,以下操作通过别名方式来添加授权记录,允许用户wangliu、 wangliu组、useradmin组 并且定义命令别名。
在主机 smtp、pop 中执行 rpm、yum 命令
User_Alias USERADMIN = wangliu,%wangliu ,%useradmin
Cmnd_Alias USERADMINCMND =/usr/sbin/useradd,/usr/sbin/usermod,/usr/sbin/userdel,/usr/bin/passwd,!/usr/bin/passwd root #取反的优先级最高
USERADMIN ALL=(root) NOPASSWD: USERADMINCMND
验证别名以及命令路径
注bug
sudo passwd root 测试
最后总结给宝子捋一下哈
Linux 里用户分三类:root(超管大佬)、普通用户(打工人)、程序用户(幕后工具人),组也有基本组(专属小窝)和附加组(临时组队)~
管理用户靠 useradd/usermod,组用 groupadd/groupdel,密码和账号信息藏在 passwd/shadow 文件里。文件权限 rwx(读 / 写 / 执行)像钥匙,chmod/chown 能配钥匙。想让普通用户干管理员活?就用 sudo!visudo 改配置文件,精准授权超安全~
这篇 Linux 用户权限小笔记就到这儿啦~其实这些操作看着多,练个两三遍就能上手!后续不管是管理自己的小服务器,还是处理工作里的账号权限,这些 “基本功” 都超实用~如果宝子们操作时碰到小问题,随时回来翻一翻,或者评论区一起唠唠~喜欢的点赞收藏呦~~



1334

被折叠的 条评论
为什么被折叠?



