【问题标题】:Running commands as different user from bash script以与 bash 脚本不同的用户身份运行命令
【发布时间】:2019-02-24 21:27:59
【问题描述】:

我有 2 个用户:usr1 和 usr2。也不是 root 用户。

usr1 启动一个 bash 脚本。从脚本中,我想以 usr2 的身份运行一些命令。 我知道这样做的方法是:

su -l <usr2> -c "command"

问题在于传递密码。这是 2 个具有不同权限的不同用户,因此,跳过 usr2 的密码不是一种选择。

此脚本可以进行交互,并要求用户输入密码。有没有办法在 bash 脚本中做到这一点?

注意:我不是脚本专家。在问这个问题之前我做了一些研究,但我找不到合适的答案。

【问题讨论】:

  • 在 sudoers 文件中添加 NOPASSWD 选项是否适合您?
  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super UserUnix & Linux Stack Exchange 会是一个更好的提问地点。
  • @Jason:不,安全是最重要的,跳过密码是一个很大的 NO
  • @jww 感谢您的指出。我会尝试其他论坛
  • 脚本在交互执行时不是已经提示输入 usr2 的密码了吗?能否包含 MCVE 和终端成绩单?

标签: linux bash shell unix scripting


【解决方案1】:

您可以尝试使用读取read man page 命令,参见下面的示例:

#!/bin/bash

read -s -p "Enter your password: " pass
echo $pass

在这种情况下,您需要使用 /bin/su -c 和 sudo -S

#!/bin/bash 

user=$1
read -s -p "Enter pass: " pass
cmd=$(echo $pass|sudo -S <some-command>)
su -c '$cmd' - $user

其中 user=$1 附加 bash 参数,在本例中为 usr2 的用户 ID,然后直接运行它

$sudo bash -x ./password.sh <target-user>

【讨论】:

  • 问题是如何使用此密码以 su -l 用户身份运行命令
  • 您可以尝试将 /bin/su 与 /usr/bin/sudo 一起使用,我更新了我的答案以反映这一点,但是,可能更好的方法是使用 linux 文件所有权和权限控制哪些用户可以通过组执行它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-05
  • 2010-11-22
  • 2010-10-08
  • 1970-01-01
  • 2010-11-04
  • 2017-06-11
相关资源
最近更新 更多