在Linux系统管理中,有时候需要设置账号密码复杂度(长度)、密码过期策略等,这个主要是由/etc/login.defs参数文件中的一些参数控制的的。它主要用于用户账号限制,里面的参数主要有下面一些: /etc/login.defs

PASS_MAX_DAYS 60 #密码最大有效期,此处参数PASS_MAX_DAYS为60,表示60天后,密码会过期。99999表示永不过期。 PASS_MIN_DAYS 0 #两次修改密码的最小间隔时间,0表示可以随时修改账号密码 PASS_MIN_LEN 8 #密码最小长度,对于root无效 PASS_WARN_AGE 7 #密码过期前多少天开始提示 UID_MIN #用户ID的最小值 UID_MAX #用户ID的最大值 GID_MIN #组ID最小值 GID_MAX #组ID最大值 USERDEL_CMD #默认注释状态,如果定义了该变量,表示当删除一个user时,应删除/打印/ cron的工作等所拥有的用户被删除(作为第一个参数传递)。 CREATE_HOME #表示是否创建用户home目录 UMASK #权限掩码初始化值 USERGROUPS_ENAB #该参数启用,表示userdel删除用户时,如果该用户用户组如果没有成员存在,则会删除该用户组 ENCRYPT_METHOD MD5 #表示用户密码加密方式,此处表示用MD5加密密码 案例一:密码过期

warning:your password has expired

chage命令是用来修改帐号和密码的有效期限 chage -l user #列出该账户当前的设置 chage -d 2029-02-11 ravi #将该账户的密码失效日期延迟到2029-02-11

案例二:账户过期

chage -E 2029-02-11 ravi #将该账户的账户失效日期延迟到2029-02-11 chage -I -1 ravi #传递-1参数会移除账户的不活动属性 案例三:passwd: Authentication token manipulation error

因为该账户被锁定:

可以通过如下方法锁定: usermod -L username passwd -l user #passwd -l will lock account by prefixing the encrypted string with an '!' 解锁用户:

usermod -U user passwd -u testuser #passwd -u will unlock the account password by removing the ! prefix 使用以下命令修改密码:

su - testuser

$ passwd Changing password for user testuser. Changing password for testuser (current) UNIX password: New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully. 还有一种情况是缺少账户信息:

/etc/passwd or /etc/shadow 缺少信息

1.检查一下/etc/passwd or /etc/shadow

是否该账户的信息完全

2.如果用户的家目录有效,但是缺少shadow文件,可重建该用户

getent passwd user #查看用户的密码信息 getent shadow user #查看用户的账户信息 userdel user #删除该用户(不会删除家目录) useradd -u 503 -g 503 -d /home/testuser/ testuser #再重建该用户,指定UID和gid passwd testuser #重建密码 账户信息检查:

1.pwck命令用来验证系统认证文件/etc/passwd和/etc/shadow的内容和格式的完整性

pwck 2.检查这些文件的旗标

lsattr -d /etc

lsattr -l /etc/shadow

lsattr -l /etc/passwd

3.检查passwd的权限

ls -l /usr/bin/passwd

4.如果passwd权限有误,可以这样恢复

rpm --setperms passwd

which passwd | xargs chmod u+s

5.关闭selinux

setenforce 0 6.检查/etc/shadow的selinux context

ls -Z /etc/shadow 7.检查/etc/passwd /etc/shadow 的完整性

getent passwd user #查看用户的密码信息 getent shadow user #查看用户的账户信息 8.检查pam模块

重点检查system-auth password-auth