服务默认在我的 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/