Назад | Перейти на главную страницу

Systemd PrivateTmp = реальные последствия для безопасности

Я контролирую доступное дисковое пространство на серверах Ubuntu, используя Nagios Core, NRPE и check_disk.

В предыдущих версиях 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=true в nagios-nrpe-server.service:

Я чувствую, что передо мной три варианта:

  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 вместо ожидаемого /.

Я могу воспроизвести это поведение, предоставив блочное устройство 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.service, затем check_disk возвращает ожидаемый результат при наличии блочного устройства. Я немного поигрался с тривиальным сервисом, который только что запустил /bin/df с участием PrivateTmp=true но я не мог найти там очевидной проблемы. Он также вернул правильные результаты.

Я бы посоветовал, если вам действительно нужна возможность проверять диски по блочному устройству, а не по точке монтирования, лучше всего сообщить о проблеме разработчикам Nagios NRPE, чтобы они действительно могли покопаться в коде и найти то, что это является.