Как узнать, к каким файлам обращается процесс nfsd на Red Hat 7.9? lsof не отображает ничего полезного.

Вопрос или проблема

Я читал много обсуждений о расследовании nfs с помощью wireshark, но это не дает мне “глобального” вида всех файлов, к которым идет доступ через NFS.

На сервере NFS я знаю, что процесс NFS использует много активности диска:

выдержка из pidstat -p ALL -d:

05:11:48 PM     0      4970      0.00      1.20      0.45  rsyslogd
05:11:48 PM     0      4983      0.00      4.74      0.00  snmpd
05:11:48 PM     0      6438     26.97  46498.87  44951.28  nfsd
05:11:48 PM     0      6439     29.71  67677.59  52382.44  nfsd
05:11:48 PM     0      6440     32.23  91297.19  59268.11  nfsd
05:11:48 PM     0      6441     34.06 114280.26  65961.18  nfsd
05:11:48 PM     0      6442     35.88 134947.77  74024.66  nfsd
05:11:48 PM     0      6443     39.15 155449.00  83946.33  nfsd
05:11:48 PM     0      6444     45.73 162572.04  97760.24  nfsd
05:11:48 PM     0      6446     55.43 169127.98 130529.82  nfsd
05:11:48 PM   992      6787      5.40      7.09      0.00  java
05:11:48 PM  1002      7497      0.02     15.53      0.00  java
05:11:48 PM  1002      7588      0.11     66.64      4.90  java

обычно мы можем использовать lsof, чтобы узнать, какие файлы открыты процессом, но для nfsd это не отображает ничего интересного (настоящее имя файла или папки не показываются):

6427|nfsd4_callbacks
COMMAND    PID USER   FD      TYPE DEVICE SIZE/OFF NODE NAME
nfsd4_cal 6427 root  cwd       DIR  253,0     4096  128 /
nfsd4_cal 6427 root  rtd       DIR  253,0     4096  128 /
nfsd4_cal 6427 root  txt   unknown                      /proc/6427/exe
==============================
PID|PNAME
6438|nfsd
COMMAND  PID USER   FD      TYPE DEVICE SIZE/OFF NODE NAME
nfsd    6438 root  cwd       DIR  253,0     4096  128 /
nfsd    6438 root  rtd       DIR  253,0     4096  128 /
nfsd    6438 root  txt   unknown                      /proc/6438/exe

разве нет способа узнать, какие именно файлы открыты процессом nfsd? ОС может хранить информацию о дисковой активности процесса, но не может указать, какие именно файлы открыты?

может быть, есть способ взглянуть на /proc/6438/exe, чтобы узнать настоящий файл (я не могу, так как у меня нет root прав)?

если это действительно невозможно, есть ли скрипт или команда в wireshark, которая может извлечь из tcpdump все файлы в виде списка (болезненно делать это вручную + у меня есть только имя файла, а не полный путь)?

Ответ или решение

Вопрос, который вы подняли, о том, как определить файлы, доступные процессом nfsd на сервере NFS, и почему lsof не предоставляет необходимых данных, актуален для многих системных администраторов. В системах на основе Red Hat 7.9 есть несколько подходов, которые можно применить для решения этой задачи. Давайте разберём их подробно и предложим возможные решения с учетом вашего описания проблемы.

Теоретическая часть

Сервер NFS (Network File System) предоставляет возможность удалённого доступа к файловым системам через сеть. Процессы nfsd отвечают за обработку запросов на сервере. Поскольку NFS работает на уровне сети, он не привязан к файловой системе сервера так, как это делается в локальных файловых операциях. Это делает трудным доступ к списку конкретных файлов, с которыми работает nfsd, через стандартные инструменты вроде lsof.

Для мониторинга дисковой активности процессов, таких как nfsd, стандартные инструменты, такие как lsof и procfs, могут быть недостаточными, поскольку они настроены на отображение открытых файловых дескрипторов для локальных операций, а не для сети. В случае NFS основная работа происходит через сетевые интерфейсы, а не через файловые дескрипторы в традиционном смысле.

Пример

Вы отметили, что lsof не отображает необходимых данных. Это связано с тем, что nfsd не открывает файлы напрямую на сервере; вместо этого он предоставляет доступ к ним удалённым клиентам. Когда запрос на чтение или запись поступает через NFS, операция обрабатывается на уровне ядра, часто не оставляя информации в контексте процесса.

Попробуем рассмотреть, как можно было бы с этим работать. Допустим, у вас есть tcpdump-сниффинг, который может предоставить сетевой след NFS-трафика. Эти данные можно было бы проанализировать с помощью Wireshark или других анализаторов сетевых пакетов, чтобы попытаться восстановить полную картину взаимодействий. Однако, даже в этом случае возникающие затруднения связаны со сложностью анализа трафика и определения точных файловых путей.

Применение

  1. Использование Auditd: Red Hat предоставляет возможность мониторинга файловой системы с помощью auditd. Это может быть очень полезно для отслеживания файловых изменений или доступа к конкретным файлам. Вы можете настроить auditd для мониторинга каталога, экспортируемого NFS, чтобы получить отчёт о доступах:

    auditctl -w /path/to/nfs/export -p rwxa -k nfs-access
    ausearch -k nfs-access

    Эта команда добавит правило, которое будет регистрировать все попытки доступа к указанному каталогу.

  2. Wireshark: Как вы упомянули, Wireshark, хотя и не предоставляет "глобального" представления, может получить данные о сетевом обмене, которые затем можно анализировать в поисках интересующих файловых операций. Это может быть чрезмерно сложным, но предоставляет другой слой информации.

  3. Взаимодействие с сетевым трафиком: Используйте такие утилиты, как tcpdump, чтобы собирать сетевой трафик. Это может помочь в определении команды или IP-адреса клиента, запрашивающего доступ к файлам:

    tcpdump -i <interface> host <client_ip> and port 2049

Также стоит отметить, что прямая работа с /proc не даст информации, если вы не обладаете root-доступом, как упомянуто в вопросе.

  1. Политики SELinux: Если SELinux активирована, можно настроить политики отслеживания сетевых операций на уровне системы безопасности, которые могут помочь в идентификации использования ресурсов.

Каждый из этих методов занимает своё место в наборе инструментов системного администратора и может быть полезен в зависимости от конкретной ситуации и требований конфиденциальности данных. Рекомендуется применять несколько из них в комплексе для получения наиболее полного представления о сетевой активности и доступе к файлам в рамках nfsd.

Таким образом, хотя задача сложная, существует несколько стратегий её решения. Возможно, вы найдете подход, который наиболее эффективно соответствует вашей инфраструктуре и рабочей среде.

Оцените материал
Добавить комментарий

Капча загружается...