Вопрос или проблема
На 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.
-
Использование 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).
-
Процессы в procfs:
Более подробную информацию можно получить, анализируя файлы в каталоге
/proc/fs/nfsd/clients/
. Каждый подкаталог, представленный в виде уникального идентификатора (например, 215), соответствует отдельному клиенту:cd /proc/fs/nfsd/clients/215
Внутри таких директорий находятся файлы
ctl
,info
иstates
. Файлinfo
содержит данные об IP-адресе, используемом порте, имени хоста и другой информации, связанной с клиентом. Файлstates
предоставляет информацию о текущих открытых файлах, их владельцах и режимах доступа. -
Использование rpcctl:
Утилита
rpcctl
позволяет вывести информацию о текущих клиентах посредством их транспортов (xprts), будь то TCP или UNIX сокеты:rpcctl client
Вывод этой команды помогает идентифицировать пользователей, которые установили соединения с сервером, независимо от того, загружены ли у них какие-либо файлы на текущий момент. Это особенно полезно для мониторинга активности клиентов с целью аудита и безопасности.
Заключение
Переход на NFSv4 потребовал от системных администраторов адаптации методов мониторинга соединений. Команды showmount
, которые служили основным инструментом в предыдущих версиях, теперь дополняются более современными и гибкими подходами, такими как использование netstat, ss и анализа содержимого procfs. Применение указанных методов позволяет с высокой степенью точности управлять и отслеживать сети, обеспечивая высокую степень безопасности и контроля за системой.