我正在努力做个好人。这是我最大的错误。
我擅长进行过程监控:我使用 monit 监视一些关键过程,如果它们失败,就重新启动它们。
我不以 root 身份运行,这是件好事:Monit 运行一个 Web 服务器,我不想让它以 root 身份运行,以防出现安全问题。因此,我有一个特殊的“monit”用户,该用户具有启动和停止某些关键进程所需的权限,仅此而已。
monit 进程从 ~monit/.monitrc 文件读取,并且 monit 坚持该文件只能由其运行的用户(即 monit 用户)读取。
我将所有操作脚本和配置存储在源代码控制 (mercurial) 中,这样我就可以用相同的规格重建机器。我或其他开发人员将对脚本的更改签入源代码控制,然后将结果拉到生产机器上。符号链接从 ~monit/.monitrc 指向源代码控制目录。
然而,这就是所有问题所在——当我拉取最新脚本时,Mercurial 会将源代码控制目录写入其中,但是 pull 命令并未以 monit 的身份运行,因此 monitrc 文件可由其他用户写入...monit 不喜欢这样,因此不会运行。
我可以在每次拉取之前和之后不断地 chowning 和 chmodding monitrc 文件,但这充满了疏忽。
我不知道该如何要求 monit 放宽所有权限制。我也不知道 sticky bits 能起到什么作用。
有什么建议么?
答案1
你可以编写hg
一个脚本来调用hg
并处理权限。例如
!#/bin/bash
/usr/bin/hg.bin $@ && chmod 400 ~monit/monitrc && chown monit ~monit/monitrc
将脚本另存为/usr/bin/hg
(或hg
二进制文件安装的任何位置)并
mv /usr/bin/hg /usr/bin/hg.bin
chmod 744 ~monit/monitrc
假设您的普通用户有权限运行chmod
和chown
命令,那么应该可以工作。