为什么我不能`su postgres`?

为什么我不能`su postgres`?
  1. 我想知道为什么当我提供 root 密码时,以下命令报告失败?

    $ su postgres
    Password: 
    su: Authentication failure
    

    这是正确的吗su询问 root 的密码,不是 postgres

    如果是 的密码postgres,当我安装postgreSQL时,我没有设置连接postgresql服务器的登录名,并且我没有postgres在我的Ubuntu上显式创建用户,那么它的密码是多少?

    /etc/passwd

    postgres:x:124:133:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash
    

    /etc/shadow

    postgres:*:17478:0:99999:7:::
    
  2. 如果确实不行su postgres,那么一般来说,目标用户可以su 切换到哪些?

    他们也是 setuid() 可以将其 ids 作为参数的用户,这是否正确?

    从 APUE 中,我了解到没有有效登录 shell 命令的登录名不能用于登录。他们也可以su编辑吗?但postgres有一个有效的登录 shell 命令/bin/bash,为什么我不能呢su postgres

谢谢。

答案1

查看第二个字段/etc/shadow

postgres:*:17478:0:99999:7:::

通常它会有加密的密码,但这里只有一个星号。这意味着该帐户已被锁定 - 不接受任何密码。这是任何新帐户在为其分配密码之前都将处于的状态。

要转换到当前锁定的用户帐户,您需要一种不要求目标帐户密码的转换方法。对于su,这意味着您必须首先完全成为root。

可以配置sudo为允许您访问该postgres帐户,即使该帐户因密码身份验证而被锁定。该/etc/sudoers行将是这样的:

Tim     ALL=(postgres) ALL

sudo相当于的命令行su postgressudo -u postgres -s.注意:在此方法中,您原始帐户中的某些环境设置可能仍在您的会话中以 user 身份使用postgres。您可能希望也可能不希望这样:如果您有两个或多个数据库管理员,他们的 shell/环境都sudo使用该帐户,并且具有不同的个人偏好,那么它实际上可能很有用postgres

postgres如果您希望环境与用户直接登录时的环境完全相同,您也可以使用sudo -u postgres -i(相当于su - postgres)。

但如果你想su postgres工作,你只需要为用户设置一个密码postgres。这可以通过passwd postgres以 root 身份运行来实现。

答案2

您不应为 postgres 用户提供密码。这被认为是一个安全缺陷,因为现在有人可以以该用户身份登录并做任何他们想做的事情。相反,您应该授予自己对此用户的 sudo 权限,并使用如下所示的结构。

sudo -u postgres psql ...

相关内容