如何以其他用户身份运行脚本中的命令?

如何以其他用户身份运行脚本中的命令?

我需要让一个脚本以另一个用户的身份运行其大部分命令,但不想指示我的用户通过 sudo 调用它。使用 EOF 运行命令这里的文件不可行,因为有很多变量需要从输入传递到脚本定义的各种函数中。有没有其他方法可以让我以另一个用户的身份运行这些函数,同时保留输入和变量?可以不调用一堆外部文件或向近 300 个命令添加 sudo 来实现这一点吗?

答案1

您可以使用su在 Bash 脚本中执行如下命令:

su -c "command" -s /bin/sh Username

其中-c参数指定将单个命令发送给shell并-s用于指定调用哪个shell该命令。

另一种方法是使用 sudo,如下所示:

sudo -H -u Username bash -c "command" 

-h参数是一个安全策略,允许您设置环境变量指定用户(默认为 root).-u指定运行该命令的用户。

答案2

把它放在调用主要函数之前对我来说很有效:

    if [ "`whoami`" != "runasuser" ]; then
        sudo -u runasuser bash "$0" "$@"
        exit
    fi

这将以您选择的用户身份在子 shell 中调用当前脚本并将您的所有输入传递给它。

相关内容