以非root用户身份启动服务

时间:2015-02-26 20:23:38

标签: bash ubuntu service debian init.d

有人可以帮助我们了解如何正确启动我们的程序服务作为服务用户(例如marty)。

我们正在使用init.d启动我们的进程(java应用程序),但是当系统引导(Ubuntu和Debian)因为服务脚本以root身份运行时,我们遇到了问题应用程序也以root用户身份启动,并且root文件正在创建PID文件,这会搞砸事情。

我们尝试使用sudo,但这不是一个很好的解决方案,因为我们不希望sudo进程也运行我们的应用程序作为子进程加上我们需要这个在其他可能没有sudo的系统上运行。请帮忙。

2 个答案:

答案 0 :(得分:0)

在init脚本中,您可以检查主叫用户的$ UID。

如果是root,则可以使用" runuser"运行该服务。如果它是marty - 直接运行它,如果是另一个用户 - 例如退出错误。

这里有一些例子bash(未经测试):

start() {
    if [ $UID -eq 0 ]; then
        runuser -s /bin/bash marty -c "$DAEMON start $DAEMONOPTS"
    elif [ "$USER" = "marty" ]; then
        $DAEMON start $DAEMONOPTS
    else
        print "Please run me with root or marty."
        exit 2
    fi
}

相同的停止和任何其他功能。

根据需要随意修改runuser命令,例如,您可能不需要shell。

答案 1 :(得分:0)

使用 start-stop-daemon ,它接受用户名和可执行文件作为参数。