linux密码不以明文传输或存储,防护重点在于构建完整防护链:输入时通过pam内存哈希校验、存储用sha-512哈希存于/etc/shadow、远程登录仅限ssh加密通道、强制90天更换与5次历史密码限制、推荐ed25519密钥替代密码。

Linux 账户密码本身从不以明文形式传输或存储,这是系统安全设计的基本前提。真正需要关注的是:如何确保密码在输入、验证、网络传输和长期存储环节不被泄露或滥用。关键不在“加密密码”,而在构建完整的防护链。
密码输入与本地验证环节
用户在终端或图形界面输入密码时,系统调用 PAM(Pluggable Authentication Modules)模块进行校验。此时密码不会写入磁盘或日志,仅在内存中做一次哈希比对。
- 系统只保存密码的单向哈希值(如 SHA-512),存于 /etc/shadow,普通用户不可读
- 禁止将密码写入命令历史(避免
echo "pwd" | passwd类操作) - 启用
pam_pwquality强制复杂度:最小长度 12、至少三类字符、禁止重复字符
远程登录时的密码传输保护
密码绝不能通过 Telnet、FTP 或 HTTP 等明文协议传输。唯一推荐方式是 SSH 协议下的交互式认证。
- SSH 登录时,密码在客户端输入后,由 SSH 客户端加密打包,经 TLS/SSH 加密通道传至服务端,服务端再交由 PAM 验证
- 禁用 SSH 的 PasswordAuthentication(改用密钥登录)可彻底规避密码传输风险
- 若必须用密码,确保
/etc/ssh/sshd_config中设置PermitEmptyPasswords no和MaxAuthTries 3
密码存储策略与生命周期管理
哈希值虽已加密,但需配合策略防止被暴力破解或长期暴露。
- 用
chage -M 90 username设置密码最长使用 90 天,到期强制更新 - 在
/etc/security/pwquality.conf中设remember = 5,阻止重用最近 5 次旧密码 - 定期轮换 root 密码,并禁用 root 远程登录(
PermitRootLogin no)
替代方案:用密钥代替密码
对频繁访问服务器的场景,公私钥机制比密码更安全、更高效。
- 生成密钥对:
ssh-keygen -t ed25519 -C "admin@company" - 部署公钥:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server - 服务端关闭密码登录后,攻击者即使截获网络流量也无法还原私钥











