如果我在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" ]
我想再次强调,我不确定这样做的安全影响。