一尘不染

以其他用户身份运行Linux服务的最佳实践

linux

服务默认root在启动时在我的RHEL盒上启动。如果我没记错的话,其他使用init中的init脚本的Linux发行版也是如此/etc/init.d

您认为使流程以我选择的(静态)用户身份运行的最佳方法是什么?

我到达的唯一方法是使用类似以下内容的方法:

 su my_user -c 'daemon my_cmd &>/dev/null &'

但这似乎有点不整洁…

是否存在一些魔术,可以提供一种简单的机制来像其他非root用户一样自动启动服务?

编辑:
我应该说,我在此实例中启动的进程是Python脚本或Java程序。我不想在它们周围编写本机包装,所以不幸的是,我无法按照Black的建议调用setuid()


阅读 536

收藏
2020-06-02

共1个答案

一尘不染

在Debian上,我们使用该start-stop-daemon实用程序,该实用程序可以处理pid文件,更改用户,将守护程序置于后台等等。

我不熟悉RedHat,但是daemon您已经在使用的实用程序(在/etc/init.d/functions,btw中定义)被等同于所提及start- stop-daemon,因此它既可以更改程序的uid,也可以更改您的操作方式它已经是正确的了。

如果您环顾网上,可以使用几种现成的包装纸。有些甚至可能已经打包在RedHat中。看一下daemonize,例如。

2020-06-02