我需要让一个脚本以另一个用户的身份运行其大部分命令,但不想指示我的用户通过 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 中调用当前脚本并将您的所有输入传递给它。