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
使用sudo或su运行脚本作为"部署"用户将无济于事(因为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.
| 归档时间: |
|
| 查看次数: |
5553 次 |
| 最近记录: |