CentOS7上面运行的项目,在用户管理添加新用户时,密码设置成Aa12345@,报错?

问题描述

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@不行,大家有遇到过嘛?

阅读 2.7k
1 个回答

出现这个问题的原因应该是密码的安全策略,根据楼主的问题描述(楼主的问题描述很完善,点个赞!),出现“Cannot read property 'message' of undefined”是因为密码复杂度不够强造成的,在/etc/pam.d/common-password文件中,您使用了pam_cracklib.so模块来限制用户密码的复杂度。
图片.png
pam_cracklib.so这个模块的作用是检查密码长度、是否包含数字、大小写字母和特殊字符等要求。如果密码不符合这些要求,则会拒绝修改或者创建新密码。你可以尝试将其修改为更加复杂一些的密码,并且确保满足上述条件,看看能否解决问题。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题