我有一个从([ba] sh)shell脚本执行的Java应用程序,不幸的是,有时负责部署和启动它的人员在启动应用程序之前无法切换到适当的用户。在这种情况下,我希望应用程序至少不运行,并且理想情况下发出警告不要这样做。我想过尝试别名java或更改root的路径以包含一个假的java,但是这可能有不良的副作用,并且由于shell脚本指定了java二进制文件的完整路径,所以不会轻易有效。
那么,在shell脚本中是否存在一个标准习惯用法,如果我是root用户则不要运行?
答案 0 :(得分:13)
bash中的示例:
if [ `id -u` = 0 ]; then
echo "You are root, go away!"
exit 1
fi
答案 1 :(得分:1)
在BASH中,您可以获取whoami
的输出并将其与root
进行比较。
答案 2 :(得分:1)
我在我想要的脚本开头使用这样的东西 在服务帐户下运行:
LUSER='my-service'
if [ `id -un` != $LUSER ]; then
exec su $LUSER -s $SHELL -c "$0 $@"
fi
# actual script commands here.
如果以正确的用户身份运行,执行将按计划继续。如果运行 以root用户身份将权限删除到所需的用户ID。其他用户 会得到一个密码提示,告诉他们有什么东西 错。
su -s $SHELL ...
用于覆盖/etc/passwrd
中的shell集
- 服务帐户可以设置为/bin/false
。
我在Debian系统上使用了bash
和dash
。随意
评论是否可以改进便携性。