网站搜索

如何在没有密码的情况下切换 (su) 到另一个用户帐户


在本指南中,我们将展示如何切换到另一个或特定的用户帐户而不需要密码。例如,我们有一个名为 postgres 的用户帐户(默认的 PostgreSQL 超级用户系统帐户),我们希望每个用户(通常是我们的 PostgreSQL 数据库和系统管理员)在名为 postgres 的组中使用 su 命令切换到 postgres 帐户,而无需输入密码。

默认情况下,只有 root 用户可以切换到另一个用户帐户,而无需输入密码。系统将提示任何其他用户输入他们要切换到的用户帐户的密码(或者如果他们使用 sudo 命令,系统将提示他们输入密码),如果他们不提供正确的密码,他们会得到出现“身份验证失败”错误,如以下屏幕截图所示。

您可以使用下面提供的两种解决方案中的任意一种来解决上述问题。

1.使用PAM认证模块

PAM可插入身份验证模块)是现代 Linux 操作系统上用户身份验证的核心。为了允许特定组中的用户无需密码即可切换到另一个用户帐户,我们可以修改/etc/pam.d/susu命令的默认PAM设置强> 文件。

vim /etc/pam.d/su
OR
sudo vim /etc/pam.d/su

“auth enough pam_rootok.so”后面添加以下配置,如下图所示。

auth       [success=ignore default=1] pam_succeed_if.so user = postgres
auth       sufficient   pam_succeed_if.so use_uid user ingroup postgres

在上面的配置中,第一行检查目标用户是否是 postgres,如果是,则服务检查当前用户,否则,跳过 default=1 行并执行正常的身份验证步骤。

auth       [success=ignore default=1] pam_succeed_if.so user = postgres

接下来的行检查当前用户是否属于 postgres 组,如果,则身份验证过程被视为成功并返回 sufficient 作为结果。否则,执行正常的身份验证步骤。

auth       sufficient   pam_succeed_if.so use_uid user ingroup postgres

保存文件并关闭它。

接下来,将您想要 su 的用户(例如 aaronk)添加到没有密码的帐户 postgrespostgres 使用 usermod 命令。

$sudo usermod -aG postgres aaronk

现在尝试以用户 aaronk 身份 su 访问 postgres 帐户,系统不应提示您输入密码,如以下屏幕截图所示:

su - postgres

2.使用Sudoers文件

您还可以通过在 sudoers 文件中进行一些更改来 su 到另一个用户,而无需密码。在这种情况下,要切换到另一个用户帐户(例如 postgres)的用户(例如 aaronk)应该位于 sudoers 文件或 sudo 组中能够调用sudo命令

sudo visudo

然后在 “%sudo ALL=(ALL:ALL) ALL ” 行下方添加以下配置,如以下屏幕截图所示。

aaronk ALL=NOPASSWD: /bin/su – postgres

保存并关闭文件。

现在尝试以用户 aaronk 身份 su 到帐户 postgres,shell 不应提示您输入密码:

sudo su - postgres

目前为止就这样了!有关详细信息,请参阅 PAM 手动输入页面 (man pam.conf) 和 sudo 命令 的手动输入页面 (man sudo)。

man pam.conf
man sudo