0

我遇到了 capistrano 和 sidekiq monit 的问题。

我为 capistrano 设置了一个用户,在我安装 Sidekiq 之前,一切都很顺利。

我的问题是当我尝试执行时cap staging sidekiq:monit:configsidekiq:monit:start具有相同的权限问题)。每次我尝试过时,它都会“冻结”,因为它要求输入密码。

然后我尝试设置sidekiq_monit_use_sudo为false。没关系,它不使用sudo,但是它没有权限复制/tmp/monit.conf/etc/monit/conf.d/文件夹中。

这是我第一次设置服务器,我有点迷路了=| 也许尝试手动配置sidekiq monit?

我正在使用 ruby​​ 2.5 和这些宝石:

  • 卡皮斯特拉诺 3.10
  • capistrano-sidekiq 1.0
  • 导轨 5.1

此外,我将:pty配置设置为,true因为我不使用密码感到不舒服。

谢谢!

4

1 回答 1

0

您有几个选项,我将定义其中两个,正确的一个和简单/坏的一个。

本地用户监控

我个人对 Monit 的使用是在我没有 root 访问权限的共享服务器上。所以我以非 root 用户身份运行 Monit。

为了做到这一点,我编译了 Monit 的前缀为$HOME/apps,因此配置文件位于$HOME/apps/etc. 这避免了 sudo 问题。如果您有权访问包管理器并以这种方式安装了 Monit,则可以使用参数以用户身份运行 monit-c来定义它应该在哪里查找配置文件:

monit -c $HOME/config/monitrc

为了让 Capistrano 识别本地监视器,您需要一些额外的参数config/deploy.rb

#set :monit_bin, '/usr/bin/monit' # Use this if you compile monit yourself.
set :sidekiq_monit_conf_dir, '/home/myuser/config/monit.d' # Feel free to customize.
set :sidekiq_monit_use_sudo, false

在您使用该选项定义的 monitrc 文件中-c,您需要确保您定义的任何文件夹都:sidekiq_monit_conf_dir通过包括:

include /home/myuser/config/monit.d/*.conf

因为我没有初始化系统,所以我让 Cron 每 30 分钟启动一次 Monit,如果它已经在运行,那就是 noop:

# Restart monit if it dies
*/30 * * * * $HOME/apps/bin/monit > /dev/null

如果您具有 root 访问权限,则可以通过使用 init 脚本(或systemd 单元文件)以本地用户身份启动 Monit来改进这一点。

错误的选择:让您的用户访问 conf 目录

您可以编辑/etc/monit/monitrc以包含您的本地用户配置目录,如上所述。同样,您可以允许您的用户写入/etc/monit/conf.d. 这些解决方案的主要缺点是您现在允许非 root 用户创建将以 root 身份执行的文件,从而打开权限提升漏洞。如果您的用户曾经被入侵,您当然不希望攻击者有一个简单的方法来获取 root。

我之所以包含此选项,主要是因为它被普遍考虑,并且在绝大多数情况下(例如当您关心安全性时)应避免使用。但是,这在偶尔的极少数情况下可能很有用(例如,当您有一个短期服务器供内部使用,仅在防火墙后面,只有受信任的用户,并且您需要快速设置它时)。

于 2018-03-27T12:07:32.587 回答