用户管理
用户管理
[TOC]
01.开机启动流程

📌 面试题:
-
开机BIOS自检
- 硬件是否有问题
- 磁盘、CPU、内存、主板、电源
- 下面有详细介绍
-
MBR引导
- 引导系统启动磁盘
-
GRUB引导菜单
- 选择进入的模式
- 选择内核
-
加载内核
-
启动运行systemd进程
- 第一个进程
-
读取init运行级别
- 3 # 表示完全多用户模式、系统默认的模式
- 5 # 表示桌面模式
-
系统初始化过程
- 网络
- 自动挂载
- 主机名
- 并行启动, 各种服务
- 定时任务、ssh服务…
-
运行getty, 显示登录界面
开机BIOS自检(检查硬件)
服务器出问题最多的硬件:(想象成自己的笔记本)
-
磁盘
(1)第一种情况:保质期内 一般是3年
- 联系服务器或者磁盘的售后人员 告诉他们我们公司、磁盘坏了几块、约他们一起去机房
- 约定时间明天下午2点半
- 约IDC机房、说我们xx公司明天下午2点半有几个人去换硬件 携带身份证
(2)第二种情况:过保
- 问领导合作的厂家还是直接购买
- 自己约IDC机房
- 自己去自己更换
-
内存
一般不会坏 开机无法正常启动、很多情况都是因为内存不兼容导致的 重新插拔内存、擦拭内存
可能有一些灰尘, 和静电
-
CPU
-
主板
-
电源
02.用户的分类
🔐 UID 与权限等级说明
| 用户类型 | UID 范围 | 权限说明 |
|---|---|---|
| root(管理员) | 0 | 拥有系统的最高权限 |
| 系统/傀儡用户 | 1 - 999 | 这些是系统服务运行所需的用户 |
| 普通用户 | 1000+ | 由系统管理员创建的真实用户账户 |
- 上面都是系统默认的用户ID范围, 但其实我们自己进行创建的时候可以随意创建
- 我们创建普通用户的UID范围也可以是1-999
- 自己创建虚拟用户UID是1000+也没问题
📌 /etc/passwd 详解
passwd文件中以冒号分隔每列的含义
- /etc/passwd # 用户信息
- /etc/shadow # 密码文件
[root@oldboyedu ~]# cat /etc/passwdroot:x:0:0:root:/root:/bin/bash# 以冒号分隔,共7列第一列:用户名称
第二列:密码用x展示

- 真正的密码在/etc/shadow

第三列:用户的UID号
第四列:用户的小组的号GID
- 组id没有什么意义
- 见下面的详细解释
第五列:描述、可以没有
第六列:家目录的位置
第七列:命令解释器
- /bin/bash 可以登录系统
- /sbin/nologin 不允许登录操作系统的用户为虚拟用户
在Linux中,所属用户组,没什么意义,我们基本不动属组,我们动的最多的就是属主,主人对它有什么权限,那么这个文件就拥有什么权限 因为所属组和其他用户,往往权限一样,都是只读,只能看
在Linux系统中创建一个用户对应默认创建一个组 组的名称是以用户名命名的 比如创建了一个用户为oldboy、系统会自动创建oldboy命名一个小组,这个小组中只有一个用户,它是oldboy
📌 规范一点的创建用户流程就是: ① 创建属组,并指定组ID ② 创建用户,并指定它的用户ID,和组ID
03.创建用户
useradd
创建用户
语法结构:
useradd 参数选项 用户名称参数选项:
| 参数 | 含义 |
|---|---|
-u | 指定UID号码 |
-g | 指定GID号码 |
-s | 指定解释器,默认是/bin/bash,可以指定/sbin/nologin # 不能登录, 用于虚拟用户 |
-M | 不创建家目录 虚拟用户 不加-M默认创建家目录 /home/oldboy |
-d | 指定创建家目录 |
-G | 添加附加组 了解,一个人属于多个组,没有意义! |
| ⚠️ 每次只能创建1个用户 |
🌰 批量创建用户:
# awk输出方式[root@oldboyedu ~]# echo test{01..10} | xargs -n1 | awk '{print "useradd "$1}'useradd test01useradd test02# ...共10个'批量生成useradd命令'
# sed后向引用方式[root@oldboyedu ~]# echo test{01..10} | xargs -n1 | sed -nr 's#(.*)#useradd \1#gp'useradd test01useradd test02# ...共10个'sed后向引用同样可以实现'普通用户创建
案例.创建普通用户oldboy
- uid和gid都是默认的
- 默认uid和gid往后排
[root@oldboyedu ~]# useradd oldboy# 创建普通用户,uid和gid自动分配案例.创建用户test01指定uid为666,不指定gid则往后排
- 我们企业中创建一般指定相同的uid和gid
[root@oldboyedu ~]# useradd -u666 test01# 指定uid为666[root@oldboyedu ~]# id test01uid=666(test01) gid=1002(test01) groups=1002(test01)# uid=666是我们指定的,gid=1002是自动往后排的[root@oldboyedu ~]# grep test01 /etc/passwdtest01:x:666:1002::/home/test01:/bin/bash# 确认passwd中的记录这个用户有家目录,而且能够登录
同时指定-u -g
案例.创建普通用户test02指定uid为777、gid为777
[root@oldboyedu ~]# useradd -u888 -g888 test02useradd: group '888' does not exist# ❌ 提示888这个小组是不存在的# ⚠️ 指定-g参数、指定用户属于哪个小组、这个小组必须提前存在的# 如果不指定-g参数、系统会默认创建一个小组- 这个小组只有它自己
/etc/group
查看组名和对应的组id

- 通常组名要和用户名保持一致
- 所以我们通常先创建一个组,再去创建用户
- 这样组id和用户id也保持一致
# 创建gid为888的小组名称叫test02[root@oldboyedu ~]# groupadd -g888 test02'这个组名也为test02'# ✅ 组创建成功
# ⚠️ groupadd一次只能创建一个组[root@oldboyedu ~]# useradd -u888 -g888 test02# 现在可以成功创建了,因为888组已存在[root@oldboyedu ~]# id test02uid=888(test02) gid=888(test02) groups=888(test02)# uid和gid都为我们指定的888[root@oldboyedu ~]# grep test02 /etc/passwdtest02:x:888:888::/home/test02:/bin/bash# passwd中确认uid和gid均为888usermod
修改用户信息 了解
usermod -c "New Name" 用户名 # 修改注释usermod -u 2000 用户名 # 修改 uidusermod -g 999 用户名 # 修改 gidusermod -L 用户名 # 锁定账户usermod -U 用户名 # 解锁账户选项同上,很少用.在创建用户的时候,我们就能够创建好了
- 不如直接userdel -r 删了,重新创建一个
- -M 家目录信息,没有办法进行修改! 创建了就是创建了
[root@oldboyedu ~]# tail -4 /etc/passwdtest01:x:666:1002::/home/test01:/bin/bashtest02:x:888:888::/home/test02:/bin/bashtest03:x:1002:1003::/home/test03:/sbin/nologintest04:x:778:778::/home/test04:/sbin/nologin# 当前4个用户
[root@oldboyedu ~]# usermod -c hehe test04# 修改test04的描述信息为hehe[root@oldboyedu ~]# tail -4 /etc/passwdtest01:x:666:1002::/home/test01:/bin/bashtest02:x:888:888::/home/test02:/bin/bashtest03:x:1002:1003::/home/test03:/sbin/nologintest04:x:778:778:hehe:/home/test04:/sbin/nologin# 第5列出现了hehe
[root@oldboyedu ~]# usermod -s /bin/bash test04# 修改test04的登录shell为/bin/bash[root@oldboyedu ~]# tail -4 /etc/passwdtest01:x:666:1002::/home/test01:/bin/bashtest02:x:888:888::/home/test02:/bin/bashtest03:x:1002:1003::/home/test03:/sbin/nologintest04:x:778:778:hehe:/home/test04:/bin/bash# 第7列变成了/bin/bash,可以登录了虚拟用户创建
- 无法登陆
-s /sbin/nologin - 没有家目录
-M
案例.创建一个虚拟用户test03
[root@oldboyedu ~]# useradd -s /sbin/nologin -M test03'没有指定组id也没有指定用户id'[root@oldboyedu ~]# id test03uid=1002(test03) gid=1003(test03) groups=1003(test03)# uid和gid自动分配[root@oldboyedu ~]# grep test03 /etc/passwdtest03:x:1002:1003::/home/test03:/sbin/nologin# 虽然显示/home/test03, 但实际/home路径下没有test03这个目录'因为-M不创建家目录'案例.指定uid和gid为778的虚拟用户test04
[root@oldboyedu ~]# groupadd -g778 test04# 先创建组,gid=778[root@oldboyedu ~]# useradd -u778 -g778 -s /sbin/nologin -M test04# 相比上面无非是多了组id和用户id'因为指定了组id, 所以需要先去创建这个组'[root@oldboyedu ~]# id test04uid=778(test04) gid=778(test04) groups=778(test04)[root@oldboyedu ~]# grep test04 /etc/passwdtest04:x:778:778::/home/test04:/sbin/nologin# uid和gid均为778标准创建(企业版)
(1)创建组ID
为了后面用户可以指定组ID
groupadd -g 199 www# -g GID:指定组的数字ID(Group ID)# 组名:要创建的用户组名称(2)查看组信息
cat /etc/group | grep [groupname]# 或getent group [groupname](3)创建虚拟用户并指定用户id和组id
- 这里指定的是组名,原理是一样的
这样当我们创建用户的时候, 就可以指定组名了
useradd -u 199 -g www -s /sbin/nologin -M www# 作用:创建名为www的系统用户(通常用于服务运行,如 Nginx/Apache)# -u:指定用户的 UID(用户唯一标识),这里设置为199(需确保未被占用)# -g:指定用户的属组为www(必须是已存在的组,所以先执行groupadd)# ⚠️ 指定的 GID 必须是已存在的组 ID,否则会报错# -g是指定主组,若要添加附加组,需用-G选项(同样支持组名或 GID)# -s:指定用户的登录 Shell,/sbin/nologin表示禁止该用户登录系统(仅作为服务运行身份)# -M:不创建用户的家目录(默认会生成/home/www,此选项用于系统用户节省空间)# www:要创建的用户名
# 删除该用户userdel -r www # -r选项会删除家目录和邮箱文件(4)验证

删除用户
语法结构:
userdel -r 用户名称 # 删除用户所有相关的信息⚠️ -r选项会删除家目录和邮箱文件
案例.删除test01用户
[root@oldboyedu ~]# userdel -r test01# 没有任何提示就是删除成功了案例.删除test03虚拟用户
[root@oldboyedu ~]# userdel -r test03userdel: test03 home directory (/home/test03) not found# 虚拟用户, 没有家目录,提示找不到家目录!04.用户相关命令
查询用户相关命令
[root@Rocky ~]# getentgetent: wrong number of argumentsTry `getent --help' or `getent --usage' for more information.[root@Rocky ~]# getent passwdroot:x:0:0:Super User:/root:/bin/bashbin:x:1:1:bin:/bin:/usr/sbin/nologindaemon:x:2:2:daemon:/sbin:/usr/sbin/nologinadm:x:3:4:adm:/var/adm:/usr/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/usr/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/usr/sbin/nologinoperator:x:11:0:operator:/root:/usr/sbin/nologingames:x:12:100:games:/usr/games:/usr/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/usr/sbin/nologinnobody:x:65534:65534:Kernel Overflow User:/:/usr/sbin/nologintss:x:59:59:Account used for TPM access:/:/usr/sbin/nologinsystemd-oom:x:999:999:systemd Userspace OOM Killer:/:/sbin/nologindbus:x:81:81:System Message Bus:/:/usr/sbin/nologinsssd:x:998:998:User for sssd:/run/sssd/:/sbin/nologinsshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/usr/sbin/nologinchrony:x:997:997:chrony system user:/var/lib/chrony:/sbin/nologinsystemd-coredump:x:996:996:systemd Core Dumper:/:/usr/sbin/nologinnginx:x:995:995:nginx user:/var/cache/nginx:/sbin/nologinwww:x:888:888::/home/www:/sbin/nologin[root@Rocky ~]# getent grouproot:x:0:bin:x:1:daemon:x:2:sys:x:3:adm:x:4:tty:x:5:disk:x:6:lp:x:7:mem:x:8:kmem:x:9:wheel:x:10:cdrom:x:11:mail:x:12:man:x:15:dialout:x:18:floppy:x:19:games:x:20:tape:x:33:video:x:39:ftp:x:50:lock:x:54:audio:x:63:users:x:100:clock:x:103:nobody:x:65534:tss:x:59:utmp:x:22:utempter:x:35:systemd-oom:x:999:input:x:104:kvm:x:36:render:x:105:sgx:x:106:systemd-journal:x:190:dbus:x:81:sssd:x:998:sshd:x:74:chrony:x:997:systemd-coredump:x:996:nginx:x:995:www:x:888:chown
chown 是 “change owner” 的缩写 owner = 主人 chown 命令用于更改文件或目录的属主(owner)和属组(group)
chmod 是 “change mode” 的缩写 mode = 权限模式 chmod 命令用于更改文件或目录的权限模式(mode)
语法结构:
chown oldboy:oldboy 1.txt- 只有root管理员可以使用这个命令
-R递归修改所有目录和文件的属主属组
案例.使用root用户在/home/oldboy家里面创建a.txt
# 第一步:root创建文件[root@oldboyedu ~]# touch /home/oldboy/a.txt[root@oldboyedu ~]# ll /home/oldboy/a.txt-rw-r--r-- 1 root root 0 Nov 12 15:28 /home/oldboy/a.txt# 属主属组都是root
# 第二步:使用oldboy登录用户测试写入[oldboy@oldboyedu ~]$ echo abc >> a.txt-bash: a.txt: Permission denied# ❌ 权限拒绝!oldboy不是文件属主
# 第三步:将a.txt属主和属组修改为oldboy[root@oldboyedu ~]# chown oldboy:oldboy /home/oldboy/a.txt[root@oldboyedu ~]# ll /home/oldboy/a.txt-rw-r--r-- 1 oldboy oldboy 7 Nov 12 15:30 /home/oldboy/a.txt# ✅ 现在属主属组都是oldboy
# 第四步:再次测试通过oldboy用户修改a.txt[oldboy@oldboyedu ~]$ echo abc >> a.txt[oldboy@oldboyedu ~]$ cat a.txtaaaaaaabc# ✅ 写入成功!案例.修改目录及目录下所有目录及文件属主属组为oldboy
[root@oldboyedu ~]# chown -R oldboy:oldboy /data/# -R 递归修改[root@oldboyedu ~]# ll /data/total 4-rw-r--r-- 1 oldboy oldboy 4 Nov 12 14:56 1.txtdrwxr-xr-x 2 oldboy oldboy 23 Nov 12 14:56 bbsdrwxr-xr-x 2 oldboy oldboy 6 Nov 12 14:56 blogdrwxr-xr-x 2 oldboy oldboy 20 Nov 12 14:57 www# ✅ 目录和文件都是oldboy了id 用户名
查看用户名ID 和组ID
[root@oldboyedu ~]# id oldboyuid=1001(oldboy) gid=1001(oldboy) groups=1001(oldboy)# 只创建了这个用户,系统会自动创建oldboy命名一个小组'这个小组中只有一个用户,它是oldboy'查看passwd中oldboy用户的信息
[root@oldboyedu ~]# grep oldboy /etc/passwdoldboy:x:1001:1001::/home/oldboy:/bin/bashid查看不存在的用户
[root@test ~]# id hhhid: hhh: no such user# 这个用户不存在whoami
查看当前用户的名字
- 也可以获取当前的用户名
[root@test ~]# whoamiroot[heima@test ~]$ whoamiheimaw
- 也可以用来查看负载
- w的第一行等于uptime命令
- 查询谁登陆了系统,并且正在干啥
- tty终端是本地登录, pts是远程连接
- -bash表示没事干,空闲,没有执行命令
- pts/0 远程第一个用户

[heima@test ~]$ ww: 52 column window is too narrow# 窗口太小,展示不开!Kylin v10版

- 没有FROM
- 我们可以用last或者lastlog去查看
last
- 查看远程用户的来源IP地址
- 登录时间, 退出时间, 总共运行的时间
- 每登录一次, 就会重新记录
- lastlog是每个用户的最后登录时间
- 先把每个用户列出来,再显示最后的登录时间
- lastlog是每个用户的最后登录时间

云服务器案例

- 我们都是在公司去远程连接服务器
- 通过NAT技术,将我们的私网,转换为公网IP
- 假设我们公司的公网ip为1.2.3.4
- 我们在远程服务器上last查看来源IP地址就是1.2.3.4
- 如果出现别的IP地址11.22.33.44 那么就肯定是异常登录

- 未来操作的云服务器
- 这个FROM源IP就是自己当前位置的公网
本地服务器案例

- 通过vmnet8,连接我们的虚拟机
- 我们在自己电脑上操作,就是10.0.0.1也就是Vmnet8这张网卡的IP地址

查看出口公网IP
(1)Windows查看出口公网IP地址:百度输入ip回车

(2)Linux查看出口公网IP地址:curl ip.sb 或者 curl cip.cc

- 如果我在我的阿里云服务器上查看,当然是不同的了

lastlog
- 显示每个用户最后登录的时间
- 先把每个用户列出来,再显示最后的登录时间
- last是每登陆一次, 就进行记录
- lastlog没有登出时间


05.切换提权
/etc/skel/
所有新用户的家目录模版
📌 创建用户的流程:
(1)使用命令useradd oldboy用户
(2)系统创建家目录/home/oldboy
(3)系统会将/etc/skel目录下隐藏文件复制一份到/home/oldboy目录下
(4)将移动过去的文件属主属组修改为oldboy

故障复现:

- 然后执行rm -rf /*

- 或者可以执行rm -rf ./.*

-bash-4.2$

- 这个报错,以前的Centos会有吧!
- 我现在是复现不出来了,可能做了补丁
恢复方法:
这个故障的主要原因就是, 你把自己家目录的隐藏文件都删除了,特别是那两个环境变量
- .bashrc
- .bash_profile
- PS1命令提示符不能用了
- 命令能用, 就是显示的不舒服罢了
每个用户的家目录下都有上面那两个变量文件,如果误删了两个文件从/etc/skel/目录下拷贝过来!
- 需root权限
cp /etc/skel/.* /home/oldboy/- 隐藏文件都出现了说明都恢复好了

👑 切换用户(su)
语法结构:
su - 用户名称-更新路径、更新变量- root切换普通用户不需要密码
- 普通用户切换到root需要密码
- 普通用户切换到普通用户需要密码(如果不设置密码无法切换)
- 当你创建完用户后,别忘记设置密码
- 虚拟用户除外, 它不用登录
su - 用户名 -c "command"# 以目标用户执行单条命令后返回'无需密码!!'# 用于快速验证用户权限
[root@Rocky10 ~]# id aliceuid=1001(alice) gid=1002(alice) groups=1002(alice),1001(dev)[root@Rocky10 ~]# su - alice -c "touch ~/test.sh"# 以alice身份执行touch命令案例.root用户切换普通用户test01
[root@oldboyedu ~]# su - test01Last login: Wed Nov 12 10:47:05 CST 2025 from 10.0.0.1 on pts/1# 切换普通用户不需要密码[test01@oldboyedu ~]$# $开头 = 普通用户案例.test01切换到test02
[test01@oldboyedu ~]$ su - test02Password:# 需要test02的密码案例.test01用户切换root用户
[test01@oldboyedu ~]$ su - rootPassword:# 需要root的密码案例.当前的test01是由root用户切换过来的、我们还可以直接退回到root用户
[test01@oldboyedu ~]$ exitlogout[root@oldboyedu ~]## #开头 = root用户
- exit是一层一层的进行退出的
[root@oldboyedu ~]# su - test01Last login: Wed Nov 12 11:19:00 CST 2025 on pts/0[test01@oldboyedu ~]$ su - test02Password:Last login: Wed Nov 12 10:32:06 CST 2025 on pts/0[test02@oldboyedu ~]$[test02@oldboyedu ~]$ su - rootPassword:Last login: Wed Nov 12 09:35:30 CST 2025 from 10.0.0.1 on pts/0[root@oldboyedu ~]#[root@oldboyedu ~]# exitlogout# 退到test02[test02@oldboyedu ~]$ exitlogout# 退到test01[test01@oldboyedu ~]$ exitlogout# 退到root[root@oldboyedu ~]#'一层一层退出'📌 企业中使用用户的方式
(1)以自己的账号登录系统 zhangsan
(2)使用su方式切换到root管理系统
(3)部分公司直接用root管理系统、管理业务(不推荐使用)
sudo提权
企业中登录系统都使用普通用户登录! 只有运维有root的权限
工作过程中开发人员偶尔可能会用一些命令 但他们是普通用户,处处受限,这些命令只有在家目录拥有权限
从而出现了sudo提权功能!
- 以管理员root身份运行
- sudo创建的文件中属主是root
- 这条命令成为了root执行的了
需求:开发人员使用cat命令查看系统日志!
创建用户
[root@oldboyedu ~]# useradd oldboy[root@oldboyedu ~]# echo test123.com|passwd --stdin oldboyChanging password for user oldboy.passwd: all authentication tokens updated successfully.# ✅ 用户创建并设置密码第一步: 打开两个窗口
第一个窗口:root登录
[root@oldboyedu ~]#第二个窗口:oldboy登录
普通用户
[root@oldboyedu ~]# su - oldboyLast login: Thu Nov 13 09:06:00 CST 2025 on pts/0[oldboy@oldboyedu ~]$第二步: oldboy普通用户执行cat命令查看日志
[oldboy@oldboyedu ~]$ cat /var/log/messagescat: /var/log/messages: Permission denied# ❌ 现在oldboy用户还没有cat命令的root权限# 只能在自己的家目录玩耍sudo -l
普通用户查看是否拥有sudo权限
[oldboy@oldboyedu ~]$ sudo -l[sudo] password for oldboy: # 输入oldboy的密码Sorry, user oldboy may not run sudo on oldboy.# ❌ 这里我们没有设置oldboy的sudo权限第三步: 给oldboy用户进行授权
- 切管理员root登录
查看cat的绝对路径
[root@oldboyedu ~]# which cat/usr/bin/cat# /bin/cat 也是可以的[root@oldboyedu ~]# visudo# 有语法检测功能# 只有配置正确才能让你出来# 推荐使用visudo# 实际相当于编辑的就是/etc/sudoers或者使用
vim /etc/sudoers编辑完成保存退出
...用户名 不动它 命令位置(which查看)oldboy ALL=(ALL) /usr/bin/cat下面有详细的授权方式介绍!
# visudo -c可以进行校验,编辑的是否正确!![root@localhost ~]# visudo -c/etc/sudoers: parsed OK# ✅ 校验通过!第四步: 切换oldboy普通用户
查看拥有sudo权限
[oldboy@oldboyedu ~]$ sudo -l[sudo] password for oldboy: # 输入oldboy的密码User oldboy may run the following commands on oldboyedu: (ALL) /usr/bin/cat # 拥有一个cat命令的root权限# ✅ sudo权限已生效
[oldboy@oldboyedu ~]$ sudo cat /var/log/messages# ✅ 使用sudo命令执行cat# 别忘了加sudo'oldboy用户以管理员身份运行'visudo授权方式
(1)授权单个命令
oldboy ALL=(ALL) /usr/bin/cat(2)授权多个命令
逗号隔开
oldboy ALL=(ALL) /usr/bin/cat,/usr/bin/touch(3)授权所有命令
oldboy ALL=(ALL) ALL# 当oldboy用户获得所有权限后, sudo su - 就相当于管理员root执行 su -# oldboy用户通过sudo提权方式执行su命令 切换root[oldboy@oldboyedu ~]$ sudo su -Last login: Thu Nov 13 09:48:26 CST 2025 on pts/1[root@oldboyedu ~]## ✅ 以root身份登录(4)普通用户使用sudo相关命令时不需要输入个人密码
oldboy ALL=(ALL) NOPASSWD: ALLNOPASSWD和命令部分是连在一起的!!!
(5)对ALL进行取反
oldboy ALL=(ALL) NOPASSWD: ALL,!/usr/bin/su,!/usr/bin/vim!取反 ,逗号进行多个命令分割 所有命令都能执行,但su不能执行,vim不能执行
06.密码管理
交互式修改密码
语法格式:
passwd- 直接回车 修改当前登录用户的密码
passwd 用户名- 指定修改哪个用户的密码
- 只有root管理员才能指定用户
passwd -l 用户名 # 锁定账户(Lock)passwd -u 用户名 # 解锁账户(Unlock)passwd -d 用户名 # 删除密码(无密码登录,危险)案例.修改root的密码
[root@oldboyedu ~]# passwdChanging password for user root.New password: # 输入的是test123.comRetype new password: # 再输入一次密码 test123.compasswd: all authentication tokens updated successfully.# ✅ 密码更新修改成功案例.修改test01用户的密码为oldboy123.com
[root@oldboyedu ~]# passwd test01# 指定修改某个用户的密码Changing password for user test01.New password:Retype new password:passwd: all authentication tokens updated successfully.# ✅ 密码修改成功常见修改密码的报错信息
[root@oldboy ~]# passwd oldboyChanging password for user oldboy.New password:BAD PASSWORD: The password is shorter than 8 characterspasswd: Authentication token manipulation error# ❌ 密码太短,少于8个字符
[root@oldboy ~]# passwd oldboyChanging password for user oldboy.New password: oldboy123.com # 包含用户名oldboyBAD PASSWORD: The password contains the user name in some formpasswd: Authentication token manipulation error# ❌ 密码包含用户名🧣 非交互式
语法结构:
echo '密码' | passwd --stdin 用户名- 这个密码尽量用单引号包括起来
- 必须掌握这种方式
- 原样输出
案例.修改用户test01的密码为test123.com
[root@oldboyedu ~]# echo 'test123.com' | passwd --stdin test01# 并不包含用户名test01Changing password for user test01.passwd: all authentication tokens updated successfully.# ✅ 非交互式修改密码成功❗chage
# 查看当前策略chage -l 用户名
# 设置策略chage -M 90 用户名 # 密码最长有效期(天)chage -m 7 用户名 # 密码最短有效期(天,防止频繁修改)chage -W 7 用户名 # 密码过期前警告天数(Warning)chage -I 30 用户名 # 密码过期后宽限天数(-1 表示无限制)chage -d 0 用户名 # 强制下次登录修改密码# 可以用于强制下次登录修改密码!!!'看这个强制修改密码的!!!'
# 密码策略要求:密码最长有效期90天,提前7天警告,过期后30天内仍可登录[root@localhost ~]# id lisiuid=1002(lisi) gid=1501(developers) groups=1501(developers)[root@localhost home]# tail -1 /etc/passwdlisi:x:1002:1501::/home/lisi:/bin/bash[root@localhost home]# chage -M 90 -W 7 -I 30 lisi# 设置lisi用户的密码策略[root@localhost home]# chage -l lisiLast password change : Mar 04, 2026Password expires : Jun 02, 2026Password inactive : Jul 02, 2026Account expires : neverMinimum number of days between password change : 0Maximum number of days between password change : 90Number of days of warning before password expires : 7# ✅ 策略已生效:最长90天,提前7天警告,过期后30天宽限Xshell会话
Xshell已经保存了我们的用户名和密码了
- 保存在Windows本地
- 只要把会话发给你
- 黏贴到自己目录下
- 你的会话就有了这些东西了
C:\Users\LENOVO\Documents\NetSarang Computer\6\Xshell\Sessions复制它们发给宿主机B黏贴到主机B的相同位置主机B就有了一样的会话了双击打开就能使用了无需用户名和密码!
复杂密码设置
(1)要求复杂度
(公网服务器)
- 通过命令行设置复杂密码
I*<>a{m]|`li!z@h%e$-n+ya<.+I?am_18手动设置一个非常难的密码
[root@oldboyedu ~]# echo 'I*<>a{m]|`li!z@h%e$-n+ya<.+I?am_18' | passwd --stdin test02# 通过echo管道设置复杂密码- 通过命令生成
pwgen
[root@oldboyedu ~]# yum -y install pwgen[root@oldboyedu ~]# pwgen -s -y 18 1v&GpUjeT0,"/mD[LLz# ✅ -s:生成安全(secure)的随机密码# ✅ -y:包含至少一个特殊字符(symbols)# ✅ 18:密码长度为 18 个字符# ✅ 1:只生成 1 个密码- 通过工具生成
⚠️ 生成一个复杂的密码 不要太复杂,你的Xshell不识别!!!
(2)密码管理工具
(公司通过文档、LDAP)
🧣 MD5校验
- 根据文件内容生成特定的MD5值
- 内容变化则MD5会变
语法格式:
md5sum 文件名md5sum -c 校验文件- OK 匹配成功
- FAILED 匹配失败
md5sum --quiet 校验文件同理如果我修改了一处地方,那么肯定验证不通过.—quiet 只显示错误的部分

[root@oldboyedu ~]# echo aa > 1.txt[root@oldboyedu ~]# md5sum 1.txtd404401c8c6495b206fc35c95e55a6d5 1.txt[root@oldboyedu ~]# md5sum 1.txtd404401c8c6495b206fc35c95e55a6d5 1.txt# 没有改变内容,MD5值没有发生改变
[root@oldboyedu ~]# echo bb >> 1.txt# 修改文件内容[root@oldboyedu ~]# md5sum 1.txt9e0186db9525655612e39dd2921b4e8a 1.txt# 改变内容后,MD5值发生改变-c校验
[root@oldboyedu ~]# md5sum 1.txt > md5.log# 将生成md5结果放到md5.log中[root@oldboyedu ~]# cat md5.log9e0186db9525655612e39dd2921b4e8a 1.txt
[root@oldboyedu ~]# md5sum -c md5.log1.txt: OK# ✅ 直接使用命令检查文件是否被修改
[root@oldboyedu ~]# echo cc >> 1.txt# 模拟修改文件内容[root@oldboyedu ~]# md5sum -c md5.log1.txt: FAILEDmd5sum: WARNING: 1 computed checksum did NOT match# ❌ 再重新检测文件是否被修改
(1)先去找log文件中的原文件1.txt 重新生成一个MD5值
(2)拿这个值和log文件中的MD5值作对比
一定能找到这个原文件1.txt吗???
因为当前目录下有这个1.txt自然是能找到的,如果换个新的目录就不一定能找到了!
- 认识到相对路径的局限性!
- 可能找不到原文件, 也无法重新生成MD5值
- 自然也无法校验
- 把md5值写入校验文件时
- 主要是这个原文件1.txt, 使用绝对路径
[root@oldboyedu ~]# md5sum /root/1.txt > /opt/md5.log# ✅ 使用绝对路径![root@oldboyedu ~]# cat /opt/md5.log91ab632491c73ba1e0414196f9f98f63 /root/1.txt# 记录的是绝对路径
[root@oldboyedu ~]# md5sum -c /opt/md5.log/root/1.txt: OK# 当前目录下校验,OK
[root@oldboyedu ~]# cd /tmp/[root@oldboyedu tmp]# md5sum -c /opt/md5.log/root/1.txt: OK# 切换到其他目录再校验,仍然OK!# ✅ 使用绝对路径后,无论在哪里都能找到原文件综合案例
将/data目录下所有的文件做md5值写入到/opt/md5.log
准备环境
[root@oldboyedu ~]# mkdir -p ./data/{www,blog,bbs}[root@oldboyedu ~]# tree ./data//data/├── bbs├── blog└── www3 directories, 0 files
[root@oldboyedu ~]# echo 123 > ./data/1.txt[root@oldboyedu ~]# echo www.oldoy.com > ./data/bbs/index.txt[root@oldboyedu ~]# echo www.oldoy.com > ./data/www/1.html[root@oldboyedu ~]# tree ./data/./data/├── 1.txt├── bbs│ └── index.txt├── blog└── www └── 1.html# ✅ 环境准备完毕第一步: 给所有的文件做md5值
[root@oldboyedu ~]# find /home/data -type f | xargs md5sum59e6650d2b2466dc854193d138dc1831 /home/data/www/1.html59e6650d2b2466dc854193d138dc1831 /home/data/bbs/index.txtba1f2511fc30423bdbb183fe33f3dd0f /home/data/1.txt# find 找的时候一定要使用绝对路径 /home/data# 这样找到的文件就会自动带上这个前缀了第二步: 写入到文件中
[root@oldboyedu ~]# find /home/data -type f | xargs md5sum > /opt/md5.log# 覆盖写入第三步: 检测
[root@oldboy home]# md5sum -c /opt/md5.log/home/data/www/1.html: OK/home/data/bbs/index.txt: OK/home/data/1.txt: OK# ✅ 全部校验通过第四步: 模拟篡改
[root@oldboyedu ~]# echo aaa >> /home/data/www/1.html# 模拟修改文件[root@oldboyedu ~]# md5sum -c /opt/md5.log/home/data/www/1.html: FAILED/home/data/bbs/index.txt: OK/home/data/1.txt: OKmd5sum: WARNING: 1 computed checksum did NOT match# ❌ 被篡改的1.html校验失败,其他文件正常文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!




