linux - 以不同用户身份运行 Linux 服务的最佳实践

标签 linux sysadmin rhel init.d

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

您认为让进程作为我选择的(静态)用户运行的最佳方式是什么?

我想到的唯一方法是使用类似的方法:

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

但这似乎有点不整洁......

是否有一些神奇的东西可以提供一种简单的机制来以其他非 root 用户身份自动启动服务?

编辑:我应该说我在这个实例中启动的进程要么是 Python 脚本,要么是 Java 程序。我宁愿不围绕它们编写本地包装器,所以很遗憾我无法调用 setuid()Black建议。

最佳答案

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

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

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

关于linux - 以不同用户身份运行 Linux 服务的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/394984/

相关文章:

python - 乌尔都语字体的逆向渲染

windows - 获取目录总大小的 PowerShell 脚本

ruby-on-rails - Rails + Postgres 数据库 :migrate failing on missing data rather than generating it

linux - 如何定位 Rsync 进程的源位置

linux - 使用 linux 镜像托管 3rd 方 RPM

linux - LightDM 添加窗口管理器(Openbox)

c++ - Libev C++ 无法停止多线程应用程序中的动态循环

linux - Linux/Unix 应用程序的源代码最适合保存在哪里?

ssl - RHEL 导入自签名证书

c - Exec 调用在 Unix 中工作的说明