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

标签 bash privileges sudo monit su

我有一个用 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/

相关文章:

perl - 以编程方式具有特殊字符的scp

python - 错误的命名链接搜索和替换

database - 授予对 future 在 PostgreSQL 中创建的模式的使用权和特权

java - 用户 'root' @'localhost' 的访问被拒绝(使用密码 : YES): PhpMyAdmin

linux - 如何在Linux服务器上不使用sudo安装git

bash - 高效、干净的 awk 变量导出

bash - 为什么在 bash 语句中的 if 中错误地使用 <> 会创建文件?

postgresql - 如何使具有权限的一个用户postgresql仅执行功能

ubuntu - 尝试通过 ssh [ubuntu] 恢复我的服务器的 sudo 密码

java - 如何设置 SUDO_ASKPASS 环境变量?