Монтирование файловой системы со специальным набором идентификаторов пользователя

19

Я хочу смонтировать устройство /dev/sda3в каталог /foo/bar/baz. После монтирования в каталоге должен быть указан uid пользователя johndoe. Так я и сделал:

sudo -u johndoe mkdir /foo/bar/baz
stat -c %U /foo/bar/baz
johndoe

и добавил следующую строку в мой /etc/fstab:

/dev/sda3 /foo/bar/baz ext4 noexec,noatime,auto,owner,nodev,nosuid,user 0 1

Когда я делаю сейчас, sudo -u johndoe mount /dev/sda3команда stat -c %U /foo/bar/bazприводит к, rootа не johndoe. Каков наилучший способ монтировать эту файловую систему ext4 с johndoeустановленным uid ?

QBi
источник

Ответы:

20

Невозможно принудительно установить владельца на диск с файловой системой ext4. Только файловые системы, которые не поддерживают разрешения Linux, такие как fat, имеют атрибут владения / группового доступа: uid=valueи gid=value. Смотрите страницу руководства по креплению .

Вы должны изменить владельца в смонтированной файловой системе, как в:

sudo chown johndoe /foo/bar/baz

Если вам нужно изменить разрешения рекурсивно:

sudo chown -R johndoe /foo/bar/baz

... и если необходимо изменить группу на johndoe:

sudo chown -R johndoe: /foo/bar/baz
Lekensteyn
источник
2
Рекурсивная смена владельца - плохая идея, если вы можете ей помочь. После того, как вы уничтожили «правильное» владение, практически нет простого способа вернуть его. IMO bindfs - правильный способ справиться с этим (см. Мой ответ).
Catskul
3
bindfs звучит как еще один уровень сложности. Мой ответ лучше всего подходит для внешнего жесткого диска (для резервного копирования), который использовался в предыдущей установке с другим идентификатором пользователя. Его не следует использовать в ситуациях, когда необходимо сохранить несколько пользовательских идентификаторов (корневая файловая система), но в этом случае -uтакже не следует использовать bindfs с, поскольку это позволяет обойти ограничения доступа из разных пользовательских идентификаторов. --mapследует использовать, если вы хотите сохранить ограничения доступа.
Лекенштейн
1
+1 за «это возможно только на FS без разрешения» - я пытался использовать, uidи gidэто не сработает.
Mgarciaisaia
19

bindfsэто ответ. Он возьмет уже смонтированную файловую систему и предоставит для просмотра все, что вам нужно:

sudo apt-get install bindfs
mkdir ~/myUIDdiskFoo
sudo bindfs -u $(id -u) -g $(id -g) /media/diskFoo ~/myUIDdiskFoo
Catskul
источник
1
У bindfs есть другие режимы работы, см .: bindfs.org/docs/bindfs.1.html
Lekensteyn
2
Тьфу, он использует FUSE.
Навин
Я хотел смонтировать виртуальную файловую систему 9p с другими правами доступа, чем у основной ОС. Я бился головой об стену, пытаясь заставить ее работать. Bindfs действительно вытащил меня из-под контроля. Отличный маленький инструмент!
Boann
6

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


Чтобы узнать идентификатор группы файла, используйте ls -n. Пример вывода:

drwxr-xr-x 1 1000 1000  550 Jul  9 11:08 Desktop/

Вы хотите четвертое поле для GID, которое в моем случае является вторым 1000.

sudo addgroup --gid GID foobar; sudo usermod `whoami` -aG foobar

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

Как отмечено в другом ответе, касающемся прав доступа пользователя, если вам нужно исправить группу в некоторых файлах, запустите один из них:

sudo chown -R :foobar ./
sudo chgrp -R  foobar ./
Chinoto
источник
1
Обратите внимание, если вы хотите переключить пользователя или группу с A на B без изменения владельца файлов, которые не являются A; Вы можете использовать sudo chown --from A B -R ./для пользователей и sudo chown --from :A :B ./для групп
LateralFractal