PostgreSQL ident和peer基于操作系统用户的认证
PostgreSQL支持的认证方法非常多,除了自身的密码认证以外,还支持很多其他认证服务。
trust password GSSAPI SSPI Ident RADIUS Certificate BSD
详见
https://www.postgresql.org/docs/9.6/static/auth-methods.html
本文主要给大家讲一下ident认证和peer认证。
ident和peer认证的原理这两种认证方法的目的是获取客户端连接数据库的操作系统用户,检查MAP中是否存在,判断是否允许连接数据库。
ident 认证,客户端和数据库建立TCP会话后(假设会话的连接信息是client_ip:12345 - db_ip:5432),数据库通过ident协议询问客户端所在IP地址的ident server (默认是113监听端口),询问内容:使用client_ip:12345端口连接db_ip:5432的操作系统用户是谁?
协议可以参考一下RFC 文档。
如图:
peer认证,目的和ident认证一样,都是要拿到客户端的操作系统用户名,只不过peer对应的是unix socket连接(客户端和数据库在同一个操作系统中),所以是通过系统调用来获取客户端的用户名,系统调用是getpeereid().
如图:
在获取到客户端的OS用户名之后,PostgreSQL会通过pg_hba.conf中配置的map名与pg_ident.conf中配置的映射关系,以及客户端提供的数据库用户名,判断是否允许登陆数据库。
如图
我这里举一个peer认证的例子
postgresql.conf #ident_file = ConfigDir/pg_ident.conf pg_hba.conf # TYPE DATABASE USER ADDRESS METHOD local all all ident map=mm pg_ident.conf # MAPNAME SYSTEM-USERNAME PG-USERNAME mm digoal postgres
这个配置的含义:
当客户端使用unix socket连接数据库时,使用ident认证。 当客户端的OS用户是digoal时,允许它以数据库用户postgres连接数据库。
$ whoami digoal $ psql -h $PGDATA -p 1921 -U postgres psql (9.5.3) Type "help" for help.
当连接的数据库用户不在map中时,报错。
$ psql -h $PGDATA -p 1921 -U digoal psql: FATAL: Peer authentication failed for user "digoal"
pg_ident.conf还支持规则表达式,具体用法见
https://www.postgresql.org/docs/9.6/static/auth-username-maps.html
https://www.postgresql.org/docs/9.6/static/functions-matching.html#POSIX-SYNTAX-DETAILS
ident的方法略复杂,需要在客户端部署ident server,可参考以下文档进行配置
https://wiki.archlinux.org/index.php/Identd_Setup
如果你的主机是数据库和其他业务共用,或者你不太相信你的OS环境的话,如何加固你的数据库呢?
假设ROOT用户是可信任的,启动数据库的digoal用户是可信任的,你可以这样加固。
禁止所有的trust认证,同时对root和digoal用户,使用peer认证方法。
其他用户要连,对不起,不允许,请提供密码。
(这种加固,仅仅针对不能修改pg_hba.conf的用户,所以说root和启动数据库的用户必须是可信任的)
例子
.1. 使用某个非启动数据库的普通用户通过unix socket连接并监控数据库。
root 超级用户
digoal 启动数据库的用户
nobody 某监控用户(没有login shell,不允许登陆)
配置
允许nobody使用postgres用户,通过unix socket连接数据库. nobody 是不允许登陆shell的,但是可以用它来执行监控脚本。 如下 postgresql.conf #ident_file = ConfigDir/pg_ident.conf pg_hba.conf # TYPE DATABASE USER ADDRESS METHOD local all all ident map=mm pg_ident.conf # MAPNAME SYSTEM-USERNAME PG-USERNAME mm digoal postgres mm nobody postgres
监控脚本示例
cp -r /home/digoal/pgsql9.5 /tmp vi /tmp/test.sh #!/bin/bash export LD_LIBRARY_PATH=/tmp/pgsql9.5/lib:$LD_LIBRARY_PATH export PATH=/tmp/pgsql9.5/bin:$PATH for ((i=1;i )) psql -h /tmp -p 1921 -U postgres postgres -c "select now();" /tmp/pg_1921.log 2 1 sleep 1 chown nobody test.sh chmod 700 test.sh
以nobody用户运行监控脚本
# sudo -u nobody -s bash -c "nohup /tmp/test.sh /dev/null 2 1 "
https://wiki.archlinux.org/index.php/Identd_Setup
https://www.postgresql.org/docs/9.6/static/auth-methods.html#AUTH-IDENT
https://www.postgresql.org/docs/9.6/static/auth-username-maps.html
阿里云PolarDB、RDS获评信通院数据库Serverless认证最高“先进级”,AnalyticDB获“增强级” 在日前中国信通院组织的数据库产品能力评测中,阿里云PolarDB for MySQL、RDS MySQL数据库顺利完成了首批事务型数据库Serverless能力分级测试,获最高“先进级”评级;AnalyticDB MySQL和AnalyticDB PostgreSQL顺利完成了首个分析型数据库Serverless能力分级测试,获评“增强级”评级。
云数据库技术岗位认证训练营 AnalyticDB PostgreSQL和 PolarDB专场来啦!报名学习考取认证吧! 原价12888元的认证学习课程,限时免费!云数据库技术服务岗位认证由阿里云大学颁发,获得此认证:证明自身技术实力,用于技术投标,可作为GTS项目交付所需相关技能认定证明。您将录入阿里系优秀人才库,帮助您获得更多阿里云项目交付和职场机会。
云数据库技术岗位认证训练营 AnalyticDB PostgreSQL专场来啦!报名学习考取认证吧! 阿里云开发者社区联合数据库团队、GTS团队推出了云数据库AnalyticDB PostgreSQL技术岗位认证训练营,为开发者们提供培训赋能,助开发者们考取认证。
云数据库技术岗位认证训练营 AnalyticDB PostgreSQL和 PolarDB专场来啦!报名学习考取认证吧! 阿里云开发者社区联合数据库团队、GTS团队推出了云数据库AnalyticDB PostgreSQL 和 PolarDB技术岗位认证训练营,为开发者们提供培训赋能,助开发者们考取认证。
相关文章
- WERCSmart是什么认证,美国WERCS注册最新法规,WERCS认证费用
- Authing身份云,登录认证集成工具,注册登录框架
- 通过用户名密码认证保障 MQTT 接入安全
- 优化实现PostgreSQL缓存优化,更高性能!(postgresql缓存)
- 深入理解 PostgreSQL 调试技巧(postgresql调试)
- 快速学会PostgreSQL中导入SQL文件(postgresql导入sql文件)
- Linux系统的认证安全——DPort管理(linuxdport)
- Oracle身份认证:安全可靠的登录方式(oracle身份认证)
- 权限PostgreSQL:配置用户权限(postgresql用户)
- 使用PostgreSQL精通数据库管理(postgresql教程)
- PostgreSQL:未来数据库发展的光明前景(postgresql前景)
- 深入探索PostgreSQL集群技术,构建稳定高效的数据库架构(postgresql集群)
- 快速安全!PostgreSQL下载,数据库管理必备!(postgresql下载)
- Linux服务器证书:认证保障你的网络安全(linuxcer证书)
- 深入浅出PostgreSQL(postgresql书籍)
- 如何简单快速地安装PostgreSQL在Linux系统上(linux安装postgresql)
- PostgreSQL连接的实践与思考(postgresql链接)
- 红旗Linux认证考试拉开序幕(红旗linux认证考试)
- PostgreSQL 掌握精妙的数据类型(postgresql类型)
- PostgreSQL精彩模式:构建最高效率的数据库系统(postgresql模式)
- 分析PostgreSQL源码深度剖析(postgresql源码)
- PostgreSQL登录:实现无缝连接(postgresql登录)
- 官方文档PostgreSQL:正式中文文档(postgresql中文)
- 如何有效地备份PostgreSQL数据库(备份postgresql)
- 管理PostgreSQL:优化内存管理提升数据库性能(postgresql内存)
- 努比亚发布 C to Lightning 小黄人数据线:MFi 认证,到手 59 元