当前位置:   article > 正文

PostgreSQL中如何实现密码复杂度检查?

postgresql安装完还可以增加密码复杂度校验

墨墨导读:PostgreSQL使用passwordcheck扩展通过CrackLib来检查口令。

数据技术嘉年华,十周年盛大开启,点我立即报名大会以“自研·智能·新基建——云和数据促创新 生态融合新十年” 为主题,相邀数据英雄,总结过往十年历程与成绩,展望未来十年趋势与目标!

PostgreSQL使用passwordcheck扩展通过CrackLib来检查口令 PostgreSQL自带了一个插件passwordcheck可以满足简单的密码复杂度测验, 防止使用过短, 或者与包含用户名的密码,只需要把$libdir/passwordcheck加入到postgresql.confshared_preload_libraries参数中,然后重启服务器即可,只要通过CREATE ROLEALTER ROLE设置用户,passwordcheck模块就会检查用户的口令,如下:

  1. postgres=# create role test password 'Test#2020';
  2. CREATE ROLE
  3. postgres=# alter role test password 'test#2020';
  4. ERROR:  password must not contain user name
  5. postgres=# alter role test password 'tes12020';
  6. ALTER ROLE
  7. postgres=# alter role test password '2020';
  8. ERROR:  password is too short
  9. postgres=# alter role test password '2020abc';
  10. ERROR:  password is too short
  11. postgres=# alter role test password '2020abcd';
  12. ALTER ROLE
  13. postgres=# alter role test password '12345678';
  14. ERROR:  password must contain both letters and nonletters
  15. postgres=# alter role test password '';
  16. ERROR:  password is too short
  17. postgres=# alter role test password 'abcdffgh';
  18. ERROR:  password must contain both letters and nonletters

如果需要实现更复杂的密码检查, 可以让passwordcheck使用CrackLib来检查口令。安装过程如下:

  1. 安装cracklib以及字典

yum install -y cracklib-devel cracklib-dicts cracklib
  1. 检查安装

  1. # rpm -ql cracklib-dicts
  2. /usr/lib64/cracklib_dict.hwm
  3. /usr/lib64/cracklib_dict.pwd
  4. /usr/lib64/cracklib_dict.pwi
  5. /usr/sbin/mkdict
  6. /usr/sbin/packer
  7. /usr/share/cracklib
  8. /usr/share/cracklib/cracklib-small.hwm
  9. /usr/share/cracklib/cracklib-small.pwd
  10. /usr/share/cracklib/cracklib-small.pwi
  11. /usr/share/cracklib/pw_dict.hwm
  12. /usr/share/cracklib/pw_dict.pwd
  13. /usr/share/cracklib/pw_dict.pwi
  1. 如果需要自己配置生成字典,包括此步骤,否则可跳过

  1. [root@test ~]# mkdir /opt/src
  2. [root@test ~]# cd /opt/src
  3. [root@test src]# wget http://downloads.sourceforge.net/project/cracklib/cracklib-words/2008-05-07/cracklib-words-20080507.gz
  4. [root@test src]# gunzip cracklib-words-20080507.gz
  5. #可以到cracklib-words-20080507添加需要排除的密码,如不允许使用Twsm_20200917密码
  6. [root@test src]# echo 'Twsm_20200917' >> cracklib-words-20080507
  7. [root@test src]# create-cracklib-dict -o ./cracklib-dict ./cracklib-words-20080507
  1. 下载PostgreSQL源码,配置passwordcheck 如果当前的PG非源码安装,或者以前编译源码已清理,需要重新下载对应的PG源码版本

  1. [root@test src]# wget https://ftp.postgresql.org/pub/source/v10.14/postgresql-10.14.tar.bz2
  2. [root@test src]# tar xjvf postgresql-10.14.tar.bz2
  3. [root@test src]# cd /opt/src/postgresql-10.14/contrib/passwordcheck/
  4. #修改Makefile, 把注释去掉, 并修改字典文件(不要带.pwd后缀).
  5. [root@test passwordcheck]# vi Makefile
  6. #把下面两行注释去掉
  7. #修改字典文件/usr/lib/cracklib_dict为步骤3生产的字典
  8. PG_CPPFLAGS = -DUSE_CRACKLIB '-DCRACKLIB_DICTPATH="/opt/src/cracklib-dict"'
  9. SHLIB_LINK = -lcrack
  10. #修改需要的密码最小长度,修改为13
  11. [root@test passwordcheck]# vi passwordcheck.c
  12. #define MIN_PWD_LENGTH 13
  1. 编译passwordcheck

  1. #因为这里是重新下载的源码,需要全部重新编译
  2. [root@test passwordcheck]# cd /opt/src/postgresql-10.14
  3. [root@test postgresql-10.14]# ./configure --prefix=/opt/pgsql
  4. [root@test postgresql-10.14]# gmake world
  5. #如果有以前的编译的源码,可按以下方式编译
  6. [root@test postgresql-10.14]# cd /opt/src/postgresql-10.14/contrib/passwordcheck
  7. [root@test passwordcheck]# make clean
  8. rm -f passwordcheck.so   libpasswordcheck.a  libpasswordcheck.pc
  9. rm -f passwordcheck.o
  10. [root@test passwordcheck]# make
  11. gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -O2 -fPIC -DUSE_CRACKLIB '-DCRACKLIB_DICTPATH="/opt/src/cracklib-dict"' -I. -I. -I../../src/include  -D_GNU_SOURCE   -c -o passwordcheck.o passwordcheck.c
  12. gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -O2 -fPIC -shared -o passwordcheck.so passwordcheck.o  -L../../src/port -L../../src/common -Wl,--as-needed -Wl,-rpath,'/opt/pgsql/lib',--enable-new-dtags  -lcrack 
  13. [root@test passwordcheck]# ls
  14. Makefile  passwordcheck.c  passwordcheck.o  passwordcheck.so
  1. 安装passwordcheck #以前的先做下备份

  1. [root@test passwordcheck]# mv /opt/pg10/lib/postgresql/passwordcheck.so /opt/pg10/lib/postgresql/passwordcheck.so.bak
  2. #拷贝重新编译后的SO文件
  3. [root@test passwordcheck]# cp /opt/src/postgresql-10.14/contrib/passwordcheck/passwordcheck.so /opt/pg10/10/lib/postgresql/
  1. 添加passwordcheck扩展,重启数据库

  1. shared_preload_libraries = '$libdir/passwordcheck'
  2. [root@test passwordcheck] service postgresql-10 restart
  1. 验证

  1. #密码少于13
  2. postgres=# alter role test password '123456789abc';
  3. ERROR:  password is too short
  4. #密码太简单
  5. postgres=# alter role test password '1111111111abc';
  6. ERROR:  password is easily cracked
  7. #设置为字典中排除的密码Twsm_20200917
  8. postgres=# alter role test password 'Twsm_20200917';
  9. ERROR:  password is easily cracked

如果觉得上面的配置太复杂,也可以使用passwordcheck+cracklib的结合体扩展 https://github.com/devrimgunduz/passwordcheck_cracklib

  1. 参考:

  1. https://www.postgresql.org/docs/10/passwordcheck.html

  2. https://github.com/digoal/blog/blob/master/201410/20141009_01.md

墨天轮原文链接:https://www.modb.pro/db/32449(复制到浏览器中打开或者点击“阅读原文”直达)

推荐阅读:144页!分享珍藏已久的数据库技术年刊


视频号,新的分享时代,关注我们,看看有什么新发现?

数据和云

ID:OraNews

如有收获,请划至底部,点击“在看”,谢谢!

点击下图查看更多 ↓

云和恩墨大讲堂 | 一个分享交流的地方

长按,识别二维码,加入万人交流社群

请备注:云和恩墨大讲堂

  点个“在看”

你的喜欢会被看到❤

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号