PostgreSQL本地登录trust、ident认证权限控制

原创 2014年02月19日 15:11:39
前几天偶然发现任意OS用户无需密码就可以获取PG数据库管理员权限。感觉这个也太BUG了,如果DBA配置不当,岂不是很容易就数据泄露了。。。
通过合理配置pg_hba.conf,pg_ident.conf禁止非数据库OS用户登录以trust方式登录,对于某些需要支持本地认证的同学可能有用。
 
    前置条件:
        1.我的PG数据库是由Linux用户 ithomer创建的私有数据库
        2.数据库认证方式pg_hba.conf中,本地用户登录认证方式为trust
# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     trust
    问题重现:
        1.以任意Linux用户如homerwu登录OS(该用户无任何数据库权限,与ithomer也不在同一组)
        2.homerwu用户下载PG客户端可执行程序,以本地套接字认证方式登录PG,指定用户,不指定密码
[homerwu@vmlinux ~]$ pgsql/bin/psql -d postgres -U ithomer
psql (9.2.3)
Type "help" for help.

postgres=# 
        登录成功了。。。直接就取到了ithomer私有数据库的管理员权限,无需密码。
 
一时以为又出现了重大的安全漏洞,于是发邮件给PG开源社区,得到答复:“trust认证设计就是这样的,并且文档上也说明了”
感 觉不大可思议,这种登录方式类似Oracle中的 sqlplus / as sysdba命令,不同的是,对于非安装用户以这种方式登录时,Oracle返回了个认证错误的信息,直接就拒绝掉了。而PG的这种方式,不检查OS用户 名、用户组,直接就通过认证,感觉相当不安全(数据库默认本地用户认证方式就是为trust)。
 
后来,阅读了PG文档中关于认证部分的文档,改为ident认证方式("Identification Protocol"标识协议在 RFC 1413 里面描述),指定哪些OS用户可以用那些PG用户名登录。对于那种需要直接在sysdba方式登录的用户可能有用。
 
    解决方法:
    1.修改ident认证文件pg_ident.conf,设定本地套接字认证方式的OS与PG用户名的映射关系,允许OS用户名为ithomer的,可以用PG 用户名ithomer以本地套接字认证方式登录。(同理,不在映射关系中的用户,就不允许登录。如果不设定pg_ident.conf,则PG默认映射关系为 sameuser,即只能以OS同名的PG用户名登录)
# MAPNAME       SYSTEM-USERNAME         PG-USERNAME
local_ident_user      ithomer                 ithomer
    2.调整pg_hba.conf本地认证方式为ident,映射名为之前设定的MAPNAME local_ident_user(不同PG版本设定方式稍微不同,得参考文档)
# "local" is for Unix domain socket connections only
local   all             all                                     ident map=local_ident_user 
    3.重新加载数据库配置
pg_ctl reload
    4.OK,现在只允许OS用户ithomer无需密码登录了~
 
相关的PG客户端登录认证源码位置:
函数:void ClientAuthentication(Port *port)
源文件:src\backend\libpg\auth.c

PostgreSQL 允许远程访问设置方法

安 装PostgreSQL数据库之后,默认是只接受本地访问连接。如果想在其他主机上访问PostgreSQL数据库服务器,就需要进行相应的配置。配置远 程连接PostgreSQL数据库的步骤很简单,只需...
  • ll136078
  • ll136078
  • 2013年10月15日 11:39
  • 48996

PostgreSQL pg_hba.conf 文件解析以及忘记密码的处理方法

pg_hba.conf是客户端认证配置文件,定义如何认证客户端。 下面是常用的pg_hba.conf配置: # TYPE  DATABASE        USER            ADDRE...
  • u012422541
  • u012422541
  • 2016年03月15日 19:13
  • 2304

PostgreSQL安装与配置介绍

个人觉得是很有用的postgresql介绍,对于新手来说简洁有效,翻译不到位之处,希望各位指出,原文链接:http://fedoraproject.org/wiki/PostgreSQL。 安装 Po...
  • wn_hello
  • wn_hello
  • 2016年08月23日 12:09
  • 8253

Postgresql pg_hba.conf配置文件小结

Postgresql数据库pg_hba.conf配置文件小结PG数据库的pg_hba.conf配置文件中存储着和连接相关的权限配置,文件存放在Data目录下。文件中每一行为一条配置,每条配置中包括连接...
  • arcticJian
  • arcticJian
  • 2015年11月04日 14:33
  • 6635

CentOS 6.6通过yum 安装PostgreSQL 9.4

最近再写python程序,需要用到postgresql,所以要安装postgresql数据库。 一、在/etc/yum.repos.d/CentOS-Base.repo 中的[base],[upd...
  • yupeigu
  • yupeigu
  • 2017年03月24日 17:08
  • 1177

psql: 致命错误: 用户 "postgres" Ident 认证失败

修改认证文件/var/lib/pgsql/data/pg_hba.conf,登陆使用密码。 #vi /var/lib/pgsql/data/pg_hba.conf 把这个配置文件中的认...
  • sanbingyutuoniao123
  • sanbingyutuoniao123
  • 2016年08月15日 11:30
  • 3849

rails连接postgresql错误:psql: 致命错误: 用户 "postgres" Ident 认证失败

psql: 致命错误:  用户 "postgres" Ident 认证失败 1安装好postgresql数据库后需要初始化及一些配置rails项目才能连接postgresql 安装好postgre...
  • li_yong_kuan
  • li_yong_kuan
  • 2014年09月16日 01:09
  • 1752

postgresal使用错误解决 (记录篇)

1、 错误:psql: FATAL: Peer authentication failed for user "postgres" 解决办法如下: 1). 运行下面的命令编辑pg_hba.conf文件...
  • wangyezi19930928
  • wangyezi19930928
  • 2014年04月15日 19:40
  • 9450

sysbench下面测试postgresql遇到IDENT authrntication failed for user postgres

在虚拟机上直接运行测试,并没有出现任何问题,但是在服务器上就出现了上面报出的错误,一再确认命令是不是敲错了。结果不是。 后来在网上查到是眼修改存储postgresql数据的目录下的pg_hda.c...
  • li200918003
  • li200918003
  • 2015年08月26日 22:30
  • 165

[转帖]PostgreSQL本地登录trust、ident认证权限控制

[转帖]PostgreSQL本地登录trust、ident认证权限控制
  • msdnchina
  • msdnchina
  • 2017年11月22日 18:18
  • 229
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PostgreSQL本地登录trust、ident认证权限控制
举报原因:
原因补充:

(最多只允许输入30个字)