我想知道为什么当我提供 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:::
如果确实不行
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 postgres
是sudo -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 ...