gpt4 book ai didi

bash - 以受限用户身份运行 monit 并使其监视需要 root 权限的进程

转载 作者:行者123 更新时间:2023-11-29 09:41:35 25 4
gpt4 key购买 nike

我有一个用 Ruby 编写的特定脚本,需要 root 权限。大多数其他进程不需要它,因此很容易在 Monit 中设置。不是这个。

服务器需要监听386,该端口仅对root可用。我不会详细说明原因,因为 1) 我不是一个低级的人,2) 到目前为止,使用 sudo 时效果很好。

monit 配置文件很简单,如下所示:

set logfile syslog facility LOG_daemon # Default facility is LOG_USER
set mailserver smtp.sendgrid.net
username "blah", password "blah"
with timeout 20 seconds
set alert <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="593b353831193b353c31773a3634" rel="noreferrer noopener nofollow">[email protected]</a>
set logfile /home/deploy/monit.log


check process ldapserver
with pidfile /var/pids/ldap_server.pid
start program = "/usr/local/bin/ruby /var/lib/ldap_server.rb"
stop program = "/bin/sh"

注意:我已将/bin/sh 放入停止程序中,因为此进程没有停止程序。

如果我这样说:

start program = "/usr/local/bin/ruby /var/lib/ldap_server.rb"

无法启动。没有任何提示。

start program = "/usr/bin/sudo -u deploy /usr/local/bin/ruby /var/lib/ldap_server.rb

也失败了。无输出。

start program = "/bin/su deploy -c '/usr/local/bin/ruby /var/lib/ldap_server.rb'

启动失败。

我还尝试使用 > ~/out.log 2 > &1 重定向输出来捕获 stderr 和 stdout,但它似乎不起作用。

现在,我在受限制的部署用户下启动 monit。因此,我需要以某种方式以 root 身份运行 ldap 服务器,但事实证明这很难做到。

有人可以启发我吗?

干杯,

中号

最佳答案

使用 sudosu 以“部署”用户身份运行脚本不会有帮助(因为 monit 已经以该用户身份运行,并且需要以 root 身份运行)。

此外,sudo 默认情况下会提示输入密码,而 monit 无法提供该密码。

解决此问题的一种方法是创建一个文件 /usr/bin/startLDAPServer.sh 并使其可执行 (chmod a+x/usr/bin/startLDAPServer.sh) 包含以下内容:

#!/bin/sh
/usr/local/bin/ruby /var/lib/ldap_server.rb

然后将此行添加到您的 /etc/sudoers 文件中:

deploy ALL =NOPASSWD:/usr/bin/startLDAPServer.sh

然后您可以使用:

start program = "/usr/bin/sudo /usr/bin/startLDAPServer.sh"

在监控中。

关于bash - 以受限用户身份运行 monit 并使其监视需要 root 权限的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6542830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com