【数据库】PostgreSQL增加密码复杂度校验

前言

最近修改问题单,被分配了一个增加密码复杂度校验的单子,PG库也不是很懂,查了资料,PG有自带的密码复杂度校验插件,只需要使用这个插件就可以了,然后根据这几天的折腾,总结一下。

怎么添加密码复杂度校验插件

PostgreSQL可以使用passwordcheck扩展+CrackLib来检查口令,并且 PostgreSQL自带了一个插件passwordcheck可以满足简单的密码复杂度测验, 防止使用过短, 或者与包含用户名的密码。
PG的密码复杂度校验插件所在目录是contrib/passwordcheck,我们可以通过编译安装的时候添加或者是单独编译添加。

  1. 安装编译添加
    使用make world && make install-world 可以把所有插件安装上

  2. 单独编译添加
    PG数据库已经安装完成,但又想再加上校验插件,可以进入到contrib/passwordcheck目录,执行:
    make clean && make && make install
    之后这个插件就安装完成了。

  3. 修改data目录postgresql.conf文件
    找到数据库的data目录(initdb指定的目录),在postgresql.conf文件中找到shared_preload_libraries参数,修改为:
    shared_preload_libraries = 'passwordcheck'
    然后重启数据库,即可,实例:

    cdm=# create user abc password 'abc';
    ERROR:  password is too short
    cdm=# create user abc password 'abc123';
    ERROR:  password is too short
    cdm=# create user abc password 'abc1233453453';
    ERROR:  password must not contain user name
    cdm=# create user abc password 'qweqw1233453453';
    ERROR:  password must contain both letters and nonletters and number
    cdm=#	
    

    如果你不想修改默认配置文件,可以通过alter语句修改系统配置,因为使用alter修改系统配置,会把修改内容保存在postgresql.auth.conf,重启数据库后,pg会优先加载postgresql.auth.conf的配置,再去加载默认配置文件。通过psql脚本执行:

    alter system set shared_preload_libraries = 'passwordcheck';

    然后重启数据库即可。

使用CrackLib+字典做复杂的密码校验

  1. 安装CrackLib以及字典
    yum install -y cracklib-devel cracklib-dicts cracklib,
    安装完成检查rpm包rpm -ql cracklib-dicts

    [root@tmp ~]# rpm -ql cracklib-dicts
    /usr/lib64/cracklib_dict.hwm
    /usr/lib64/cracklib_dict.pwd
    /usr/lib64/cracklib_dict.pwi
    /usr/sbin/mkdict
    /usr/sbin/packer
    /usr/share/cracklib/cracklib-small.hwm
    /usr/share/cracklib/cracklib-small.pwd
    /usr/share/cracklib/cracklib-small.pwi
    /usr/share/cracklib/pw_dict.hwm
    /usr/share/cracklib/pw_dict.pwd
    /usr/share/cracklib/pw_dict.pwi
    	```
    
  2. 下载cracklib-words生成字典
    字典下载地址: cracklib-words-20080507.gz, 然后上传到服务器(有外网的也可以wget)

    mkdir /opt/cracklib-words
    cd /opt/cracklib-words
    gunzip cracklib-words-20080507.gz
    # 如果有自己特殊的密码屏蔽,可以直接输出到cracklib-words-20080507
    echo 'ABC@123' >> cracklib-words-20080507 
    # 生成字典
    create-cracklib-dict -o ./cracklib-dict ./cracklib-words-20080507
    

    最种文件:
    在这里插入图片描述

  3. 修改passwordcheck文件,去除注释,重新编译安装插件

    # 进入passwordcheck目录
    cd /opt/postgresql-10.14/contrib/passwordcheck/
    # 把带注释的两行修改为下面的内容,DCRACKLIB_DICTPATH是你字典的路径
    PG_CPPFLAGS = -DUSE_CRACKLIB '-DCRACKLIB_DICTPATH="/opt/cracklib-words/cracklib-dict"'
    SHLIB_LINK = -lcrack
    # 重新编译+安装改插件
    make clean && make && make install
    

    我是数据库已经安装过了,如果你没有安装过,是第一次安装,那就需要全部重新编译安装。
    安装完后,可以去安装数据库的lib目录下检查是否存在passwordcheck.so
    在这里插入图片描述
    然后重启数据库,我这里的shared_preload_libraries已经设置passwordcheck,如果没有设置看上面的怎么设置即可。或者直接执行alter system set shared_preload_libraries = 'passwordcheck';在重启一次数据库
    效果:

    postgres=# create user tmp password 'ABC@123';
    ERROR:  password is too short
    postgres=# create user tmp password 'zyzzogeton';
    ERROR:  password must contain both letters and nonletters
    postgres=#
    

    这里的zyzzogeton是字典里的一条数据

自定义配置密码复杂度校验

如果有自己需要定义的判断,可以直接修改passwordcheck.c文件,具体修改就是修改下图的位置就可以。修改完在重新编译安装就可以了。

在这里插入图片描述

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
PostgreSQL 数据库中,密码复杂度密码检查插件控制。要查看密码检查插件及其相关配置,可以按照以下步骤进行操作: 1. 打开 PostgreSQL 数据库的命令行界面。 2. 输入以下命令,连接到要查询的数据库: ``` \c your_database_name ``` 其中,'your_database_name' 是你要查询的数据库名称。 3. 输入以下命令,查看密码检查插件及其相关配置: ``` SELECT name, setting FROM pg_settings WHERE category = 'Authentication / Password'; ``` 这个命令将返回密码检查插件及其相关配置的列表。其中,name 列包含插件名称,setting 列包含插件的当前设置值。 4. 查看名为 password_check 的插件的设置值,确定密码复杂度要求: ``` SELECT name, setting FROM pg_settings WHERE name = 'password_check'; ``` 这个命令将返回 password_check 插件的设置值。如果设置值为“on”,则表示密码复杂度要求已启用。如果设置值为“off”,则表示密码复杂度要求已禁用。 如果密码复杂度要求已启用,可以通过查看插件的其他设置值来确定密码复杂度的要求。例如,password_min_length 设置表示密码的最小长度,password_min_digits 设置表示密码中必须包含的数字数量,password_min_uppercase 设置表示密码中必须包含的大写字母数量等。 注意:在确定密码复杂度要求时,还应该考虑其他因素,例如密码的历史记录、密码过期时间等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值