В Windows, когда я просматриваю разрешения для удаленной папки, учетные записи квалифицируются по имени компьютера или домену, т. е. полномочиям для имени учетной записи.
В Linux, если у меня есть виртуальная машина, подключенная к удаленному диску, и владельцем папки на монтировании является «root», то это мой root или root удаленной системы?
Все это кажется слишком простым для работы на Linux, как только в дело вступает сеть. Я явно что-то упускаю.
Люк
решение1
Это, к сожалению, одна из самых запутанных вещей в файлообмене на Unix. А я плохо объясняю запутанные вещи.
Что тывидетьв ls -l
выходных данных (например) — это идентификатор удаленного пользователя, переведенный с точки зрения локальной системы.
Когда такие программы ls
используют стандартные функции для поиска информации о файлах, драйвер файловой системы может предоставить им только числовые идентификаторы пользователей, а не текстовые имена.(Пока что не слишком отличается от Windows.)Для преобразования UID в имена ls
вызывается совершенно другой компонент ОС — библиотеки службы имен, которые не знают, откуда был получен этот UID, и поэтому могут преобразовывать только те учетные записи, о которых знает операционная система, но не могут обратиться за помощью к драйверу файловой системы.(Вот тут-то и проявляется разница.)
Например, если на сервере есть два файла, один из которых принадлежит пользователю root (UID 0), а другой принадлежит пользователю Luke (UID 1000), сервер ls
будет знать только, что они принадлежат пользователям «0» и «1000», и будет искатьместныйучетные записи с одинаковыми UID. "0" всегда root, но "1000" может быть или не быть Luke. Если UID принадлежит учетной записи, хранящейся в LDAP или NIS или AD, и если клиентская ОС на самом деленастроендля поиска в LDAP учетных записей пользователей, он выдаст правильное имя пользователя. В противном случае он может на самом деле лгать, поскольку локальные идентификаторы учетных записей (1000, 1001, ...) имеют тенденцию соответствовать разным людям на разных компьютерах.
(Существуют способы, с помощью которых драйвер файловой системы может сообщать программам полное имя пользователя в виде «расширенных атрибутов». К сожалению, несмотря на многочисленные попытки, стандартного способа сделать это не существует, и такие программы ls
обычно стараются избегать трюков, специфичных для файловой системы. Еще более к сожалению, не все сетевые протоколы файловой системыможет(Передача имен пользователей: CIFS (он же SMB) может, NFSv4 может, большинство других не могут.)
Но все это на самом деле не имеет значения.так как то, что высможет сделатьс файлом всегда определяется тем, что знает сервер, а не тем, что видит клиент. Например, если вы используете sshfs
, он входит на сервер по SSH, используя ваше имя пользователя (например sshfs luke@fileserver
), и сервер не позволит вам сделать ничего, что вы не должны делать. То же самое с CIFS, AFS и т. д.
решение2
Владелец — пользователь root на удаленной машине. Если вы хотите иметь доступ к нему как root на удаленной машине, вам придется смонтировать его как root на удаленной машине.
Другими словами, это должно работать (локальный пользователь да, удаленный пользователь root):
aye@ayes-machine$ sshfs root@bees-machine:/path /local-path
Это не сработает (локальный пользователь root, удаленный пользователь bee):
aye@ayes-machine$ sudo sshfs bee@bees-machine:/path /local-path