PostgreSQL ident和peer基于操作系统用户的认证

https://yq.aliyun.com/articles/55898

其实 local和127. 还是有区别的 

这里面应该就是对应了
local -> peer
127.0.0.1 -> ident

不同的登录方式 时用不同的认证方式.

摘要: PostgreSQL支持的认证方法非常多,除了自身的密码认证以外,还支持很多其他认证服务。 trust md5 password GSSAPI SSPI Ident Peer LDAP RADIUS PAM Certificate BSD 详见https://

PostgreSQL支持的认证方法非常多,除了自身的密码认证以外,还支持很多其他认证服务。

trust
md5
password
GSSAPI
SSPI
Ident
Peer
LDAP
RADIUS
PAM
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

小结

  1. ident针对TCP会话,即通过TCP连接数据库时。
  2. peer针对UNIX SOCKET会话,即通过unix socket 连接数据库时。

安全建议

如果你的主机是数据库和其他业务共用,或者你不太相信你的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>0;))
do
  psql -h /tmp -p 1921 -U postgres postgres -c "select now();" >> /tmp/pg_1921.log 2>&1
  sleep 1
done

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

本文为云栖社区原创内容,未经允许不得转载,如需转载请发送邮件至yqeditor@list.alibaba-inc.com;如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
【云栖快讯】阿里巴巴小程序繁星计划,20亿补贴第一弹云应用立即开通购买,限量从速!  详情请点击

[转帖]PostgreSQL ident和peer基于操作系统用户的认证的更多相关文章

  1. [转帖]PostgreSQL 昨天,今天和明天

    PostgreSQL 昨天,今天和明天 http://www.postgres.cn/v2/news/viewone/1/52 原作者:何伟平(laser) 创作时间:2005-01-15 11:44 ...

  2. GJM :用JIRA管理你的项目(三)基于LDAP用户管理 [转载]

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  3. SharePoint 2013 配置基于AD的Form认证

    前 言 配置SharePoint 2013基于AD的Form认证,主要有三步: 1. 修改管理中心的web.config: 2. 修改STS Application的web.config: 3. 修改 ...

  4. 问题: Oracle Database 10g 未在当前操作系统中经过认证

    问题: Oracle Database 10g 未在当前操作系统中经过认证 在Windows 7中安装Oracle 10g. 使用的Orcale版本是10g. 步骤1: 在Orcale官网上下载,下载 ...

  5. EBS R12.2安装,使用的操作系统用户

    在安装时,错误使用了oracle rdbms的对应的操作系统用户,导致安装前,验证时"web server install prerequisites"选项验证失败: (本图其它两 ...

  6. WebService基于SoapHeader实现安全认证(一)

    本文转载:http://www.cnblogs.com/houleixx/archive/2009/08/22/webservice-soapheader-security.html WebServi ...

  7. sharepoint:基于AD的FORM认证

    //来源:http://www.cnblogs.com/jindahao/archive/2012/05/07/2487351.html 需求: 1. 认证要基于AD 2. 登入方式要页面的方式(fo ...

  8. oracle高级查询(实例基于scott用户四张表)

    oracle高级查询(实例基于scott用户四张表) 分组查询 多表查询 子查询 综合实例 ====================================================== ...

  9. Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员、后台管理员同时登录

    1.登录的实现 登录功能实现起来有哪些常用的方式,大家首先想到的肯定是cookie或session或cookie+session,当然还有其他模式,今天主要探讨一下在Asp.net core 2.0下 ...

随机推荐

  1. LAMP网站架构方案解剖

    LAMP网站架构方案解剖 2011-03-18 10:46 月光 网络转载 字号:T | T 网站架构是比较考研技术的一件事,所以要对一种好用的工具,那么网站架构就会事半功倍,LAMP具有通用.跨平台 ...

  2. 一个C语言外挂程序

    首先建立一个控制台应用程序 引入Windows.h库函数 MessageBoxA(句柄--通常是0,提示框内容,提示框标题,按钮) #include <Windows.h> int mai ...

  3. get和post请求的区别?

    ①get请求用来从服务器上获得资源,而post是用来向服务器提交数据: ②get将表单中数据按照name=value的形式,添加到action 所指向的URL 后面,并且两者使用“?”连接,而各个变量 ...

  4. pyqt5-QTDesigner--控件操作

    Edit菜单       编辑小伙伴.用鼠标直接拖       编辑控件---样式等等. 点击需要编辑的控件--->   信号与槽 先用鼠标从控件往外拖---> --->选中相应的信 ...

  5. rsync快速部署记录

    rsync快速部署记录 安装rsync和使用环境:客户端:10.192.30.59 fudao_db_cluster_002 (将本地文件备份到服务端)服务端:10.192.30.60 fudao_d ...

  6. 【NOIP2016提高A组模拟9.9】总结

    第一题,题面很不错,正解是分治,不过用ljj水法也可以轻松的所过去. 第二题,本来以为是个有向无环图, 结果搞了半天才发现,事实并不是这样的,于是暂时弃疗, 接着在最后的40分中,某人大喊:哦原来是t ...

  7. vsftp配置文件

    直接使用,本地用户可以使用账号密码登录 # Example config file /etc/vsftpd/vsftpd.conf # # The default compiled in settin ...

  8. BZOJ 4653: [Noi2016]区间 双指针 + 线段树

    只要一堆线段有重叠次数大于等于 $m$ 次的位置,那么一定有解 因为重叠 $m$ 次只需 $m$ 个线断,将那些多余的线断排除掉即可 先将区间按照长度从小到大排序,再用 $two-pointer$ 从 ...

  9. Vue 中 使用v-show

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. shell命令别名

    ~/.bashrc文件 [root@linuxzgf ~]# vi ~/.bashrc            在alias cp='cp -i'前加上"#"注释,重新登录即可实现复 ...