postgresql超级用户没有密码提示

Bas*_*sil 13 database authentication postgresql postgresql-9.1

在Ubuntu 12.04上安装PostgreSQL 9.1后,我为"postgres"超级用户帐户设置了密码.我希望所有用户在登录时都必须输入密码.这就是为什么我这样配置pg_hba.conf:

#Database administrative login by Unix domain socket
local   all             postgres                                md5

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
Run Code Online (Sandbox Code Playgroud)

我做了这些更改后重新启动了postgresql.当我这样做时,psql -U testuser我被要求输入密码,但是当我使用"postgres"帐户登录时,psql -U postgres我没有得到密码提示并登录.如果我强制提示密码,psql -U postgres -W我可以通过输入正确的密码登录或者根本不输入任何东西.输入错误的密码会被拒绝.

任何人都可以向我解释为什么会这样吗?

在一个相关的说明:我看到很多例子,其中人们使用ident作为"postgres"用户的身份验证方法,认为要成为"postgres"用户需要机器的root密码.我假设推理是,如果攻击者获得root访问权限,那么无论如何都要完成.我更喜欢使用密码登录,一个与root密码不同.我喜欢为不同的东西设置不同的密码.这合理吗?

输出 grep '^[^#]' pg_hba.conf

local   all             postgres                                md5
local   all             all                                     md5
host    all             all             127.0.0.1/32            md5
Run Code Online (Sandbox Code Playgroud)

Dan*_*ité 13

pg_hba.conf确实需要一个密码用于unix套接字连接,但仍然有办法解决它应该验证:

  1. 一个.pgpass含有密码的Postgres的主目录文件(也检查PGPASSFILE为非标准PATH环境变量).

  2. PGPASSWORD环境变量可以设置.

而且你也可能正在编辑错误的pg_hba.conf文件.当作为postgres连接时,可以使用SHOW hba_fileSQL命令获取正确的路径以进行验证.

此外,您可能需要检查日志文件,/var/log/postgresql/postgresql-9.1-main.log以确认在请求时重新加载配置文件,并在身份验证期间查找任何可疑消息.

至于与postgres用户无密码连接的常见原因,debian PG-9.1 pg_hba.conf有关于禁止它们的评论:

# DO NOT DISABLE!  
# If you change this first entry you will need to make sure that the  
# database superuser can access the database using some other method.  
# Noninteractive access to all databases is required during automatic  
# maintenance (custom daily cronjobs, replication, and similar tasks).  
#  
# Database administrative login by Unix domain socket  
local   all             postgres                                peer  
Run Code Online (Sandbox Code Playgroud)

由于Debian和Ubuntu使用相同的postgres包,这也适用于Ubuntu.


Cra*_*ger 5

你的奇怪行为,我认为你已经错过了一个pg_hba.conf特定于postgres用户的一行.请显示以下输出:

grep '^[^#]' pg_hba.conf 
Run Code Online (Sandbox Code Playgroud)

至于ident vs md5; 我个人更喜欢在开发中使用ident进行交互式使用,对普通用户来说这很好,但我不认为postgres通过用户访问sudo是一个好主意.双方sudo -u postgres psqlpsql -U postgres -W 授予访问Postgres超级用户角色,因此文件系统访问的数据库用户.既不需要root密码,也sudo可以通过sudoers限制调用用户来运行psql.但是,sudo -u postgres psql由于客户端代码也运行postgres,因此它是一个更大的攻击面,并且用户总是有机会找到绕过sudoer限制的方法.

ident在开发md5中使用,在生产中.