【数据库】PostgreSQL增加密码复杂度校验
前言
最近修改问题单,被分配了一个增加密码复杂度校验的单子,PG库也不是很懂,查了资料,PG有自带的密码复杂度校验插件,只需要使用这个插件就可以了,然后根据这几天的折腾,总结一下。
怎么添加密码复杂度校验插件
PostgreSQL可以使用passwordcheck扩展+CrackLib来检查口令,并且 PostgreSQL自带了一个插件passwordcheck可以满足简单的密码复杂度测验, 防止使用过短, 或者与包含用户名的密码。
PG的密码复杂度校验插件所在目录是contrib/passwordcheck
,我们可以通过编译安装的时候添加或者是单独编译添加。
-
安装编译添加
使用make world && make install-world
可以把所有插件安装上 -
单独编译添加
PG数据库已经安装完成,但又想再加上校验插件,可以进入到contrib/passwordcheck
目录,执行:
make clean && make && make install
之后这个插件就安装完成了。 -
修改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+字典做复杂的密码校验
-
安装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 ```
-
下载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
最种文件:
-
修改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
文件,具体修改就是修改下图的位置就可以。修改完在重新编译安装就可以了。
- 点赞
- 收藏
- 关注作者
评论(0)