无法在 Ubuntu 22.04 上的 nagios 客户端上读取文件

无法在 Ubuntu 22.04 上的 nagios 客户端上读取文件

我刚刚在 Ubuntu 22.04 上安装了 nagios 和 nrpe-version nrpe-4.1.0。它是一台连接到 nagios 服务器的主机。当我通过检查来运行脚本时/usr/local/nagios/libexec/check_sync.sh。这在用户“ubuntu”下运行良好,但如果我通过

sudo su nagios -c "/usr/local/nagios/libexec/check_sync.sh"

出现错误

cat: /home/ubuntu/health.txt: Permission denied

bash: [: =: unary operator expected

与 nagios 服务器尝试检查时遇到的错误相同。基本上,不要认为在用户“nagios”下它能够读取该文件。我尝试更改该文件的权限,但没有用。这是我第一次在 Ubuntu 22.04 上运行 nrpe,不确定它是否已链接。当我执行时,它会出现相同的错误:

sudo su - nagios -c "cat /home/ubuntu/health.txt"

该文件确实存在,并且所有人都有权读取。脚本以以下内容开头:

#!/bin/bash -i

有什么想法可以解决这个问题吗?

#更新#

在 ubuntu LTS 22.04 上运行:Cronjob 运行一个命令,将 health.txt 文件放入

/home/ubuntu/health.txt

下面的脚本位于:

/usr/local/nagios/libexec/check_sync.sh

脚本运行以查看字符串值为 false 或 true

#!/bin/bash -i
catchup=$(cat /home/ubuntu/health.txt | awk -F"," '{print $20}' | awk -F"}" '{print $1}'| awk -F":" '{print $2}')
if [ $catchup = "false" ]; then
        echo "Node is synced"
        exit 0
else
        echo "Not Synced"
        exit 2
fi

如果我只运行脚本,它可以正常工作并给出值。

但是如果我运行:sudo su nagios -c "/usr/local/nagios/libexec/check_sync.sh" 我得到:

bash: cannot set terminal process group (110223): Inappropriate ioctl for device
bash: no job control in this shell

cat: /home/ubuntu/health.txt: Permission denied
bash: [: =: unary operator expected
Not Synced

我尝试将 health.txt 的目录从 /home/ubutu/ 更改为 /tmp/health.txt 以便用户 nagios 可以读取它,所以现在当我运行:

sudo su nagios -c "/usr/local/nagios/libexec/check_sync.sh"
bash: cannot set terminal process group (170765): Inappropriate ioctl for device
bash: no job control in this shell
Node is synced

但是,仍然在 nagastamon 上运行显示为“未同步”,这意味着它仍然无法正确读取文件。

namei -l /home/ubuntu/health.txt

f: /home/ubuntu/health.txt
drwxr-xr-x root   root   /
drwxr-xr-x root   root   home
drwxr-x--- ubuntu ubuntu ubuntu
-rw-rw-r-- ubuntu ubuntu health.txt

答案1

您的目录/home/ubuntu仅限于用户和组ubuntu,没有其他人可以进入此目录,包括用户nagios

允许nagios访问文件夹(以及文件)的选项:

  • 允许其他用户访问目录

    chmod o+rx /home/ubuntu
    
  • 将 nagios 添加到 ubuntu 组

    sudo adduser nagios ubuntu
    
  • 使用 ACL 允许 nagios 访问目录

    setfacl -m u:nagios rx /home/ubuntu
    

第二个错误只不过是由于第一个错误而发生的后续错误。

您可以通过将变量括在引号中来防止这种情况:

if [ "$catchup" = "false" ]; then

你应该养成这样的习惯,它可以帮助你避免很多可能的错误。

相关内容