Посмотреть версию nfs linux

Обновлено: 04.07.2024


Навожу инструкцию по установке и настройке NFS (Network File System). NFS – это сетевая файловая система, с помощью которой можно обращаться к файлам и каталогам удалённого компьютера (сервера), как будто эти файлы и каталоги были локальными. Главным преимуществом такой системы является то, что отдельно взятые рабочие станции могут использовать меньше собственного дискового пространства, так как совместно используемые данные хранятся на отдельной машине (хранилище данных) и доступны для других машин в сети. NFS – это клиент-серверное приложение, где роль хранилища возлагается на сервер. Каждый участник сети – это NFS-клиент, который монтирует сетевой диск сервера у себя в файловой системе.

В роли сервера возьмем Ubuntu 12.04.
В качестве клиентов будем использовать и тестировать Centos и Winows 7.

Master server: 192.168.2.213 (Ubuntu)

Clients: 192.168.2.72 (Centos), 192.168.2.180 (Windows)

Для начала нужно настроить сервер. Так как мы будем использовать Ubuntu в роли сервера, нужно установить соответствующий пакет

После установки нужного пакеты у нас создались два файла конфигураций. Из лога установки:

В первом файле описан user (созданный при установке пакета) и group , для участия в mapping-e (идентификации пользователей).

Как мы знаем, в Linux каждый файл принадлежит конкретному пользователю, у которого есть свой (UID,GID), но у Windows системах схема немного другая. И в связи с этим был придуман механизм mapping, который делает трансляцию разных пользователей с различных ОС в понятный для файловой системы Linux вид.
Второй файл нужен для настройки идентификации Kerberos и настройке нестандартного порта, на котором будет слушаться демон. Он пока нам не нужен. Об настройке Kerberos речь пойдет в следующей статье.

Теперь продолжим настройку.
Все директории для шаринга нужно прописывать в файле /etc/exports. Для начала создадим 2 папки в домашней директории и закинем в них файлы. Дерево каталогов и файлов для экспорта:

Теперь нужно присвоит юзера и группу для этих каталогов (берем с файла /etc/idmapd.conf ).

Для начала сделаем экспорт директории nfs_dir1 для конкретного IP. Редактируем файл /etc/exprots.

Здесь наведен минимальный набор опций для корректной работы хранилища с ОС Windows.

  • /home/alex/nfs_dir1 – путь к папке, для которой раздается доступ;
  • 192.168.2.180 – IP-адрес, которому раздается доступ к папке(можно указать всю сеть, тогда запись примет вид 192.168.2.0/24)
  • (rw,sync,all_squash,no_subtree_check) – набор опций.

Все доступные опции и синтаксис записи хостов, групп хостов и т.п. можно почитать в мануале

Далее нужно применить настройки

Теперь проверяем что у нас экспортировалось.

Настройка Windows клиента

Далее нужно смонтировать диск. Для этого можно использовать командную строку или же просто щелкнуть правой кнопкой мыши на Мой компьютер и выбрать Подключение сетевого диска. И ввести строку \\192.168.2.213\home\alex\nfs_dir1. Это IP сервера и путь к папке (рис. 2).

Если все ок, мы увидим диск (рис. 3).

То же можно проделать, используя командную строку (рис. 4).

Вы не сможете подключить сетевой NFS диск к Windows OS (рис. 5), если
1. Не установлен клиент NFS
2. Включен (не настроен) фаэрвол
3. Нет сетевого доступа к серверу
4. Неверно введены параметры монтирования
5. Не настроен (не применены настройки) экспорт на сервере.
6. Добавить опцию insecure в настройках экспорта



Рисунок 5 – Ошибка подключения сетевого NFS диска

Вы не сможете добавить файл в смонтированную файловую систему (рис. 6) , если:
1. На сервере не выставлены права на папку (nobody:nogroup)
2. Не выставлена опция all_squash в настройках экспорта
3. Не выставлена опция rw в настройках экспорта



Рисунок 6 – Ошибка при добавлении файла на NFS диска

Настройка Centos клиента

Настройка линукс систем довольно проста и безболезненна. Нужно просто установить нужные пакеты и смонтировать диск. Для Centos нужны следующие пакеты

Далее создаем папку и монтируем NFS раздела

В данном случае мы можем добавлять любой файл и директорию в смонтированную nfs_dir1 папку от имени любого пользователя системы (all_squash). Но если мы смонтируем вторую папку nfs_dir2, то в нее может записывать ТОЛЬКО root, так как там стоит опция no_root_squash. Проверяем.

Возможные флаги монтирования.

Так же можно проверить с консоли, правильно ли сервер экспортировал файловую систему.

Добавляем монтирование в автозагрузку

Сетевая файловая система NFS или Network File System, это популярный протокол сетевой файловой системы, который позволяет пользователям подключать удаленные сетевые каталоги на своей машине и передавать файлы между серверами. Вы можете использовать дисковое пространство на другой машине для своих файлов и работать с файлами, расположенными на других серверах. По сути, это альтернатива общего доступа Windows для Linux, в отличие от Samba реализована на уровне ядра и работает более стабильно.

В этой статье будет рассмотрена установка NFS в Ubuntu. Мы разберем установку всех необходимых компонентов, настройку общей папки, а также подключение сетевых папок.

Немного теории

Как уже было сказано, NFS, это сетевая файловая система. Для работы необходим сервер, на котором будет размещена общая папка и клиенты, которые могут монтировать сетевую папку как обычный диск в системе. В отличие от других протоколов NFS предоставляет прозрачный доступ к удаленным файлам. Программы будут видеть файлы как в обычной файловой системе и работать с ними как с локальными файлами, nfs возвращает только запрашиваемую часть файла, вместо файла целиком, поэтому эта файловая система будет отлично работать в системах с быстрым интернетом или в локальной сети.

Установка компонентов NFS

Перед тем как мы сможем работать с NFS, нам придется установить несколько программ. На машину, которая будет сервером нужно установить пакет nfs-kernel-server, с помощью которого будет выполнено открытие шары nfs в ubuntu 16.04. Для этого выполните:

sudo apt install nfs-kernel-server

Теперь давайте проверим правильно ли установился сервер. Сервис NFS слушает соединения как для TCP, так и для UDP на порту 2049. Посмотреть действительно ли сейчас используются эти порты можно командой:

rpcinfo -p | grep nfs

nfs

Также важно проверить поддерживается ли NFS на уровне ядра:

cat /proc/filesystems | grep nfs

nfs1

Видим, что работает, но если нет, нужно вручную загрузить модуль ядра nfs:

Давайте еще добавим NFS в автозагрузку:

sudo systemctl enable nfs-server

На клиентском компьютере вам нужно установить пакет nfs-common, чтобы иметь возможность работать с этой файловой системой. Вам необязательно устанавливать компоненты сервера, достаточно будет только этого пакета:

sudo apt install nfs-common

Вот и все, дальше настройка NFS в Ubuntu.

Настройка сервера NFS в Ubuntu

Мы можем открыть NFS доступ к любой папке, но давайте создадим для этих целей новую:

sudo mkdir /var/nfs

Дальше нас интересует настройка ubuntu nfs server. Все общие папки и другие настройки nfs находятся в файле /etc/exports. Синтаксис записи папки такой:

адрес_папки клиент (опции)

Адрес папки - это та папка, которую нужно сделать доступной по сети. Клиент - ip адрес или адрес сети, из которой могут получить доступ к этой папке. А вот с опциями немного сложнее. Рассмотрим некоторые из них:

  • rw - разрешить чтение и запись в этой папке;
  • ro - разрешить только чтение;
  • sync - отвечать на следующие запросы только тогда, когда данные будут сохранены на диск (по умолчанию);
  • async - не блокировать подключения пока данные записываются на диск;
  • secure - использовать для соединения только порты ниже 1024;
  • insecure - использовать любые порты;
  • nohide - не скрывать поддиректории при, открытии доступа к нескольким директориям;
  • root_squash - подменять запросы от root на анонимные, используется по умолчанию;
  • no_root_squash - не подменять запросы от root на анонимные;
  • all_squash - превращать все запросы в анонимные;
  • subtree_check - проверять не пытается ли пользователь выйти за пределы экспортированной папки;
  • no_subtree_check - отключить проверку обращения к экспортированной папке, улучшает производительность, но снижает безопасность, можно использовать когда экспортируется раздел диска;
  • anonuid и anongid - указывает uid и gid для анонимного пользователя.

Например, для нашей папки, если вы хотите разрешить к ней подключаться только с определённого IP адреса, эта строка может выглядеть вот так:

sudo vi /etc/exports

Можно разрешить только нужную подсеть, например:

Для того чтобы разрешить все адреса используйте подсеть 0.0.0.0/0 или символ *.

Открытие шары NFS в Ubuntu почти завершено. Осталось разобраться с правами. Кроме ограничений IP адреса работает обычная система полномочий UNIX, поэтому если вы хотите чтобы определённый пользователь мог получить доступ к папке, то на сервере должен существовать пользователь с таким же UID и эта папка должна принадлежать ему или группе в которой он состоит.

Кроме того, обратите внимание на то, что все подключения от имени пользователя root считаются по умолчанию анонимными (nfsnobody), чтобы это отключить добавьте опцию монтирования no_root_squash, но это не безопасно, потому что любой root пользователь сможет получить доступ на запись ко всем файлам. Теперь попытаемся настроем клиента и попытаемся ее примонтировать.

Для того чтобы все пользователи могли получить доступ ко всем файлам можно создать пользователя с UID 1001 и попросить NFS все запросы считать запросами от анонимного пользователя, а анонимному пользователю присвоить UID 1001. Это делается такими опциями:

Когда все будет настроено, останется только обновить таблицу экспорта NFS:

sudo exportfs -a

Если на вашем сервере используется брандмауэр, то следует открыть порты 111 и 2049:

sudo ufw allow 111
sudo ufw allow 2049

Подключение NFS

Мы не будем подробно останавливаться на этом вопросе в сегодняшней статье. Это довольно большая тема, заслуживающая отдельной статьи. Но пару слов я все же скажу. Чтобы подключить сетевую папку вам не нужен никакой nfs клиент ubuntu, достаточно использовать команду mount:

sudo mount 127.0.0.1:/var/nfs/ /mnt/

Теперь вы можете попытаться создать файл в подключенной директории:

Также мы посмотрите подключенные файловые системы с помощью df:

127.0.0.1:/var/nfs 30G 6,7G 22G 24% /mnt

Чтобы отключить эту файловую систему достаточно использовать стандартный umount:

sudo umount /mnt/

Выводы

В этой статье была рассмотрена настройка NFS в Ubuntu 20.04, как видите, все делается очень просто и прозрачно. Подключение NFS шары выполняется в несколько кликов, с помощью стандартных команд, а открытие шары NFS ненамного сложнее подключения. Если у вас остались вопросы, пишите в комментариях!

В этой статье мы рассмотрим сценарий атаки на небезопасные NFS экспорты и конфигурации флага setuid для получения шелла в Линуксе с правами суперпользователя.

image

Автор: Scott Sutherland

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

Что такое NFS

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

Для удаленного доступа к директориям, совместно используемым через NFS-экспорты, требуется два условия: права доступа для монтирования и для файлов.

Права доступа для монтирования могут быть ограничены по имени хоста или IP-адресу в файле /etc/exports, однако во многих случаях никакие ограничения не используются. Важно отметить, что IP-адрес и имена хостов легко сымитировать (если вы знаете, что имитировать).

Файловый доступ также можно настроить через экспорты в /etc/exports, когда указываем пометки на чтение/запись. Затем доступ к файлам ограничивается по UID подключающегося пользователя, который легко подделать. Однако нужно отметить, что что есть методы защиты от этой угрозы, как, например, опция «root squashing», которая может быть активирована там же /etc/exports с целью запрета доступа с UID равным 0, соответствующего пользователю root.

Основная проблема NFS

Если возможно смонтировать NFS-экспорты, обычно UID можно подделать на клиенте для обхода ограничений, связанных с правами доступа к файлам, настроенными для каталога, доступного через NFS-экспорт. Кроме того, доступ может быть разрешен случайно, если UID файла и UID подключающегося пользователя совпадают.

Ниже показана схема возникновения непреднамеренного доступа:

На сервере «Server 1» есть пользователь с именем «User1» (UID=1111).

Пользователь User1 создает файл с именем «secret» и делает доступным только хозяину и пользователю root при помощи команды «chmod 600 secret».

Затем на сервере «Server 1» создается NFS-экспорт с правами на чтение/запись без всяких ограничений по IP-адресу, который связан с каталогом, где находится файл «secret» пользователя User1.

В другой клиентской системе с Линуксом есть пользователь «User2», у которого UID=1111. Когда пользователь «User2» смонтирует NFS-экспорт, находящийся на сервере «Server 1», то сможет читать секретный файл, поскольку имеет тот же UID, что и UID у владельца (user1) файла secret.

Ниже показана наглядная иллюстрация этого сценария.


Рисунок 1: Схема возникновения непредумышленного доступа

Поиск NFS-серверов

NFS работает на UDP/TCP портах 111 и 2049 соответственно. Поиск открытых NFS-портов можно выполнить при помощи утилит навроде nmap.


Рисунок 2: Поиск открытых NFS-портов

Текущие поддерживаемые версии NFS также можно определить при помощи nmap или rpcinfo, что пригодится нам в дальнейшем, поскольку мы хотим использовать версию 3 или ниже с целью просмотра и имитации UID хозяев файлов. В случае если опция «root squashing» включена, может быть требование для доступа к файлам.

Получение перечня поддерживаемых версий NFS при помощи Nmap:

nmap -sV -p111,2049 192.168.1.171

Получение перечня поддерживаемых версий NFS при помощи rpcinfo:

apt-get install nfs-client

rpcinfo -p 192.168.1.171


Рисунок 3: Перечень доступных версий NFS

Ниже приводится видео, где показан процесс обнаружения NFS-сервера.

Перечень NFS-экспортов

Пришла очередь получить перечень доступных NFS-экспортов на удаленном сервере при помощи Metasploit или showmount.

Пример с Metasploit:


Рисунок 4: Получение перечня доступных NFS-экспортов при помощи Metasploit

Пример с showmount:

apt-get install samba

showmount -e 192.168.1.171


Рисунок 5: Получение перечня доступных NFS-экспортов при помощи showmount

Монтирование NFS-экспортов

Переходим к монтированию доступных NFS-экспортов, работая от имени root. Не забудьте указать флаг «-o vers=3», чтобы быть уверенным, что вы можете просматривать UID’ы владельцев файлов. Ниже показаны опции для монтирования экспорта:


Рисунок 6: Монтирование NFS-экспортов

Просмотр UID’ов у каталогов и файлов в NFS-экспортах

Просмотр UID’ов на подключенном диске:


Рисунок 7: Просмотр UID’ов непосредственно на подключенном диске

Просмотр UID’ов при помощи nmap:

nmap --script=nfs-ls 192.168.1.171 -p 111


Рисунок 8: Просмотр UID’ов при помощи nmap

Поиск паролей и секретных ключей (получение непривилегированного доступа)

Предположим, что мы смогли получить доступ к NFS с правами root или другого пользователя. Пришло время поискать пароли и ключи для доступа к удаленному серверу. Секретные ключи обычно находятся в директориях /home/<user>/.ssh, а пароли, как правило, разбросаны повсюду.

Ищем файлы, в имени которых есть слово «password»:


Рисунок 9: Поиск файлов, имя которых содержит слово «password»

Ищем секретные ключи в директориях .ssh:

mount 192.168.1.222:/ demo2/

find ./ -name "id_rsa"


Рисунок 10: Поиск секретных ключей

Ниже показано короткое видео, с демонстрацией процесса монтирования и поиска файлов:

Эксплуатация бинарных файлов с флагом Setuid (получение прав суперпользователя)

Как только у нас появился интерактивный шелл под именем пользователя с минимальными привилегиями (test), дальше есть множество путей по расширению полномочий. Однако в этот раз мы сосредоточимся на бинарных файлах с флагом setuid, который дает возможность запуска с правами владельца. Схожим образом, бинарные файлы с флагом setguid позволяют выполнение с правами группы, связанной с файлом. С точки зрения администратора у этой возможности есть как плюсы, так и минусы.

Хорошая новость: бинарные файлы с флагом setuid могут использоваться для безопасного запуска привилегированных команд, как, например, passwd.

Плохая новость: бинарные файлы с флагом setuid могут использоваться для расширения привилегий, если этими файлами владеет root, и позволено прямое выполнение произвольных команд или косвенное выполнение произвольных команд через плагины/модули.

Ниже показаны команды для поиска бинарных файлов с флагами setuid и setguid.

Поиск бинарных файлов с флагом setuid:

find / -perm -u=s -type f 2>/dev/null

Поиск бинарных файлов с флагом setguid:

Ниже показан пример, который вы можете встретить во время пентеста.


Рисунок 11: Перечень файлов с флагом setuid

Ниже показаны примеры команд и скриншот с результатами выполнения:


Рисунок 12: Пример выполнения команды с привилегиями суперпользователя

Как видно из рисунка выше, можно выполнять произвольные команды с правами суперпользователя без каких-либо проблем. Ниже показано видео, где демонстрируется использование файлов с флагом setuid.

Заключение

В этой статье был продемонстрирован один из способов получения шелла с правами суперпользователя в удаленной системе с Линуксом при помощи уязвимого NFS-экспорта и небезопасного бинарного файла с флагом setuid. Хотя существует множество методов решения одной задачи, я считаю, что мораль истории такова: все типы совместно используемых сетевых ресурсов должны быть сконфигурированы с минимально возможными привилегиями с целью предотвращения неправомерного доступа к данным и системам. Надеюсь, эта статья окажется полезной для начинающих пентестеров и специалистов по безопасности, которые пытаются оценить потенциальные риски, связанные с небезопасной конфигурацией NFS-серверов.

Favorite

Добавить в избранное

Главное меню » Операционная система Linux » Как настроить NFS (Network File System) на RHEL/CentOS/Fedora и Debian/Ubuntu

(2 оценок, среднее: 5,00 из 5)

Как настроить NFS (Network File System) на RHEL/CentOS/Fedora и Debian/Ubuntu

N FS (Network File System) в основном разработана для совместного использования файлов и папок между Linux/Unix систем от компании Sun Microsystems в 1980 году. Она позволяет монтировать локальные файловые системы по сети и удаленных хостов, для взаимодействия с ними так, как будто они установлены локально на той же системе. С помощью NFS, мы можем настроить общий доступ к файлам между Unix в Linux системе и Linux для системы Unix.

Преимущества NFS

  1. NFS создает локальный доступ к удаленным файлам.
  2. Он использует стандартную архитектуру клиент/сервер для обмена файлами между всеми машинами на базе * NIX.
  3. С помощью NFS не нужно, чтобы обе машины работали на той же ОС.
  4. С помощью NFS мы можем настроить решение централизованного хранения.
  5. Пользователи получают свои данные независимо от их физического расположения.
  6. Автоматическое обновление для новых файлов.
  7. Более новая версия NFS поддерживает монтирование acl, pseudo под root.
  8. Может быть защищен брандмауэрами и Kerberos.

Услуги NFS

Cервис System V-launched. Серверный пакет NFS включает в себя три средства, входящие в состав пакетов portmap и nfs-Utils.

  1. portmap: отображает вызовы, сделанные из других машин к правильной службе RPC (не требуется с NFSv4 ).
  2. nfs: преобразует удаленные запросы общего доступа к файлам в запросы на локальной файловой системе.
  3. rpc.mountd: эта служба отвечает за монтирование и размонтирования файловых систем.

Важные файлы конфигурации для NFS

  1. /etc/exports: его основной конфигурационный файл NFS, все экспортируемые файлы и каталоги, которые определены в этом файле и на конечном сервере NFS.
  2. /etc/fstab: Для того, чтобы смонтировать каталог NFS на вашей системе без перезагрузок, нам нужно сделать запись в /etc/fstab.
  3. /etc/sysconfig/nfs: Конфигурационный файл NFS для управления, на котором порт RPC и другие услуги прослушивания.

Настройка и монтирование NFS на сервере Linux

Для настройки монтирования NFS, мы будем нуждаться по крайней мере, в двух машинах Linux/Unix. Вот в этом учебнике, мы будем использовать два сервера.

Установка сервера NFS и клиента NFS

Теперь запустите службы на обеих машинах.

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

Настройка сервера NFS

Сначала настроим сервер NFS.

Настройка каталога экспорта

Теперь нам нужно сделать запись в “/etc/exports” и перезапустить службы, чтобы сделать наш каталог разделяемыми в сети.

Параметры NFS

Некоторые другие варианты мы можем использовать в файлы “/etc/exports” для совместного использования файлов выглядит следующим образом.

Для большего количества вариантов с “/etc/exports“, рекомендуется прочитать страницы руководства для экспорта.

Настройка клиента NFS

После настройки NFS-сервера, нам необходимо смонтировать этот общий каталог или раздел на клиентском сервере.

Монтирование общих каталогов на клиенте NFS

Теперь на клиенте NFS, нам нужно смонтировать этот каталог для доступа к нему на местном уровне. Для этого, во-первых, мы должны выяснить, какие ресурсы доступны на удаленном сервере или сервере NFS.

Монтирование доступного каталога в NFS

Для того, чтобы смонтировать общий NFS каталог, мы можем использовать следующую команду монтирования.

Приведенная выше команда установит общий каталог в “/mnt/nfsshare” на сервере клиента. Вы можете проверить его следующей командой.

Выше команда mount монтирует на NFS совместно используемый каталог на NFS клиента временно, чтобы смонтировать каталог NFS постоянно на вашей системе вне зависимости от перезагрузок, нам нужно сделать запись в “/etc/fstab“.

Добавьте следующую новую строку, как показано ниже.

Тестирование режима работы установки NFS

Мы можем протестировать нашу установку сервера NFS путем создания тестового файла на стороне сервера и проверить его наличие на NFS клиента стороне или наоборот.

На стороне сервера nfsserver

На стороне клиента nfsclient

Перейдите в общий каталог на сервере клиента и вы обнаружите общий файл без какого-либо ручного обновления или службы перезагрузки.

Удаление монтирования NFS

Вы можете видеть, что монтирование было удалено в файловой системе.

Вы увидите, что эти общие каталоги не доступны больше.

Важные команды для NFS

Некоторые более важные команды для NFS.

  1. showmount -e : Показывает доступные расшаренные объекты на локальном компьютере
  2. showmount -e<server-ip or hostname>: Список доступных расшаренных объектов на удаленном сервере
  3. showmount -d : Список всех поддиректорий
  4. exportfs -v : Отображает список расшаренных файлов и опций на сервере
  5. exportfs -a : Экспорт всех доступных объектов, перечисленных в /etc/exports, или имя
  6. exportfs -u : Реэкспорт всех доступных объектов, перечисленные в /etc/exports, или имя
  7. exportfs -r : Обновить список сервера после изменения /etc/exports

Это все про монтирование NFS на данный момент, если интересно, можете прочитать гид о том как настроить сервер NFS на Ubuntu 16. Оставляйте свои комментарии и предложения ниже в поле для комментариев.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Читайте также: