Systemd PrivateTmp=true 安全隐患

Systemd PrivateTmp=true 安全隐患

我使用以下工具监控 Ubuntu 服务器上的可用磁盘空间Nagios 核心国家可再生能源计划检查磁盘

使用以前的 Ubuntu 版本时,我曾经得到类似这样的输出:

DISK OK - free space: / 43754 MB (80% inode=86%):

在 Ubuntu 18.04.1 上,我得到:

DISK OK - free space: /var/tmp 43754 MB (80% inode=86%):

/var/tmp我看到了根分区的错误挂载点/。我跟踪发现此行为依赖PrivateTmp=truenagios-nrpe-server.service

  • 我去查看了一下/var/tmp,发现了一个名为systemd-private-c5b5d3d362364af19af640147f2cb844-nagios-nrpe-server.service-4uILRy
  • 然后检查了服务定义并注意到PrivateTmp=true(例如NRPE2在 Ubuntu 16.04 上)
  • 最后,尝试删除该行,然后检测到根挂载点为/

我觉得我面临三种选择:

  1. 忍受它。

  2. 消除PrivateTmp=true

  3. 找到一个合理的解决方法。

我倾向于接受它,但如果我更多地意识到没有私人/tmp服务的后果,我就可以对选项 2 做出明智的选择。

最佳解决方案可能是找到一种解决方法,check_disk即使在这种情况下也指示返回正确的挂载点信息。无法访问系统/tmp不应成为障碍。

问题:请说明的含义PrivateTmp=true,解释为什么建议这样做以及在什么情况下以及在什么条件下可以将其删除。

次要问题:是否有一个合理的解决方法,check_disk或者等效的工具即使在由带有的服务运行时也能显示正确的根挂载点PrivateTmp=true


附加信息:

完整命令为:/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/mapper/vg-root。在本地运行时,即使使用用户nagios,输出也会正确显示/。从 Nagios 服务器远程运行时:/usr/local/libexec/nagios/check_nrpe2 -H 192.168.1.2 -c check_root,输出显示/var/tmp而不是预期的/

答案1

我可以通过提供块设备check_disk而不是挂载点来重现此行为。

例如:

root@cosmic:~# grep check_root /etc/nagios/nrpe.cfg 
command[check_root]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/sda1
root@cosmic:~# /usr/lib/nagios/plugins/check_nrpe -H 127.0.0.1 -c check_root
DISK OK - free space: /var/tmp 6451 MB (68% inode=78%);| /var/tmp=3033MB;8010;9011;0;10013
root@cosmic:~# /usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/sda1
DISK OK - free space: / 6451 MB (68% inode=78%);| /=3033MB;8010;9011;0;10013

但是通过使用挂载点,我得到了预期的行为:

root@cosmic:~# grep check_root /etc/nagios/nrpe.cfg 
command[check_root]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /
root@cosmic:~# /usr/lib/nagios/plugins/check_nrpe -H 127.0.0.1 -c check_root
DISK OK - free space: / 6451 MB (68% inode=78%);| /=3033MB;8010;9011;0;10013
root@cosmic:~# /usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /
DISK OK - free space: / 6451 MB (68% inode=78%);| /=3033MB;8010;9011;0;10013

此行为似乎与PrivateTmp=systemd 单元中的设置有某种关联。当我从 中删除它时nagios-nrpe-server.servicecheck_disk在给定块设备时也会返回预期结果。我尝试了一下刚刚运行的简单服务/bin/dfPrivateTmp=true但没有发现任何明显的问题。它也返回了正确的结果。

我建议,如果您确实需要能够通过块设备而不是挂载点检查磁盘,最好的办法是向 Nagios NRPE 开发人员报告问题,以便他们可以深入研究代码并找到问题所在。

相关内容