这玻璃鱼应用程序服务器提供脚本来管理应用程序服务器并启动和停止它们,我想限制 root 用户运行此脚本。原因是一些关键开发人员忘记以非特权用户身份管理服务器,如果他们以 root 用户身份重新启动应用程序服务器,则应用程序服务器必须由 root 用户运行 [*]。
避免授予 root 访问权限并不是一种选择,但开发人员却忘记了,因为他们习惯于在本地计算机上执行此操作。我希望asadmin
脚本可以更改为以非特权用户身份运行,或者可以选择在每次由 root 运行脚本时显示错误消息。
使用 Bash shell。
[*]:我尝试修复文件的权限,但即使我已经追踪到 root 拥有的许多文件并对其进行 chmod,应用程序仍然遇到奇怪的错误,我必须再次以 root 身份运行。
答案1
与其他答案类似,但朝着您想要的方向。
if [[ $EUID -eq 0 ]]; then
echo "This script must NOT be run as root" 1>&2
exit 1
fi
或者,您可以sudo
在脚本中使用该标志来强制以非特权用户身份执行,-u
以指定要运行的用户。我不使用 Glassfish,但这里有一个原始示例伪脚本。
#!/bin/bash
if [ $1 == "start" ]; then
sudo -u nobody /usr/bin/glassfish
fi
希望你明白了。抱歉,我真的不知道脚本是什么样子,也不知道非特权用户的名称。
答案2
@Tshepang 有正确的想法。我不知道哪个最便携,但这里还有其他方法来检测用户是否是 root:
id -u
$UID
或者,您可以简单地强制它以具有相同参数的另一个用户身份运行:
if [[ "$USER" != appuser ]]
then
exec sudo -u appuser "$0" "$@"
fi