NFS4 и удаленные клиенты: как отобразить информацию?

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

На Linux с nfsv3 команда

showmmount -d

показывает удаленного клиента, который монтирует каталог на моем nfs сервере.
С nfs4 при удаленном монтировании каталога команда showmount не отображает ничего.
Как узнать, какие удаленные клиенты используют nfs сервер на моем локальном компьютере?

Решение найдено.

netstat -ta | grep nfsd|grep ESTA|awk '{print $5}'|cut -d : -f 1

или

ss -rta | grep nfsd|grep ESTA|awk '{print $5}'|cut -d : -f 1

и показать всех моих подключенных клиентов.

Чтобы показать открытые каталоги и используемые файлы, мы можем запросить старый добрый procfs.
Предположим, мой клиент идентифицируется как 215

cd /proc/fs/nfsd/clients/215

Я вижу 3 файла

ctl  info  states

в файле info я могу увидеть IP, используемый порт, имя хоста клиента

clientid: ******************
address: "192.168.0.2:850"
status: confirmed
name: "Linux NFSv4.2 myclient.host.example"
minor version: 2
Implementation domain: "kernel.org"
Implementation name: "Linux 6.1.12 #1 SMP PREEMPT_DYNAMIC Sat Feb 18 16:45:16 CET 2023 x86_64"
Implementation time: [0, 0]
callback state: UP
callback address: 192.168.0.2:0

файл state показывает используемые файлы, разрешения и другую информацию

cat states

- ***********: { type: open, access: r-, deny: --, superblock: "00:18:4627", filename: "video/My vacations.mp4", owner: "open id:******************" }
- *********************: { type: deleg, access: r, superblock: "00:18:4627", filename: "video/My vacations.mp4" }

так как NFSv4 использует только порт tcp/2049, вы можете просто проверить подключенных nfs клиентов на сервере, используя:

ss -tano state established sport nfs

rpcctl покажет информацию о текущих клиентах:

# rpcctl client
clnt-0: switch-0, xprts 1, active 1, queue 0
        xprt-0: tcp, 2001:db8::ff:10 [main]
clnt-1: switch-1, xprts 1, active 1, queue 0
        xprt-1: tcp, 127.0.0.1
clnt-2: switch-2, xprts 1, active 1, queue 0
        xprt-2: local, /var/run/gssproxy.sock [main]

(xprt — сокращение от ‘transport’ и представляет собой IP или UNIX сокет).

Это будет включать клиентов, которые подключились, даже если у них нет открытых файлов.

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

В мире информационных технологий и особенно в контексте управления серверами, администраторы часто сталкиваются с необходимостью отслеживания активности удаленных клиентов на серверах NFS (Network File System). Вопрос о том, как идентифицировать клиентов, использующих NFS-сервер на вашей локальной машине, особенно актуален для NFS версии 4 (NFSv4), ввиду некоторых отличий от NFSv3 в методах мониторинга соединений.

Теория: Понимание NFSv4 и инструмента showmount

Изначально NFS был разработан для обеспечения прозрачного доступа к файловым системам через сеть. Одной из ключевых возможностей NFS является то, что клиенты могут монтировать удаленные файловые системы и работать с ними, как если бы они были локальными. Для NFSv3 администратору часто достаточно было использовать команду showmount -d, чтобы получить список клиентов, монтирующих директории на сервере. Однако с переходом на NFSv4, команда showmount стала практически бесполезной, так как NFSv4 не сохраняет в явном виде информацию о монтировании, доступную инструментам, аналогичным showmount.

Пример и применение решения: Отслеживание клиентов в NFSv4

Чтобы отследить, какие удаленные клиенты действительно используют NFS-сервер на машине, можно применить несколько альтернативных подходов, опираясь на возможности сетевых утилит и файловой системы procfs.

  1. Использование netstat и ss:

    Для выявления активных NFS-сессий можно воспользоваться утилитами netstat и ss. Эти команды позволяют выводить сетевые соединения, фильтровать их по порту и состоянию:

    netstat -ta | grep nfsd | grep ESTA | awk '{print $5}' | cut -d : -f 1

    или

    ss -rta | grep nfsd | grep ESTA | awk '{print $5}' | cut -d : -f 1

    Эти команды позволяют отобразить IP-адреса клиентов, которые установили активное соединение с NFS-сервером, используя порт, выделенный для NFS (обычно это TCP/2049).

  2. Процессы в procfs:

    Более подробную информацию можно получить, анализируя файлы в каталоге /proc/fs/nfsd/clients/. Каждый подкаталог, представленный в виде уникального идентификатора (например, 215), соответствует отдельному клиенту:

    cd /proc/fs/nfsd/clients/215

    Внутри таких директорий находятся файлы ctl, info и states. Файл info содержит данные об IP-адресе, используемом порте, имени хоста и другой информации, связанной с клиентом. Файл states предоставляет информацию о текущих открытых файлах, их владельцах и режимах доступа.

  3. Использование rpcctl:

    Утилита rpcctl позволяет вывести информацию о текущих клиентах посредством их транспортов (xprts), будь то TCP или UNIX сокеты:

    rpcctl client

    Вывод этой команды помогает идентифицировать пользователей, которые установили соединения с сервером, независимо от того, загружены ли у них какие-либо файлы на текущий момент. Это особенно полезно для мониторинга активности клиентов с целью аудита и безопасности.

Заключение

Переход на NFSv4 потребовал от системных администраторов адаптации методов мониторинга соединений. Команды showmount, которые служили основным инструментом в предыдущих версиях, теперь дополняются более современными и гибкими подходами, такими как использование netstat, ss и анализа содержимого procfs. Применение указанных методов позволяет с высокой степенью точности управлять и отслеживать сети, обеспечивая высокую степень безопасности и контроля за системой.

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

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