我发现一个 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
二进制文件路径。可能还有其他可用的解决方案。当然,这可能不是您面临的问题,但它回答了您的问题“什么似乎不对劲”。:)