如果在“user”下使用“su -m user command”,请避免询问密码?

如果在“user”下使用“su -m user command”,请避免询问密码?

如果我在root用户下运行包含的脚本su -m user service userservice start,则不需要输入密码。但是当我在用户下运行它时user,它总是询问密码。这真让我烦恼。出于安全原因是否应该询问密码?如果su -m user command在以下环境下运行,有什么方法可以避免询问密码user

编辑1:su我需要避免当前用户输入密码的原因是/etc/init.d/scripts它对su -m user我安装的许多服务都有声明。如果我重新启动应该在当前用户下运行的服务,每次输入密码似乎很愚蠢。实际上,当我重新启动某些服务时,我需要输入密码两次。我可能会同意这是一个功能一些init.d 脚本,我需要做的就是稍微调整一下源代码,但我认为它可能会在级别上以某种方式修复,su以避免更改 init.d 脚本源代码。

答案1

是的,安全是原因,不,su没有办法规避这一点。但是sudo,它可以用于您想要的用途,并且它有一个配置文件,您可以在其中禁用输入密码的需要。

它还允许进行复杂的配置,以便您可以仅对非常特定的命令禁用密码,从而不会完全破坏安全性。

su主要使用 pam 进行身份验证,您可以修改/etc/pam.d/su并添加一行

auth sufficient pam_succeed_if user = <put username here> quiet

su添加该行后,当以指定用户身份运行时,您不必输入密码。

答案2

首先,你想su对自己做这件事真的很奇怪。这让我担心你误解了一些基本的东西,因为我很难想出你需要这样做的原因。

其次,su如果您的系统使用 PAM,则 的密码提示实际上是由 PAM 控制的(大多数密码提示也是如此)。当然,所有主要的 Linux 发行版都是如此。例如,这是/etc/pam.d/su我的 Debian 机器的顶部:

#
# The PAM configuration file for the Shadow `su' service
#

# This allows root to su without passwords (normal operation)
auth       sufficient pam_rootok.so

第一个未注释的行是不要求 root 输入密码的原因。如果您将其注释掉,系统将提示 root 输入密码(并且您可能会破坏很多脚本!)。

我不知道用于比较当前用户和目标用户的默认 pam 模块,但您可以使用 pam_exec.so 来执行此操作。像这样的事情(我承认,我不确定其安全影响):

auth       sufficient pam_exec.so seteuid quiet /usr/local/sbin/pam-same-user

哪里/usr/local/sbin/pam-same-user有这样的脚本:

#!/bin/sh

[ "$PAM_USER" = "$PAM_RUSER" ]

我想再次强调,我不确定这样做的安全影响。

相关内容