在本指南中,我们将展示如何切换到另一个或特定的用户帐户而不需要密码。例如,我们有一个名为postgres的用户帐户(默认的PostgreSQL超级用户系统帐户),我们希望名为postgres的组中的每个用户(通常是我们的PostgreSQL数据库和系统管理员)使用命令切换到postgres帐户,而无需输入密码。su
默认情况下,只有 root 用户可以切换到另一个用户帐户,而无需输入密码。系统将提示任何其他用户输入他们要切换到的用户帐户的密码(或者如果他们使用 sudo命令,系统将提示他们输入密码),如果他们不提供正确的密码,他们会得到出现“身份验证失败”错误,如以下屏幕截图所示。
![](https://www.alaica.com/wp-content/uploads/linux-989.png)
您可以使用下面提供的两种解决方案中的任意一种来解决上述问题。
1.使用PAM认证模块
PAM(可插入身份验证模块)是现代 Linux 操作系统上用户身份验证的核心。为了允许特定组中的用户无需密码即可切换到另一个用户帐户,我们可以修改/etc/pam.d/su文件中su 命令的默认 PAM 设置。
# vim /etc/pam.d/su 或者 $ sudo vim /etc/pam.d/su
在“auth enough pam_rootok.so ”后面添加以下配置,如下图所示。
auth [成功=忽略默认=1] pam_succeed_if.so user = postgres auth 足够 pam_succeed_if.so use_uid 用户 ingroup postgres
在上面的配置中,第一行检查目标用户是否是postgres,如果是,则服务检查当前用户,否则,default=1
将跳过该行并执行正常的身份验证步骤。
auth [成功=忽略默认=1] pam_succeed_if.so user = postgres
接下来的行检查当前用户是否在postgres组中,如果yes
,则认为身份验证过程成功并返回足够的结果。否则,执行正常的身份验证步骤。
auth 足够 pam_succeed_if.so use_uid 用户 ingroup postgres
![](https://www.alaica.com/wp-content/uploads/linux-990.png)
保存文件并关闭它。
接下来,使用usermod 命令将您想要在没有密码的情况下添加到postgres帐户的用户(例如aaronk )添加到组postgres中。su
$sudo usermod -aG postgres aaronk
现在尝试以用户aaronksu
身份访问postgres帐户,系统不应提示您输入密码,如以下屏幕截图所示:
$ su - postgres
![](https://www.alaica.com/wp-content/uploads/linux-991.png)
2.使用Sudoers文件
您还可以su
通过在 sudoers 文件中进行一些更改来访问另一个用户,而无需密码。在这种情况下,将切换到另一个用户帐户(例如postgres )的用户(例如aaronk)应该位于 sudoers 文件或 sudo 组中,以便能够调用sudo 命令。
$ 须藤维苏多
然后在该行下方添加以下配置,“%sudo ALL=(ALL:ALL) ALL”
如以下屏幕截图所示。
aaronk ALL=NOPASSWD: /bin/su – postgres
![](https://www.alaica.com/wp-content/uploads/linux-992.png)
保存并关闭文件。
现在尝试以用户aaronk的身份登录postgressu
帐户,shell 不应提示您输入密码:
$ sudo su - postgres
![](https://www.alaica.com/wp-content/uploads/linux-993.png)
目前为止就这样了!有关详细信息,请参阅 PAM 手动输入页面 ( man pam.conf ) 和sudo 命令的手动输入页面( man sudo )。
$ 人 pam.conf $ 人须藤