Linux系统下,用户口令是保障系统安全的核心屏障,合理设置和管理用户口令能有效防止未授权访问,本文将详细介绍Linux系统中设置用户口令的多种方法、密码策略配置及常见场景处理,帮助用户全面掌握口令管理技能。
基础口令设置命令
使用passwd
命令修改/设置口令
passwd
是Linux中最常用的口令管理工具,普通用户可用于修改自身口令,root用户可修改任意用户口令。
-
普通用户修改自身口令
执行passwd
命令后,系统会提示输入当前口令(验证身份),然后要求输入新口令两次(确认输入),新口令需满足系统默认的复杂度要求(如长度、字符类型),若不符合会提示重新输入。$ passwd Changing password for user username. Current password: New password: Retype new password: passwd: password updated successfully
-
root用户修改其他用户口令
root用户可直接为指定用户设置口令,无需输入该用户当前口令,且可绕过复杂度检查(不推荐,存在安全风险)。# sudo passwd username(普通用户通过sudo执行) # passwd username(root用户直接执行) New password: Retype new password: passwd: password updated successfully
-
passwd
命令常用选项
| 选项 | 作用 |
|——|——|
|-l
| 锁定用户口令,禁止用户登录(如passwd -l username
) |
|-u
| 解锁用户口令(如passwd -u username
) |
|-d
| 删除用户口令,用户无需口令即可登录(仅限临时场景,不推荐) |
|-e
| 强制用户下次登录时修改口令(如passwd -e username
) |
|-S
| 显示用户口令状态(如是否锁定、过期时间等,passwd -S username
) |
使用useradd
/usermod
命令创建用户时设置口令
-
创建用户并直接设置口令
useradd
命令的-p
选项可在创建用户时直接指定口令,但需注意:-p
后接的是加密后的口令(明文口令会被直接作为字符串存储,存在安全风险),推荐通过openssl
或mkpasswd
工具生成加密口令:# 使用openssl生成SHA-512加密口令(默认加密方式) useradd -p "$(openssl passwd -6 明文密码)" username # 使用mkpasswd生成加密口令(需安装whois包:apt install whois/yum install whois) useradd -p "$(mkpasswd 明文密码)" username
-
为已存在用户设置口令
使用usermod
命令的-p
选项可为现有用户修改口令,同样需传入加密口令:usermod -p "$(openssl passwd -6 新密码)" username
高级密码策略配置
默认情况下,Linux系统对口令复杂度和有效期要求较宽松,生产环境中需通过系统级配置强化安全性。
通过/etc/login.defs
配置全局策略
该文件定义了用户创建时的默认口令策略,参数对后续创建的用户生效(已存在用户需单独修改),常用参数:
| 参数 | 作用 | 默认值 |
|——|——|——–|
| PASS_MAX_DAYS
| 口令有效期(天) | 99999(永不过期) |
| PASS_MIN_DAYS
| 修改口令最小间隔天数(防止频繁修改) | 0 |
| PASS_MIN_LEN
| 口令最小长度(若为0,则由pam_cracklib模块控制) | 8(部分系统为0) |
| PASS_WARN_AGE
| 口令过期前警告天数(提前提醒用户修改) | 7 |
示例:修改/etc/login.defs
,设置口令每90天过期,最少间隔7天可修改,提前14天警告:
PASS_MAX_DAYS 90 PASS_MIN_DAYS 7 PASS_WARN_AGE 14
通过/etc/pam.d/passwd
强化复杂度
pam_cracklib
模块可强制口令包含复杂字符(大小写字母、数字、特殊符号),配置文件为/etc/pam.d/passwd
(不同发行版可能为/etc/pam.d/common-password
),示例配置:
password requisite pam_cracklib.so minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 retry=3
参数说明:
minlen=8
:口令最小长度8位;ucredit=-1
:至少包含1个大写字母(-1
表示“至少1个”,-2
表示至少2个,以此类推);lcredit=-1
:至少包含1个小写字母;dcredit=-1
:至少包含1个数字;ocredit=-1
:至少包含1个特殊字符(如!@#$%^&*
);retry=3
:允许输错口令的次数。
若需禁止使用常见弱口令(如“123456”“password”),可添加pam_pwquality
模块(需安装libpwquality
包):
password requisite pam_pwquality.so minlen=8 maxrepeat=3 maxclassrepeat=3 reject_username
maxrepeat=3
:相同字符连续出现不超过3次;maxclassrepeat=3
:同一类字符(如大写字母)连续出现不超过3次;reject_username
:禁止口令中包含用户名。
使用chage
命令管理口令有效期
chage
命令可修改用户口令策略(针对已存在用户),常用选项:
| 选项 | 作用 |
|——|——|
| -m
| 修改口令最小间隔天数 |
| -M
| 修改口令最大有效期(天) |
| -W
| 修改口令过期前警告天数 |
| -I
| 修改口令过期后锁定天数(用户未修改口令则锁定) |
| -E
| 设置账号过期日期(格式YYYY-MM-DD) |
| -d
| 修改上次口令修改时间(用于强制用户下次登录改口令) |
示例:设置用户test
的口令每60天过期,最少间隔10天可修改,提前7天警告,过期后5天锁定:
chage -m 10 -M 60 -W 7 -I 5 test
强制用户test
下次登录时修改口令:
chage -d 0 test
常见场景处理
忘记root口令如何重置?
-
CentOS/RHEL系统:
- 重启系统,在GRUB启动界面按
e
键进入编辑模式; - 找到
linux16
或linuxefi
行,在行尾添加rd.break
,按Ctrl+X
启动; - 系统进入紧急模式,执行
mount -o remount,rw /sysroot
,切换到chroot
环境:chroot /sysroot
; - 使用
passwd
修改root口令,执行touch /.autorelabel
( SELinux系统需重新标记文件,否则可能无法登录); - 执行
exit
,输入reboot
重启系统。
- 重启系统,在GRUB启动界面按
-
Ubuntu/Debian系统:
- 重启系统,在GRUB界面长按
Shift
(若未显示GRUB,可修改/etc/default/grub
中的GRUB_HIDDEN_TIMEOUT=0
为GRUB_HIDDEN_TIMEOUT=5
并更新GRUB); - 选择Advanced options,进入Recovery模式,选择“root Drop to root shell prompt”;
- 执行
mount -o remount,rw /
,使用passwd
修改root口令,输入reboot
。
- 重启系统,在GRUB界面长按
批量设置用户口令
通过chpasswd
命令可从文件批量读取用户名和口令(格式:用户名:口令
),实现批量设置,示例:
- 创建密码文件
passwd.txt
(确保文件权限为600,避免泄露):echo "user1:password1" > passwd.txt echo "user2:password2" >> passwd.txt chmod 600 passwd.txt
- 使用
chpasswd
批量导入:chpasswd < passwd.txt
若口令为加密格式,需添加
-e
选项:chpasswd -e < passwd.txt
。
注意事项
- 避免弱口令:口令应包含12位以上字符,组合大小写字母、数字、特殊符号,避免使用生日、姓名等常见信息。
- 定期更换口令:生产环境中建议通过
PASS_MAX_DAYS
设置口令有效期(如90天),结合chage
命令定期提醒用户修改。 - 加密存储:Linux口令存储在
/etc/shadow
文件中,采用SHA-512加密(默认),禁止手动修改该文件,需通过passwd
/usermod
等命令操作。 - 权限控制:普通用户仅能修改自身口令,root用户拥有最高权限,建议通过
sudo
分配管理权限,避免直接使用root账号日常操作。
相关问答FAQs
Q1:Linux系统提示“Authentication token manipulation error”是什么原因?如何解决?
A:该错误通常是由于/etc/shadow
文件权限不正确导致的(正常应为000,仅root可读写),解决方法:执行chmod 000 /etc/shadow
(错误操作需先恢复权限:chmod 600 /etc/shadow
),然后检查文件是否有异常字符或损坏,必要时从备份恢复。
Q2:如何禁止用户通过SSH使用口令登录,改用密钥认证?
A:编辑SSH配置文件/etc/ssh/sshd_config
,将PasswordAuthentication yes
修改为PasswordAuthentication no
,保存后重启SSH服务:systemctl restart sshd
,同时确保用户已上传公钥至~/.ssh/authorized_keys
文件(权限需为600),这样用户只能通过私钥登录,无法使用口令,提升安全性。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/31769.html