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

php中文网
发布: 2016-06-07 17:35:30
原创
1657人浏览过

感觉不大可思议,这种登录方式类似Oracle中的 sqlplus / as sysdba命令,不同的是,对于非安装用户以这种方式登录时,Oracle返回

前几天偶然发现任意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,指定用户,不指定密码

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缓存详述

Windows平台编译 PostgreSQL

Ubuntu下LAPP(Linux+Apache+PostgreSQL+PHP)环境的配置与安装

Ubuntu上的phppgAdmin安装及配置

linux

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号