Вопрос или проблема
Я прочитал много обсуждений про исследование 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
lsof -p 6427 :
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
lsof -p 6438 :
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, работающем под управлением Red Hat 7.9, может показаться сложной ввиду ограничений традиционных инструментов, таких как lsof
. Однако, понимание работы сетевой файловой системы (NFS) и операционной системы в целом позволяет находить решения даже в таких случаях.
Теория
NFS (Network File System) предназначена для того, чтобы предоставлять доступ к файловой системе удаленно. В контексте процесса nfsd
, который выполняет непосредственно службу демона NFS для предоставления этих сетевых файловых ресурсов, есть несколько уровней сложности, связанных с мониторингом файловых операций.
-
Мониторинг процессов и файловых операций: Не все инструменты для мониторинга файловых операций подходят для NFS, потому что операции выполняются сетевым демоном, не взаимодействуя напрямую с традиционными файловыми дескрипторами, которые можно увидеть через стандартные системные вызовы. Это отличает NFS от локальных процессов.
-
Ограниченность
lsof
:lsof
предоставляет информацию о файлах, к которым обращается процесс по файловым дескрипторам. Однако nfsd обрабатывает запросы на уровне сетевого протокола, что делает традиционный подход сlsof
менее полезным. -
Отсутствие прямого доступа к системе: В ситуации, когда у вас нет root-прав, задачи по мониторингу становятся труднее, так как многие инструменты и директории, такие как
/proc
, могут быть недоступны.
Примеры
Проблема с lsof
, показывающим только общую информацию о процессе nfsd, типична для многих системных администраторов. Пример вывода команды lsof
, который был приведен, демонстрирует отсутствие специфики — только базовую информацию о текущем рабочем каталоге и пути до исполняемого файла.
Тем не менее, существует несколько методов и утилит, которые могут помочь в выявлении файловых операций, выполняемых через NFS:
-
Использование
auditd
: Это служба аудита, которая позволяет отслеживать системные события и записи аудита. Она может записывать детализированную информацию о доступе к файлам, однако требует настроек на стороне root:auditctl -w /path/to/nfs/share -p rwxa -k nfs-access ausearch -k nfs-access
-
Использование
tcpdump
иwireshark
: Если настройки аудита недоступны, можно использовать сетевые пакеты для отслеживания. Однако, это сложнее и требует анализа сетевой активности:tcpdump -i eth0 -w nfs_traffic.pcap
Затем, файл
.pcap
можно открыть в Wireshark и отфильтровать по NFS-протоколу для анализа операций.
Применение
Если указанные решения все еще недоступны из-за ограниченных прав, возможно использование следующих подходов:
-
Настройка log файлов на стороне клиента NFS: Это может дать представление о том, к каким файлам идут запросы. Журналы могут содержать косвенные указания на операции с файлами.
-
Удаленный анализ: Если возможно получить помощь системного администратора с необходимыми правами, можно нанести системные изменения через
auditd
или дать временные привилегии для глубокого анализа. -
Анализ сетевого трафика в Wireshark: В случае отсутствия других возможностей, рекомендуется использовать Wireshark для захвата сессий и последующего детализированного анализа запросов. И хотя непосредственно Wireshark не предоставляет путь к файлам, внедрение дополнительных фильтров и анализ patterns может помочь восстановить полный контекст.
Заключение
Анализ файловых операций nfsd
— это трудоемкий процесс, но возможно. Это требует комбинации инструментов мониторинга, глубокого понимания работы сетевых демонов и возможного повышения привилегий. В условиях ограниченного доступа без прав root, наибольшая эффективность достигается с помощью настройки аудитинга и глубокого анализа сетевого трафика.