将monit作为受限用户运行,并使其监视需要root权限的进程

Ful*_*ine 2 bash privileges sudo su monit

我有一个用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 blah@bleh.com
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"
Run Code Online (Sandbox Code Playgroud)

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

如果我这样说:

start program = "/usr/local/bin/ruby /var/lib/ldap_server.rb"
Run Code Online (Sandbox Code Playgroud)

它无法启动.没有提示.

start program = "/usr/bin/sudo -u deploy /usr/local/bin/ruby /var/lib/ldap_server.rb
Run Code Online (Sandbox Code Playgroud)

也失败了.没有输出.

start program = "/bin/su deploy -c '/usr/local/bin/ruby /var/lib/ldap_server.rb'
Run Code Online (Sandbox Code Playgroud)

无法启动.

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

现在,我在部署用户下开始监控,这是受限制的.所以,我需要以某种方式以root身份运行ldap服务器,但事实证明这很难做到.

有人可以开导我吗?

干杯,

M>

小智 6

使用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
Run Code Online (Sandbox Code Playgroud)

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

deploy ALL =NOPASSWD:/usr/bin/startLDAPServer.sh
Run Code Online (Sandbox Code Playgroud)

然后你可以使用:

start program = "/usr/bin/sudo /usr/bin/startLDAPServer.sh"
Run Code Online (Sandbox Code Playgroud)

在monit.