为什么我必须从守护进程sudo命令?

时间:2015-03-20 02:59:30

标签: linux bash erlang daemon sudo

我遇到关于sudo的问题。

我从守护进程调用了一个Erlang脚本。 (此守护进程由xinetd定义,此进程将在其中执行bash脚本。我将我的Erlang脚本命令写入bash脚本)。 Erlang脚本就像:

#! /usr/bin/env escript
main(_) ->
    ok.

脚本非常简单,当我在shell命令行下执行它时,它是可以的。

但是当我从守护程序进程调用它时,它失败了,返回码为非零。我真的不知道。

当我尝试sudo /path/to/my/erlang_script时,它会变好!!

我自己是root。为什么我必须添加sudo

我的xinetd conf就像:(你可以看到'用户'设置为'root')

service gtpgwagent
{
        type            = UNLISTED
        flags           = REUSE
        disable         = no
        socket_type     = stream
        protocol        = tcp
        wait            = no
        user            = root
        instances       = UNLIMITED
        server          = /lab/subsysserv/sbin/in.gtpgwagent
        server_args     = gtpgw
        log_type        = FILE /tmp/ggsnagent_logfile
        log_on_success  += DURATION USERID HOST EXIT
        log_on_failure  += USERID HOST
        env             = /usr/bin:/bin
        port            = 1761
}

1 个答案:

答案 0 :(得分:2)

守护进程既不是以root用户身份运行,也不是以有权运行该脚本的用户运行(或者,最常见的情况是,不允许执行该脚本所做的事情),所以事情不好意思。

以root身份运行,所以无论你尝试什么总是有效(这有点可怕,所以要小心)。

更改脚本的权限以适应xinetd设置守护进程用户的任何内容,并确保脚本执行的任何操作都是守护进程用户可以执行的操作。但是,无论你做什么,设置一个守护进程以root身份运行 - 这只是一个等待发生的事故(或破解)。

修改

RHEL 6.x几乎可以保证阻止以root身份运行的守护进程执行几乎任何