Windows mount uid gid

Маппинг uid и gid при монтировании nfs

Имеется NAS с расшареными по nfs каталогами. Имеется десктоп (а точнее несколько), который эти шары монтирует. Проблема в том, что uid и gid на NAS и на десктопе не совпадают.

Как можно сделать маппинг uid и gid при работа с nfs?

До. информация:
— Gentoo (к вопросу о конфигах, но по идее от дистра не должно силно зависеть)
— nfs3, но, если нужно, могу включить nfs4.
— монтирую на десктопе так:

Я увидел в /etc файл idmapd.conf, он длинный и хорошо комментированный. Как я понял, там прописывается, дословно, маппинг gid и uid.

А ещё увидел rpc.idmapd.
man idmapd:

Я это видел. Но там 10000 нюансов. В и-нете везде рядом упоминается nfs4, LDAP — непонятно нужно ли оно, потом там несколько translation методов, потом есть конфиг на сервере и на клиенте и т. п. Ни одного хотябы близкого конфига я не нашел кроме маппанга nobody, но там другое. Вот я и думаю, наверняка кто-то сталкивался.

Так.
Если на сервере включить nfs4, то все файлы видятся на клиенте как root:root. Если выключить nfs4 (оставить nfs3), то на клиенте все файлы 1024:users . На сервер эти файлы admin:users . Ерунда какая-то.

DNS-домен у всех машин должен быть одинаковым иначе он должен быть настроен одинаковым в idmapd.conf

Далее, как ты будешь соблюдать консистентноть uid-ов — дело твоё. Если у тебя 3,5 клиента и 1 сервер — можно всё синхронизировать руками. Если больше — без LDAP и/или Kerberos будет туго.

Далее, как ты будешь соблюдать консистентноть uid-ов — дело твоё. Если у тебя 3,5 клиента и 1 сервер — можно всё синхронизировать руками. Если больше — без LDAP и/или Kerberos будет туго.

Так, погоди.
Зачем нужен idmapd? Если я правильно понял, то он делает соответствие uid1@host1 uid2@host2. Если так, то должно быть все равно какие у меня ID на своей машине и на удаленной. На своей машине я просто указываю, что, при подключении серверу host2 транслируй его uid=1003 (который соответствует там пользователю vasya) в 1001 (который соответствует здесь пользователю vasya). То есть это должно избавить от необходимости синхронизировать uid между машинами. Или как?

Если я правильно понял, то он делает соответствие uid1@host1 uid2@host2

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

Все что сложнее этого требует карту маппинга. Откуда ты ее достанешь: пропишешь локально — static, предоставишь напрямую из ldap — umich_ldap, или доставишь через nsswitch — дело твоё.

То есть если юзера ololo локально у тебя на машине нет и карты маппинга тоже — то будет пичалька.

Вижу, что кто-то подписан на эту тему. Можно сказать что решил.

Кому интересно детальней — прочитайте всю ту ветку.

решил проблему за 15 минут.
* на сервере и клиентах установить libnss-extrausers, поправить /etc/nsswitch.com как в README
* на сервере вынести всех юзеров из /etc/, в /var/lib/extrausers/; на клиенте просто удалить юзеров из /etc/ * на сервере расшарить /var/lib/extrausers/ , на клиентах подмонтировать
* юзеров создавать на сервере, редактируя оные 3 файла
* PROFIT!

Спасибо. Как-нибудь попробую.

На CentOS не получилось сделать такую манипуляцию. Система не видит юзеров из /var/lib/extrausers/

Монтирование разделов

Содержание

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

Способы монтирования

Способ 1: монтирование через универсально уникальный идентификатор (UUID)

UUID — это атрибут конкретной файловой системы, а не произвольное число, зависящее от физического порядка подключения дисков или случайностей инициализации дисковой подсистемы ядром.

Читайте также:  Microsoft windows eventlog 1101

Узнаем UUID разделов, для этого

Предположим, мы хотим подключить раздел «Shared» (NTFS-раздел, находящийся на основном диске компьютера) и «TRENDNET8GB» (флэшка, отформатированная в FAT32).

Способ 2: монтирование через имена устройств

Считается устаревшим и строго не рекомендуется к постоянному использованию.

Единственным заметным плюсом является небольшая длина имён устройств, что удобно при прямой работе с консолью. Например, во время реанимации умершей системы.

Разделы, оканчивающиеся цифрой — файловые системы. Разделы без цифры на конце — реальные физические устройства. В данном примере участвуют два физических диска (/dev/sda и /dev/sdb) и два рейд-массива (по сути — две файловые системы, не привязанные напрямую к какому-то одному физическому носителю).

Пример вывода команды fdisk (вывод parted отличается очень незначительно):

Попробуем достучаться до массива md0.

Дополнительная информация

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

Донастройка системы

Теперь диски стали подключаться автоматически, но так как это делается от имени root, у нас пропала возможность на подключенных дисках давать права на общий доступ, чтобы восстановить эту возможность добавим настройку в Samba:

Windows Server 2019 “Server for NFS” UID/GID mapping with Auth_SYS

I have a Windows Server 2019 installation with an LDAP instance (nfsmappingstore) for nfs mapping. I created this with the powershell cmdlet Install-NfsMappingStore.

To illustrate, here is a list of the users in that store, and a test of one user:

I have an NFS Share setup as illustrated here:

When I turn on the option circled called «Enable unmapped user access», with the sub-option «Allow unmapped user Unix access (by UID/GID)», then I can go to my uBuntu 18.04 machine and mount that successfully with the command:

I can then see the files and folders in the share.

However, when I turn that option off, wishing to actually use the mapped user functionality, I get the error:

I think this means that the uid/gid was not really sent or interpreted by Windows Server 2019. Looking at the event logs on the server, it seems to indicate that it is happy and reading the LDAP instance OK, and the Test cmdlet gives no errors.

The one possible altered thing I could think to do that seemed to cause a very slightly different effect was to add the «-o nfsvers=3» to the mount command. When I did that, the share did actually mount, but the NFS server refused to let me see anything inside of the share:

Can someone guide me as to how to investigate this issue further? At this time I do not know how to verify what the Windows Server is getting as far as UID/GID, so I really don’t know which side of this the issue is on.

Windows mount uid gid

This forum has migrated to Microsoft Q&A. Visit Microsoft Q&A to post new questions.

Asked by:

Question

I’m using windows server 2019 with isilon storage server. Here is my configuration:

  • Every unix attribute (uid, gid, etc) in AD is properly filled for users/groups (based on object SID)
  • Isilon storage server is connected to Active Directory
  • NFS shares are exported from isilon storage server
  • Files/folders inside NFS share are chown with uid and gid from linux host

Now when I try to mount NFS share on Windows 10 using command

users are not able to write files/folders inside directories even if they have permission based on posix attributes. So tell me how to mount NFS share on Windows 10 with posix attributes mapped from AD ?

All replies

Hello,
Thank you for posting in our TechNet forum.

1.We have the following AD domain environment, is that right?
AD domain controllers
Windows server 2019 with isilon storage server with NFS shares
Linux
Windows 10

Читайте также:  При загрузке windows не удалось настроить обновления windows

2.Are Windows server 2019, Linux host and Windows 10 in the AD domain?

3.Based on «users are not able to write files/folders inside directories even if they have permission based on posix attributes. «, do we mean the AD users are not able to write files/folders inside directories?

4.If it is that AD users are not able to write files/folders inside directories, are they not able to write files/folders inside directories on both Linux host and Windows 10?

Meanwhile, we can refer to the following link to see if it helps.
How to Mount an NFS Share Using a Windows 10 Machine
https://graspingtech.com/mount-nfs-share-windows-10/

Please note: Information posted in the given link is hosted by a third party. Microsoft does not guarantee the accuracy and effectiveness of information.

This «Directory Services» Forum will be migrating to a new home on Microsoft Q&A, please refer to this sticky post for more details.

Best Regards,
Daisy Zhou

Please remember to mark the replies as answers if they help.
If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.

«Directory Services» forum will be migrating to a new home on Microsoft Q&A !

We invite you to post new questions in the «Directory Services» forum’s new home on Microsoft Q&A !

For more information, please refer to the sticky post.

Изменение UID&GID пользователя и его файлов


Встала тут передо мной задача изменить UID и GID пользователя и правильно изменить владельца всех файлов.
Дело в том, что я работаю за двумя компьютерами попеременно, и файлы mysql лежат у меня на флешке. Получилось так, что id пользователя mysql на обоих компах отличается и мускл не может получить доступ к своим файлам. Присваивать права 0666 скучно, и по этому поводу я решил научиться грамотно изменять uid пользователя 🙂

Казалось бы, всё просто, но есть два нюанса которые необходимо учесть:

  1. UID и GID не всегда одинаковы для пользователя и его группы
  2. Не все файлы принадлежат одновременно юзеру mysql и группе mysql: файлы для chown нужно искать отдельно

Статья написана для тех, кто ещё не делал ничего подобного а также кто хочет научиться продвинутому использованию команды find и узнать что такое xargs.

Изменение идентификатора пользователя и группы

user =mysql new_uid = 600 old_uid =$ ( id -u $user )
group =mysql new_gid = 600 old_gid =$ ( id -g $user )
sudo usermod -u $new_uid $user
sudo groupmod -g $new_gid $group

Поиск осиротевших файлов

Если сейчас посмотреть на одну из папок с файлами mysql (например, ls -lah /var/lib/mysql ) то мы увидим, что файлы принадлежат подозрительному пользователю 112 и подозрительной группе 127. Такие файлы мы и будем искать с тем, чтобы удочерить их 🙂

Первое, что приходит в голову, это найти все файлы принадлежащие пользователю $old_uid или группе $old_group , и собрать все найденные файлы (при помощи xargs) в качества аргументов команде chown $user:$group . find выполняется от root чтобы гарантировать что он сможет забраться во все даже самые сурово защищённые папки и найдёт всё что от него требуется. xargs собирает строки из pipe и передаёт их команде, указанной в аргументе (chown). Замечу, что xargs может выполнить команду несколько раз во избежание слишком длинной строки аргументов.
Например, так:

sudo find / -user $old_uid -or -group $old_gid -print0 | xargs -0 sudo chown $user : $group

Сразу обращу внимание на флаги find -print0 и xargs -0 : это такая борьба с возможными пробелами в именах файлов. Такие файлы могут быть восприняты chown ‘ом как два разных. Первый флаг заставляет find выводить каждый найденный файл с нулём в конце (символ конца строки в Си), а второй флаг сообщает xargs что ему нужно отделять файлы друг от друга не по переводу строки, а по этому самому нулю, что гарантирует верную обработку даже самых хитрых имён файлов 🙂

Читайте также:  Ноутбук бесконечно загружается при включении windows 10

Однако такой способ не принесёт желаемого результата: некоторые файлы, владельцем которых был ‘mysql:root’ станут принадлежать ‘mysql:mysql’. А мы ведь договорились сделать всё предельно правильно 🙂 Следовательно, поиск по user и по group надо вести отдельно.

Можно выполнить подряд две команды find:

sudo find / -user $old_uid -print0 | xargs -0 sudo chown $user
sudo find / -group $old_gid -print0 | xargs -0 sudo chown : $group

и это уже будет намного ближе к истине, но тогда find ‘у придётся дважды шуршать по всему жёсткому диску.

Есть способ заставить команду find выполнить для нас две операции параллельно, сократив количество чтений с диска ровно в два раза. Для этого используем группировку условий и команд find круглыми скобками (не забывая их экранировать: иначе за них возьмётся шелл) и пославив между ними оператор «запятая»: тогда обе скобки будут выполняться для каждого файла.
Мы составим два отдельных файла: в первом будет список файлов с -user=$old_uid , а во втором — с -group=$old_gid , и обрабатывать эти файлы мы будет раздельно. Условие поиска теперь разделено на две выполняющися для каждого файла скобки, и в случае выполниния условия команда -fprint0 записывает в соответствующий временный файл путь к найденному осиротевшему файлу.

chownlist =$ ( tempfile ) chgrplist =$ ( tempfile )
sudo find / \
\ ( -user $old_uid -fprint0 » $chownlist » \ ) , \ ( -group $old_gid -fprint0 » $chgrplist » \ )

После недолгого поиска все файлы будут найдены.

Последний момент поиска: на форумах очень часто задаётся вопрос как исключить папки из списка find так, чтобы он туда вообще не залезал. Это делается при помощи сочетания условия -path «folder» и команды -prune , которая запрещает find залезать в папки, попавшие в условие. Мы исключим из поиска папки ‘/proc’ и ‘/sys’.
Для этого в условия добавим ещё одну группировку скобками, отделив их от уже существующих скобок оператором -or . Этот оператор выполнит первое условие, а второе — только если не сработало первое. Так, find проверит не попалась ли ему исключённая из листинга директория (в которой он не будет искать), и если нет — будет составлять списки файлов.
Делается это так:

chownlist =$ ( tempfile ) chgrplist =$ ( tempfile )
sudo find / \
\ ( \ ( -path «/proc» -or -path «/sys» \ ) -prune \ ) -or \ # исключение папок
\ ( \ ( -user $old_uid -fprint0 » $chownlist » \ ) , \ ( -group $old_gid -fprint0 » $chgrplist » \ ) \ )

Также в исключения можно внести путь к диску с бекапом (он ведь у вас есть, верно? ;), подмонтированные сетевые шары и прочее.

Финиш

cat » $chownlist » | xargs -0 sudo chown $user
cat » $chgrplist » | xargs -0 sudo chown : $group
sudo rm » $chownlist » » $chgrplist » # Не забываем подчистить за собой

Проверка

sudo find / -nouser -or -nogroup -print

Если всё было сделано правильно (и в системе не водилось осиротевших файлов) — команда не должна ничего вывести.

Полный код скрипта

Надеюсь, статья окажется полезной. Рекомендую ближе ознакомиться с синтаксисом этой команды: она ведь намного мощнее чем вы думаете 🙂
Напоследок приведу полный код скрипта для смены UID&GID пользователя и его файлов:

#=== Настройки
user =mysql new_uid = 600 old_uid =$ ( id -u $user ) # имя, новый и старый UID
group =mysql new_gid = 600 old_gid =$ ( id -g $user ) # имя, новый и старый GID
#=== Смена UID & GID
sudo usermod -u $new_uid $user
sudo groupmod -g $new_gid $group
#=== Поиск файлов
chownlist =$ ( tempfile ) chgrplist =$ ( tempfile ) sudo find / \
\ ( \ ( -path «/proc» -or -path «/sys» \ ) -prune \ ) -or \
\ ( \ ( -user $old_uid -fprint0 » $chownlist » \ ) , \ ( -group $old_gid -fprint0 » $chgrplist » \ ) \ )
#=== chown и чистка
cat » $chownlist » | xargs -0 sudo chown $user
cat » $chgrplist » | xargs -0 sudo chown : $group
sudo rm » $chownlist » » $chgrplist «

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