我遇到关于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
}
答案 0 :(得分:2)
守护进程既不是以root用户身份运行,也不是以有权运行该脚本的用户运行(或者,最常见的情况是,不允许执行该脚本所做的事情),所以事情不好意思。
你以root身份运行,所以无论你尝试什么总是有效(这有点可怕,所以要小心)。
更改脚本的权限以适应xinetd设置守护进程用户的任何内容,并确保脚本执行的任何操作都是守护进程用户可以执行的操作。但是,无论你做什么,不设置一个守护进程以root身份运行 - 这只是一个等待发生的事故(或破解)。
修改强>
RHEL 6.x几乎可以保证阻止以root身份运行的守护进程执行几乎任何。
setenforce 0
,然后运行测试,然后执行setenforce 1
将其重新打开)。useradd -r [blahblah]
)。