我想知道为什么当我提供root的密码时,以下命令会报告失败?
$ su postgres Password: su: Authentication failure
su
询问 root 的密码,而不是 of 的密码是否正确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
切换到哪些目标用户?他们也是其 id setuid() 可以作为参数的用户,这是否正确?
从 APUE,我了解到没有有效登录 shell 命令的登录名不能用于登录。他们也可以被
su
教育吗?但是postgres
有一个有效的登录 shell 命令/bin/bash
,为什么我不能su postgres
呢?
谢谢。
查看第二个字段
/etc/shadow
:通常它会有加密的密码,但这里它只有一个星号。这意味着该帐户已被锁定 - 它不接受任何密码。这是任何新帐户在为其分配密码之前所具有的状态。
要转换到当前锁定的用户帐户,您需要一种不要求输入目标帐户密码的转换方法。因为
su
,这意味着您必须首先完全成为 root。可以配置
sudo
为允许您访问该postgres
帐户,即使它被锁定以进行密码验证。该/etc/sudoers
行将是这样的: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 身份运行来实现。你不应该给 postgres 用户一个密码。这被认为是一个安全漏洞,因为现在有人可以以该用户身份登录并做任何他们想做的事情。相反,您应该授予自己对该用户的 sudo 权限,并使用如下结构。