【问题标题】:No password prompt for postgresql superuserpostgresql 超级用户没有密码提示
【发布时间】:2012-08-14 10:03:21
【问题描述】:

在 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

进行这些更改后,我重新启动了 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

【问题讨论】:

    标签: database postgresql authentication postgresql-9.1


    【解决方案1】:

    您的pg_hba.conf 确实需要密码才能进行 unix 套接字连接,但仍有一些方法需要您验证:

    1. postgres 主目录中包含密码的.pgpass 文件(同时检查PGPASSFILE 环境变量以获取非标准路径)。

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

    还有可能是您编辑了错误的 pg_hba.conf 文件。 以postgres方式连接时,可以通过SHOW hba_file SQL命令获取正确路径进行验证。

    此外,您可能需要检查日志文件 /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  
    

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

    【讨论】:

    • 它在 .pgpass 文件中,谢谢!您引用的 pg_hba.conf 文件的一部分让我有点困惑。如果不让 postgres 在没有密码的情况下登录,我该怎么做才能提供非交互式访问?
    • 应该为此找到对等身份验证,假设您不让人们使用 postgres 帐户登录服务器。
    • 我注意到 Windows 中的行为相同。在 PgAdminIII 中添加新连接后,在使用 postgres 连接时,psql 不再提示我输入密码。罪魁祸首是 pgpass.conf,它由 PgAdminIII 在 %APPDATA%\postgresql 文件夹中自动创建。谢谢丹尼尔。
    【解决方案2】:

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

    grep '^[^#]' pg_hba.conf 
    

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

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

    【讨论】:

    • 感谢您对身份验证方法的澄清。我将输出添加到问题中。
    猜你喜欢
    • 2016-03-28
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多