在PostgreSQL中有一项认证为trust认证, 使用该认证方法不需要输入密码即可登录数据库.
也就是说数据库服务器管理员只要有操作系统root权限, 很容易就可以登录数据库查询数据.
在比较高的安全场合, 可能需要禁止掉trust方法. 这样的话即使配置了trust认证方法也需要提供密码.
方法很简单, 只要修改一下hba.c即可. 如下.
vi src/backend/libpq/hba.c
if (strcmp(token->string, "trust") == 0)
//parsedline->auth_method = uaTrust;
parsedline->auth_method = uaMD5;
else if (strcmp(token->string, "ident") == 0)
parsedline->auth_method = uaIdent;
else if (strcmp(token->string, "peer") == 0)
parsedline->auth_method = uaPeer;
else if (strcmp(token->string, "password") == 0)
//parsedline->auth_method = uaPassword;
parsedline->auth_method = uaMD5;
else if (strcmp(token->string, "krb5") == 0)
修改后重新编译一下postgresql软件.
修改后在pg_hba.conf中配置trust和password认证方法和使用md5效果一样 . 都需要使用密码. 否则无法登陆数据库
都是trust的, 但是实际连接数据库时会提示输入密码.
使用这种方法后, 可以规避本地不需要密码校验的漏洞.
[root@db-192-168-9-35 libpq]# su - pg93
pg93@db-192-168-9-35-> cd $PGDATA
pg93@db-192-168-9-35-> cat pg_hba.conf
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
都是trust的, 但是实际连接数据库时会提示输入密码.
pg93@db-192-168-9-35-> psql
Password:
psql (9.3beta1)
Type "help" for help.
postgres=#
使用这种方法后, 可以规避本地不需要密码校验的漏洞.
但是这个方法并不彻底, 因为如果你有本地操作系统root权限, 你可以重新编译一个正常的postgresql软件.
重启数据库即可, 这样的话又可以配置trust了.
然后重启数据库
又不需要密码验证了.
[参考]
[root@db-192-168-9-35 postgresql-9.3beta1]# vi /opt/soft_bak/postgresql-9.3beta1/src/backend/libpq/hba.c
if (strcmp(token->string, "trust") == 0)
parsedline->auth_method = uaTrust;
//parsedline->auth_method = uaMD5;
else if (strcmp(token->string, "ident") == 0)
parsedline->auth_method = uaIdent;
else if (strcmp(token->string, "peer") == 0)
parsedline->auth_method = uaPeer;
else if (strcmp(token->string, "password") == 0)
parsedline->auth_method = uaPassword;
//parsedline->auth_method = uaMD5;
else if (strcmp(token->string, "krb5") == 0)
[root@db-192-168-9-35 postgresql-9.3beta1]# cd /opt/soft_bak/postgresql-9.3beta1
[root@db-192-168-9-35 postgresql-9.3beta1]# gmake world
[root@db-192-168-9-35 postgresql-9.3beta1]# gmake install-world
然后重启数据库
pg93@db-192-168-9-35-> pg_ctl restart
waiting for server to shut down.... done
server stopped
server starting
又不需要密码验证了.
pg93@db-192-168-9-35-> psql
psql (9.3beta1)
Type "help" for help.
postgres=#
[参考]
1. src/backend/libpq/hba.c