Linux服务器只能查看用户名,不能查看密码,密码以不可逆加密形式存储在系统中,任何正规渠道都无法逆向还原,本文详细拆解查看用户名的方法、密码不可见的原因,以及忘记密码后如何重置的全流程操作。
linux服务器查看用户名和密码,先分清两件完全不同的事
很多刚接触服务器运维的人,看到”查看用户名和密码”这个需求,会默认以为两者都能像翻通讯录一样查出来,Linux系统把这两个信息完全分开处理。用户名是明文存储的公共信息,密码是加密存储的私密信息,前者随时可以读取,后者连root用户都只能看到密文。
查看用户名,本质上就是读取系统的用户数据库文件。/etc/passwd这个文件记录了所有本地账号的用户名、UID、主目录、默认shell等信息,而密码信息存放在/etc/shadow文件中,里面存的是经过加密算法处理后的哈希值。
hash是不可逆的单向过程,业内专家指出,哪怕你把/etc/shadow文件完整抄下来,也无法反推出原始密码明文,这就像把鸡蛋煎成熟蛋,你没法通过熟蛋变回生鸡蛋,凡是从技术角度告诉你”能查看密码”的方案,要么是骗人的,要么是木马程序。
linux查看所有用户列表命令,几条命令各有特点
cat /etc/passwd是最直接的查看方式
这是最常用、最通俗的命令,执行后输出每一行代表一个用户,用冒号分隔为七个字段。
cat /etc/passwd
输出长这样:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
字段含义依次是:用户名、密码占位符、UID、GID、注释信息、主目录、登录shell,看到第二列是”x”,说明密码被隐藏到了/etc/shadow文件中,这正是系统安全机制发挥作用的地方。
getent passwd命令更灵活也更能排除干扰
getent支持后续接NSS模块,兼容性比cat更好,如果你的服务器接入了LDAP或AD域,getent能一并显示远程用户。
getent passwd
多数情况下,这个命令在普通单机服务器上和cat输出完全一致,区别在于,cat读取的是本地文件,getent读取的是系统数据库接口,更标准也更推荐。
awk命令快速提取用户名列表
如果你只想要纯用户名,不想看那些冒号和路径,用awk切分字段最简单。
awk -F: '{print $1}' /etc/passwd
这样输出就是一列干干净净的用户名,配合其他工具可以批量处理,比如统计用户数量:
awk -F: '{print $1}' /etc/passwd | wc -l
数据多的时候,把输出重定向到文件再慢慢筛选,丝毫不影响线上业务。
只查看当前登录用户的命令组合
很多时候你不需要全部用户,只需要知道当前用哪个账号登录了服务器,this时候用以下命令:
whoami输出当前用户名
id显示当前用户的UID和GID以及所属组
who显示当前登录系统的所有会话
w显示操作系统时每位登录用户和其负载情况
last查看历史登录记录
某些场景下需要确认自己有没有权限做某项操作,groups命令能显示当前用户所在的所有组,组决定了权限边界,比用户名本身更有参考价值。
linux服务器忘记密码怎么办,重置流程比找回更靠谱
密码不可查看,但忘记密码依然有官方通道可走,重置密码不需要知道旧密码,只需有物理或远程控制台的访问权限,不同发行版进入单用户模式的手段不同,以下是最常见的两种。
CentOS / RHEL系统的rd.break重置法
适用于CentOS 7、CentOS 8、RHEL系列版本,步骤如下:
- 重启服务器,在GRUB引导菜单界面按
e键进入编辑模式 - 找到以
linux开头的行,在末尾追加rd.break参数 - 按
Ctrl + x启动进入紧急模式 - 执行
mount -o remount,rw /sysroot,把根目录挂载为可写 - 执行
chroot /sysroot切换环境 - 执行
passwd root输入两遍新密码 - 执行
touch /.autorelabel触发SELinux重新标记 - 输入
exit退出chroot,再输入exit重启系统
整个过程大概三分钟,操作完重新登录即可用新密码,整个过程中不需要旧密码的参与,所以也不存在”找密码”的环节。
Ubuntu / Debian系统的recovery模式
Ubuntu服务器重置密码操作路线略有不同:
- 重启并按住
Shift键进入GRUB菜单 - 选择
Advanced options for Ubuntu - 选择
recovery mode - 在恢复菜单里选择
root进入root shell - 执行
mount -o remount,rw /让根分区可写 - 执行
passwd ubuntu(换成你的实际用户名) - 重启用新密码登录
Ubuntu 18.04以后的版本同样有效,这套流程在企业服务器运维手册中是标准操作,行业共识认为掌握进入恢复模式是每个运维的基本功。
单用户模式init=/bin/bash方案
这个方法适用范围广,几乎所有systemd时代的发行版都支持,编辑GRUB引导时,在linux行末尾追加init=/bin/bash,系统启动后直接进入bash环境,注意需要手动挂载根文件系统:
mount -o remount,rw /
之后再执行passwd即可,这个方法在无systemd的老版本系统上同样能跑通,属于兼容性最强的兜底方案。
密码文件有什么秘密,为什么密码无法查看
/etc/shadow文件的格式解释
理解了shadow文件的构成,你就彻底明白密码为什么查不了。
root:$6$KFQ5bSaO$h3eO4xN...:19265:0:99999:7:::
第一段是用户名,第二段是加密后的密码哈希,你看到分隔符$6$表示采用SHA-512算法,$1$是MD5,$5$是SHA-256,$y$是新的yescrypt算法。
哈希值本身没有规律,同一密码在不同服务器上加密结果都不同,因为加入了随机salt,这就意味着即使两台服务器密码相同,shadow文件里的密文也不一样,攻击者无法通过比对密文来猜测你的密码,管理员也没有任何常规工具能解开哈希。
修改密码的正规入口
忘记密码之外,日常更换密码用passwd命令即可。
passwd修改当前用户密码
sudo passwd root修改root用户密码
sudo passwd username修改指定用户密码
chage命令管理密码过期策略,比如强制用户定期改密:
sudo chage -M 90 username
这条命令设置该用户密码最长有效期90天,到期后系统强制其更新密码,等服务器数量多了,密码轮换靠手工逐台操作效率太低,可以借助Ansible批量下发,也可以用JumpServer这类堡垒机做统一账号生命周期管理。
日常运维中怎么管理服务器密码不容易忘,有哪些能落地的办法
与其等忘了再重置,不如日常就把密码管理做扎实,以下方案按团队规模和服务器数量做区分,你可以按需选用。
小规模场景:密码管理器加SSH密钥
两三台服务器的团队,用KeePass或Bitwarden这类密码管理器集中存放密码即可,同时强烈建议开启SSH密钥登录,公钥在线、私钥离线保存,服务器上压根不存密码明文,从根源上杜绝密码泄露。
ssh-keygen -t ed25519 -C "your_email"ssh-copy-id user@server_ip
执行这两条命令即可把本机公钥分发到服务器上,之后登录不需要再输入密码。
中大规模场景:统一认证和堡垒机
服务器数量超过十台,建议上跳板机或堡垒机做集中管理,管理员不直接登录服务器,而是先登录堡垒机,再由堡垒机托管账号密码或密钥连接目标主机,审计日志记录所有操作命令,谁登录过、执行了什么、何时登出一目了然,国内政府、银行和大型企业多数采用这个方案,规范性和安全性兼顾。
其他容易忽略的防护习惯
- 禁用root直接SSH登录,改用普通用户加sudo提权可大幅降低暴力破解风险
- 修改SSH默认端口,由22改为高位端口,减少扫描攻击面
- 配置fail2ban自动封禁多次密码错误来源IP
- 定期检查/etc/shadow的权限,必须为只有root可读(权限600),系统默认如此,但偶尔有配置异常的情况
Q&A:linux服务器查看用户名和密码常见问题解答
为什么要查密码时总是显示一串看不懂的字符?
因为Linux存储的本身就是加密后的哈希值,设计上就不支持反向解密,你看不懂的那串字符正是密码经过SHA-512等算法加盐运算后的结结果,系统校验密码时,把你输入的明文用同样算法和salt计算一次,再和存储值对比,相同则验证通过,这个设计保证了即使数据库泄露,密码也无法还原。
查看用户名后误删了账号怎么恢复?
误删用户后恢复难度较高,因为用户UID和文件归属关系已断裂,如果删的是普通账号,用useradd重新创建同名账号并把原目录主UID改回来:
sudo useradd -m -u 1001 usernamesudo chown -R 1001:1001 /home/username
如果系统还没有重启,直接编辑/etc/passwd和/etc/group把对应行加回去更快,切记操作前备份这两个文件以及/etc/shadow。
linux服务器查看用户名和密码的权限要求是什么?
查看用户名不需要特殊权限,每个账户都可以读/etc/passwd,查看/etc/shadow文件则必须root权限,普通用户执行cat /etc/shadow会被拒绝,修改任何用户密码都必须root权限,普通用户只能修改自己的密码,云服务器环境(如简米云、酷番云)中重置密码有两条路径,一条是控制台内的重置实例密码功能,一条是登录系统后执行passwd命令,两条路径作用相同,控制台方式常用于不记得密码或无法登录的情况。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/790586.html


