Linux nfs права доступа

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

Сетевая файловая система 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. Посмотреть действительно ли сейчас используются эти порты можно командой:

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 доступ к любой папке, но давайте создадим для этих целей новую:

Дальше нас интересует настройка 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 для анонимного пользователя.
Читайте также:  Linux server refused our key

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

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

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

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

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

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

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

Если на вашем сервере используется брандмауэр, то следует открыть порты 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:

Выводы

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

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Читайте также:  Bluetooth mic in linux

Источник

Права на чтение/запись по NFS. Ubuntu 16.04

В Ubuntu новичок, гуглил проблему довольно интесивно, но, по-видимому, недостаток базовых знания сказывается, в итоге паззл не собирается в голове и проблема не решается. Если я что-то пропустил и где-то все уже разжевано, ткните туда, плз. А если нет, то разжуйте, плз, для чайников. И я, и последуюущие чайники будут веcьма признательны )).

Собственно, о чем все это. Есть два сервера (gena (192.168.24.90) и valera (192.168.24.91)) под Ubuntu 16.04. На обоих есть пользователь iz и одноименная пользовательская папка. uid пользователя одинаковый на обеих машинах. Пользователь в группе sudo (если что, на всяк случай сообщаю). Сама задача: по NFS смонтировать каждую пользовательскую папку (хоум директорию) на каждый сервер так, чтобы пользователь имел права на чтение/запись на любом сервере, независимо от того, где он авторизован.В идеале, каждая папка монтируется внутрь пользовательской. Т.е.: на valera в папку ~/gena/ монтируется пользовательская папка с gena, а на gena в папку ~/valera/ монтируется пользовательская папка с valera.

Начал решать последовательно, попробовав пока смонтировать пользовательскую папку с gena на valera. В итоге папка и файлы на valera видны, но запись невозможна.

Что написано в exports на gena (192.168.24.90):

/raid/users/iz 192.168.24.91/255.255.255.0(rw,sync,insecure,nohide,no_root_squash,no_all_squash,anonuid=1000,anongid=1000,no_subtree_check) 

Что написано в fstab на valera (192.168.24.91):

192.168.24.90:/raid/users/iz /raid/users/iz/gena nfs defaults 0 2 
iz@gena:~$ id iz uid=1002(iz) gid=1002(iz) groups=1002(iz),1000(ngs) 
iz@valera:/home$ id iz uid=1002(iz) gid=1002(iz) groups=1002(iz),27(sudo),1000(ngs) 

По моим соображениям, т.к. включена опция no_all_squash для экпорта, то обращающийся к шаренному ресурсу пользователь с valera обрабатывается по uid и, т.к. uid совпадает, то пользователь должен получить все те же права, что и в случае когда он обращается к своей папке с «родной» машины (с gena, в данном случае).

И для чтения это работает (читаем файл, созданный пользователем на gena):

iz@valera:/raid/users/iz/gena$ cat izgena.txt dkfjhskhdlj 

Однако, при попытке создания файла пользователем с valera ничего не получается:

iz@valera:/raid/users/iz/gena$ touch izvalera.tst touch: cannot touch 'izvalera.tst': Permission denied 

Содержимое общей папки как его видно с valera:

iz@valera:/raid/users/iz/gena$ ls -l total 25 -rw-r--r-- 1 iz ngs 8980 апр 20 2016 examples.desktop -rw-rw-r-- 1 iz iz 13 авг 30 18:11 izgena.txt 

Содержимое общей папки как его видно с gena:

iz@gena:~$ ls -l total 25 -rw-r--r-- 1 iz ngs 8980 апр 20 2016 examples.desktop -rw-rw-r-- 1 iz iz 13 авг 30 18:11 izgena.txt 

Права на обшую папку: valera (до монтирования папки с gena в нее) drwxr-xr-x 2 iz ngs 2 авг 31 12:47 gena valera (после монтирования) drwxr-xr-x 4 iz ngs 10 авг 30 20:25 gena

Так выглядит экспортируемая папка (iz) на gena:

iz@gena:/raid/users$ ls -l total 19 -rw-rw-r-- 1 ngs ngs 320 авг 17 20:44 create_users.sh drwxr-xr-x 4 iz ngs 10 авг 30 20:25 iz 

Помогите, пожалуйста, понять, что не так (почему нет прав на запись?). Были мысли про опции монтирования, но вроде бы там все ок. Не знаю уже куда смотреть.

И второй момент: решаетма ли в принципе вся задача целиком? Или все «закольцуется»?

Источник

Настройка прав в NFS (4)

Есть сервер(centos 6.8) NFS. Файл /etc/exportfs такой:

/mnt/share 10.2.10.0/24 (rw,no_root_squash) 

И у меня права на этот каталог стоят, например: nobody:nogroup А мне надо :

Читайте также:  Abrt linux что это

Как до монтирования, так после. Результат один — nobody:nogroup

Как мне выставить клиентские права на примонтированный каталог?

Пробел убери между подсетью и опциями.

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

Kroz ★★★★★ ( 17.10.16 11:08:19 MSK )
Последнее исправление: Kroz 17.10.16 11:08:53 MSK (всего исправлений: 1)

man 5 exports

А как сделать, чтобы пользователь с на 10.0.0.1 клиенте мапился на на NFS сервере?

какие еще пожелания, о волька ибн алеша?

какие еще пожелания, о волька ибн алеша?

Эххх. А счастье казалось так близко.

man 5 exports
all_squash — Map all uids and gids to the anonymous user. Useful for NFS-exported public FTP directories, news spool directories, etc. The opposite option is no_all_squash, which is the default setting.
Наоборот, хочется чтобы юзеры:группы сохранялись. Проблема в том, что ID юзера user1 на клиенте 1000, а на сервере 2000. Нужен маппинг ID’шек на клиенте и сервере.

Цель — бекап с помощью rsync.

если quick and dirty да
если местным икспердам нужно потяжелее, то централизованная база.

дальше курить какие настройки у тебя, не забывая благодорить разработчиков ядра

а гуглить ты принципиально не хочешь?
на, я погуглил за тебя, хотя и так знаю, что без лдап этого вроде не добиться: https://www.google.ru/?q=nfs different uid

не понял, а как это решит пролему *маппинга* пользователя 1000 на клиенте в пользователя 2000 на сервере?

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

Как я понимаю, чтобы у тебя всё работало, нужно чтобы user ID и group ID (имено ID) для твоих group и user совпадали. Попробуй. А более правильная альтернатива — user ID mapping, про что я сейчас и спрашиваю народ.

Kroz ★★★★★ ( 17.10.16 13:48:32 MSK )
Последнее исправление: Kroz 17.10.16 13:53:20 MSK (всего исправлений: 1)

а гуглить ты принципиально не хочешь?

Я не только гуглить могу, я еще и исходники курил по этой проблеме. Вот сам топик, а вот в этом посте сама суть.

Спасибо за хинт, посмотрю на досуге.

echo 'N' > /sys/module/nfs/parameters/nfs4_disable_idmapping nfsidmap -c service rpcidmapd restart man rpc.idmapd 

На сервере под должен быть тот же пользователь, что и на клиенте с Т.е. имя должно быть такое же, а UID неважен, будет мапиться (см. также пред. сообщение)

Это не решает проблему маппинга, это помогает понять одну из причин почему маппинг может не работать.

Потому что в старых ядрах, например для 6-й rhel, маппинг по умолчанию разрешен, а в новых, например для 7-й rhel, ровно наоборот.

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

А так для корректного маппинга нужно еще idmapd.conf курить

Источник

Оцените статью
Adblock
detector