这个bash脚本有什么问题?

我发现一个initscript由于某种原因坚持以root用户身份启动指定的应用程序。 我无法围绕为什么这样做,任何提示? 该脚本在Redhat Enterprise Linux 5.9上运行。

#!/bin/bash # # Start/Stop apfe. # # chkconfig: - 62 38 # description: apfe # Start script for an apfe process. # Apfe does not normally run as root, so we change user # and call the real script in $USERDIR. STARTUSER=apfe USERDIR=/app/apfe/apps/apfeutils/bin PROGNAME=apfe su - $STARTUSER -c "$USERDIR/$PROGNAME $*" 

请注意, su - means命令也必须在用户loginshell加载用户环境中启动。 如果出于安全原因,loginshell是/bin/false ,应该有问题。

尝试将su更改为sudo -u $STARTUSER ...并且可能会在/etc/sudoers中为该命令进行优化设置。

我看到一个潜在的问题,那就是没有su二进制文件的完整path,也不能保证你有一个$ PATH。 我的首选解决scheme是在源文件/etc/init.d/functions之后使用runuser而不是su (请参阅postgresql启动文件和man runuser的详细信息),另一种解决scheme是使用su二进制文件的完整path。 也可能有其他解决scheme。 当然,这可能不是你所面临的问题,但它回答了你的问题,“什么似乎是错的”。 🙂