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

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

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

postgres=# create role test password 'Test#2020';
CREATE ROLE
postgres=# alter role test password 'test#2020';
ERROR:  password must not contain user name
postgres=# alter role test password 'tes12020';
ALTER ROLE
postgres=# alter role test password '2020';
ERROR:  password is too short
postgres=# alter role test password '2020abc';
ERROR:  password is too short
postgres=# alter role test password '2020abcd';
ALTER ROLE
postgres=# alter role test password '12345678';
ERROR:  password must contain both letters and nonletters
postgres=# alter role test password '';
ERROR:  password is too short
postgres=# alter role test password 'abcdffgh';
ERROR:  password must contain both letters and nonletters

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

  1. 安装cracklib以及字典

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

# 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
/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
  1. 如果需要自己配置生成字典,包括此步骤,否则可跳过

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

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

#因为这里是重新下载的源码,需要全部重新编译
[root@test passwordcheck]# cd /opt/src/postgresql-10.14
[root@test postgresql-10.14]# ./configure --prefix=/opt/pgsql
[root@test postgresql-10.14]# gmake world
#如果有以前的编译的源码,可按以下方式编译
[root@test postgresql-10.14]# cd /opt/src/postgresql-10.14/contrib/passwordcheck
[root@test passwordcheck]# make clean
rm -f passwordcheck.so   libpasswordcheck.a  libpasswordcheck.pc
rm -f passwordcheck.o
[root@test passwordcheck]# make
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
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
[root@test passwordcheck]# ls
Makefile  passwordcheck.c  passwordcheck.o  passwordcheck.so
  1. 安装passwordcheck #以前的先做下备份

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

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

#密码少于13位
postgres=# alter role test password '123456789abc';
ERROR:  password is too short
#密码太简单
postgres=# alter role test password '1111111111abc';
ERROR:  password is easily cracked
#设置为字典中排除的密码Twsm_20200917
postgres=# alter role test password 'Twsm_20200917';
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

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

点击下图查看更多 ↓

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

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

请备注:云和恩墨大讲堂

  点个“在看”

你的喜欢会被看到❤

PostgreSQL中如何实现密码复杂度检查?相关推荐

  1. 服务器 修改密码复杂度,服务器密码复杂度设置

    服务器密码复杂度设置 内容精选 换一换 代码迁移工具进行代码迁移时,需要调用Linux下的rpm.deb等命令才能完成扫描和迁移相关任务,这些命令和逻辑必须在后端Linux运行.插件只支持以Web模式 ...

  2. 正则表达式--密码复杂度验证--必须包含大写、小写、数字、特殊字符中的至少三项

    密码复杂度要求: 大写字母.小写字母.数字.特殊字符,四项中至少包含三项. import org.junit.Test; import org.springframework.util.StringU ...

  3. 关于密码复杂度至少8位,包含大写字母、小写字母、数字、特殊字符中至少3种组合的正则

    校验密码复杂度 至少8位,包含大写字母.小写字母.数字.特殊字符中至少3种组合 ^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_]+$)(?![a-z0-9]+$)(?! ...

  4. 如何在PHP中保护数据库密码?

    当PHP应用程序建立数据库连接时,通常当然需要传递登录名和密码. 如果我为我的应用程序使用单个最小权限登录名,则PHP需要在某个地方知道该登录名和密码. 保护该密码的最佳方法是什么? 似乎只在PHP代 ...

  5. linux 密码复杂度,用PAM 搞定Linux 平台密码复杂度问题

    用PAM 搞定Linux 平台密码复杂度问题 星期五, 十二月 27, 20130 作为一个PAM的一个模块,pam_cracklib可以被用来检查密码是否违反密码字典,这个验证模块可以通过插入pas ...

  6. Linux 密码复杂度

    我们在使用linux系统设置密码的时候,经常遇到这样的问题,系统提示:您的密码太简单,或者您的密码是字典的一部分.那么系统是如何实现对用户的密码的复杂度的检查的呢? 系统对密码的控制是有两部分(我知道 ...

  7. PostgreSQL中的ACID特性介绍

    任何关系型数据库中,ACID 是组成数据库的重要部分,是数据库事务的一组属性,该特性目的主要确保数据库在异常情况下保证数据的有效性. 数据库ACID特性 A(Atomicity) 原子性: 事务通常由 ...

  8. linux加固安全之密码复杂度

    随着linux系统使用的普遍性,对linux用户及系统安全要求也随之提升,单纯从单位制度,用户安全意识上来规范,并不能杜绝弱口令,必须从技术上要求用户定时修改复杂的密码,从而提高用户和系统的安全性. ...

  9. Java 密码复杂度校验

    1,需求 复杂性:用户的密码中必须包含的字符类型,默认为中 弱:必须包含小写字母 中:必须包含小写字母.数字 强:必须包含小写字母.数字.大写字母.特殊字符(鼠标移入的提示文字相同) 注:检查密码复杂 ...

最新文章

  1. 这是一篇工程师对产品经理的吐槽
  2. 家园签到:无忧币天天送,连续领礼更多!【家园帮助】
  3. linux查看无线网卡频率,查看无线网卡工作模式
  4. 解读区块链,软分叉和硬分叉
  5. [USACO1.1]黑色星期五Friday the Thirteenth
  6. [mybatis]动态sql_内置参数_parameter_databaseid
  7. 使用 rapidxml 做配置文件
  8. 多记,多问为什么,最古老的学习方法怎么能丢?!
  9. 关于无盘工作站的初步了解(RPL/PXE)
  10. ArcGIS连接pg数据库
  11. 神仙软件商店:到这儿买软件会员最多打5折,各种绿色开源软件还应有尽有
  12. Windows 使用 Detours 进行 HOOK
  13. java 右下角_java右下角弹窗
  14. html src认证,html – SRCSET的W3C验证
  15. 修改加入SGE集群某队列里各个执行机的cpu数(slots)
  16. python内置函数视频_建议你吃透 Python 的 68 个内置函数!(附Python 400集视频教程)...
  17. win10笔记本cpu不高内存也不高但就是很卡,一个办法帮你解决!
  18. i7服务器cpu型号推荐,Intel七款主流CPU,推荐指南(建议收藏)
  19. 矩阵求和及Kadane算法
  20. 将https安全证书导入jdk中

热门文章

  1. 开发人员转售前工程师_工程师和营销人员可以从中学到什么
  2. Toonz开源,Apple开源CareKit,以及更多新闻
  3. 国防现代化的数据_Linux容器如何解决国防虚拟化问题
  4. CSS3/ 弹性布局flex
  5. Bootstrap3 Font Awesome 字体图标带动画的图标
  6. 选择Bootstrap的理由
  7. 21 个编程的热门/冷门趋势
  8. SLAM GMapping(6)扫描匹配器
  9. java ee会话_Java EE会话技术Cookie和Session
  10. c和JAVA的安全编码_C、C++ 和 Java安全编码实践提示与技巧