问题描述
CentOS7上面运行的项目,在用户管理添加新用户时,密码设置成Aa12345@时,会报Cannot read property 'message' of undefined的错误
在/etc/pam.d下的common-password文件中
password [success ok] pam_cracklib.so rejectusername minlen=8 difok=3 ucredit=0 lcredit=0 dcredit=0 ocredit=0
inline int pamUpdatePassword(const std::string& username, const std::string& password)
{
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-const-cast)
const struct pam_conv localConversation = {pamFunctionConversation,const_cast<char*>(password.c_str())};
pam_handle_t* localAuthHandle = nullptr; // this gets set by pam_start
int retval = pam_start("webserver", username.c_str(), &localConversation, &localAuthHandle);
if (retval != PAM_SUCCESS)
{
return retval;
}
retval = pam_chauthtok(localAuthHandle, PAM_SILENT);
if (retval != PAM_SUCCESS)
{
pam_end(localAuthHandle, PAM_SUCCESS);
return retval;
}
return pam_end(localAuthHandle, PAM_SUCCESS);
}
密码设置成Aa12345@时,pam_chauthtok()函数返回PAM_AUTHTOK_ERR,如果密码设置成Bji230309@时,返回PAM_SUCCESS(正常的),为什么将密码设置成Aa12345@不行,大家有遇到过嘛?
这可能是由于密码复杂度检查的策略导致的。很多Linux系统默认会启用密码复杂度检查策略,以加强密码的安全性。这种策略会要求密码必须包含数字、小写字母、大写字母和特殊字符等多种元素,并且要求密码长度必须达到一定的标准。如果密码不符合这些要求,就会被认为是过于简单的密码,会被系统拒绝。
在你的情况中,密码“Aa12345@”在密码复杂度检查中可能被认为不符合要求,因为它只包含一种大小写字母、一个数字和一个特殊字符,长度为9个字符。而密码“Bji230309@”包含了不同的大小写字母、数字和特殊字符,并且长度为11个字符。因此,它符合复杂度检查策略,可以被成功设置为密码。
如果你想设置“Aa12345@”作为密码,可以尝试调整系统的密码复杂度检查策略以满足这个密码,或者你可以调整密码为更加复杂或者较长的密码。