这个 bash 脚本有什么问题?

这个 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 $*"

答案1

请注意,这su -意味着命令必须在用户登录 shell 中启动,同时加载用户环境。如果出于安全原因,登录 shell 类似于/bin/false,则可能会出现问题。

尝试更改su该命令sudo -u $STARTUSER ...并可能对其进行精细设置。/etc/sudoers

答案2

我发现一个潜在的问题,即没有完整的二进制文件路径su,并且根本无法保证您有 $PATH。我首选的解决方案是使用runuser而不是su(请参阅postgresql启动文件和man runuser详细信息)在获取文件后/etc/init.d/functions,另一个解决方案是使用完整的su二进制文件路径。可能还有其他可用的解决方案。当然,这可能不是您面临的问题,但它回答了您的问题“什么似乎不对劲”。:)

相关内容