Когда на NFS-сервере один основной пользователь и на компьютере, который выступает в роле NFS-клиента, тоже один пользователь, да ещё и входящий в список sudousers — всё просто: NFS-раздел подключается, используя sudo, UID и GID на NFS-сервере и NFS-клиенте совпадают, с правами на чтение и запись нет никаких проблем.
У меня же возникла ситуация, когда на NFS-клиенте был обычный пользователь (regular user) без доступа к sudo и он должен был уметь производить чтение и запись в подлючённом NFS-разделе. Назовём этого пользователя reguser. Также на этом компьютере ( NFS-клиенте ) был ещё один пользователь, который имел доступ к sudo. Назовём его: admuser.
Итак, передо мной стояло две задачи:
- Сделать так, чтобы reguser мог производить запись в файлы и директории на NFS-сервере.
- Сделать так, чтобы reguser мог сам подключать и отключать NFS-раздел.
Как разрешить запись на NFS-сервере пользователям с NFS-клиента, у который отличается UID от UID пользователя, которому принадлежат файлы на NFS-сервере
Действия выполняются на NFS-сервере от пользователя root.
Редактируем /etc/exports:
nano /etc/exports
Вставляем или изменяем строку, которая говорит о том, какая директория будет доступна (экспортирована) по NFS:
/home/nfs 192.168.1.1/24(rw,async,no_subtree_check,all_squash,anonuid=1000,anongid=1000)
где:
- /home/nfs — директория, которая будет доступна (экспортирована) NFS-клиенту;
- 192.168.1.1/24 — IP-адрес или, как в данном случае, диапазон адресов, с которых разрешено подключаться к NFS;
- rw — разрешение на чтение и запись;
- async — асинхронный режим работы, в котором ответы на запросы будут происходят сразу, не дожидаясь записи на диск. В этом случае надежность ниже, однако, производительность больше;
- no_subtree_check — при разрешение доступа к подкаталогу файловой системы, а не всей файловой системе, сервер проверяет, находится ли запрошенный файл в экспортированном подкаталоге или нет. no_subtree_check отключает эту проверку, что уменьшает безопасность, однако, увеличивает скорость передачи данных;
- all_squash — эта опция отвечает за то, что любые пользователи NFS-клиента будут считаться анонимными на NFS-сервере или же тем пользователеми NFS-сервера, чьи идентификаторы указаны в anonuid и anongid;
- anonuid — идентификатор пользователя ОС на NFS-сервере. Берётся из /etc/passwd . Например, если нужен первый несистемный пользователь (тот, логин которого указывался при установке ОС, в моём случае nfs) и в файле /etc/passwd есть строка «nfs:x:1000:1000:NFS:/home/nfs:/bin/bash» значение для anonuid будет первое число 1000;
- anongid — идентификатор группы ОС на NFS-сервере. Берётся из /etc/group . Например, если нужна группа www-data и в файле /etc/group есть строка «www-data:x:33:» значение для anongid будет 33;
Если нужно более точно указать какие пользователи на NFS-клиенте соответствуют пользователям на NFS-сервере, то можно включить маппинг пользователей, добавив опцию map_static=/etc/file_maps_users. Файл /etc/file_maps_users должен выглядеть следующим образом:
# Маппинг пользователей # remote local comment uid 0-33 1002 # сопоставление пользователей с удаленным UID 0-50 к локальному UID 1002 gid 0-33 1002 # сопоставление пользователей с удаленным GID 0-50 к локальному GID 1002
Перезапускаем демона nfs и на этом настройка сервера завершена:
/etc/init.d/nfs-kernel-server restart
Как разрешить обычному пользователю (regular user) подключать и отключать NFS-раздел
Авторизуемся как admuser.
Создаём директорию, в которую будем производить монтирование:
sudo mkdir /media/nfs
Добавляем в /etc/fstab правило монтирования. Открываем файл:
sudo nano /etc/fstab
Добавляем правило:
192.168.1.50:/home/nfs /media/nfs nfs rw,noauto,user 0 0
где:
- 192.168.1.50 — IP-адрес NFS-сервера;
- /home/nfs — каталог на NFS-сервере, который монтируем. Он должен быть в списке /etc/exports на NFS-сервере;
- /media/nfs — каталог на NFS-клиенте, в который монтируем NFS-раздел;
- nfs — тип файловой системы;
- rw — с правом на запись;
- noauto — опция, указывающая, что раздел не нужно монтировать автоматически при загрузке;
- user — опция, разрешающая монтировать и размонтировать этот раздел любому пользователю.
Теперь можно авторизоваться как reguser и создать в его домашнем каталоге два файла.
Для подключения NFS:
nano ~/nfs.mount
С кодом:
#!/bin/bash
mount /media/nfs
Для отключения NFS:
nano ~/nfs.umount
С кодом:
#!/bin/bash
umount /media/nfs
Разрешаем скриптам исполняться:
chmod ug+x ~/nfs.mount ~/nfs.umount
И, наконец, подключение NFS-ресурса:
~/nfs.mount
Отключение NFS-ресурса:
~/nfs.umount
Всё, все задачи выполнены.