Могу ли я портировать разрешения пользователей на компьютеры для внешнего жесткого диска ext4?


16

У меня есть внешний диск USB 3 (емкостью 2 ТБ), который, скорее всего, будет перемещаться с компьютера на компьютер. Диск имеет таблицу разделов GUID и раздел ext4. Я не могу записать на диск, если не поднимаю процесс ( sudo).

На данный момент я думаю попробовать одно или оба из следующих и хотел бы знать минусы каждого -

  1. chmod 777 /mnt/externalDrive
  2. chown nobody:nogroup /mnt/externalDrive

Если я даю разрешение 777, и пользователь user1 (UID: 1005) выполняет запись в него, а затем я перемещаю диск на другой компьютер, где user7 имеет UID: 1005, что произойдет? Становится ли user7 владельцем файла на этом компьютере? Мне кажется, что мне периодически придется запускаться chown -R nobody:nogroup /mnt/externalDriveна диске.

Что-нибудь из того, что я считаю очевидной плохой практикой? Диск, скорее всего, будет содержать видео, музыку и изображения, которые не нужно защищать, как некоторые финансовые данные.


Я не уверен, что пойду за тобой. Вы пытались установить разрешения на внешнем диске?
Рамеш

1
Да. Это хорошо?
Лорд Ло.

Ответы:


19

Это проблема многопользовательских систем, особенно если у вас их несколько. ;) Там нет действительно хороший способ сделать то, что вы хотите. Подходы, приходящие на ум, будут

  • иметь одинаковый UID для вашей учетной записи на каждой машине, на которой вы используете внешний диск (на самом деле это невозможно, поскольку, скорее всего, не все машины находятся под вашим контролем)
  • использование файловой системы, не подозревающей о концепции владельца / группы (FAT или NTFS приходят на ум, но ... аааа, нет)

Наиболее эффективным подходом будет возвращение к общей практике. В большинстве (по крайней мере) Linux-систем существуют группы, которые обычно имеют общие GID. В качестве примера можно привести usersGID 100в большинстве дистрибутивов Linux. Если бы вам удалось зарегистрировать свою учетную запись в этой группе, вы могли бы

  1. сделать все файлы и каталоги на вашем диске принадлежащими этой группе
  2. каким-то образом удается иметь соответствующие групповые разрешения для этих файлов и каталогов
  3. каким-то образом удается создать новые файлы с соответствующим владением группой, соответственно. разрешения.

Первый и второй пункт легко выполнить ( chown, chmod). Третий пункт немного сложнее.

Часть «владение группой» относительно проста: вы можете установить бит SGID во всех каталогах на диске. Бит SGID, применяемый к каталогам, говорит ядру, что он должен вести себя по-BSDish: BSD делает каждый файл / каталог, созданный в определенной группе каталогов, принадлежащим не основной группе процесса, создавая файл / каталог (как это делает Linux), но владельцем родительского каталога.

Разрешение немного сложнее. На разрешения вновь создаваемых файлов / каталогов (помимо прочего) влияет umaskбитовая маска, сообщающая, какие биты не устанавливать, если это не указано явно. Например, общим umaskзначением является то 022, что биты записи для »group« и »others« обычно не должны устанавливаться. Вы можете изменить его umaskна 002, сказав, что вы не хотите, чтобы разрешения на запись очищались для группы, но недостатком является то, что вы не можете установить это значение на основе каталога и обычно не хотите иметь права на запись для ваша основная группа установлена ​​для каждого файла, который вы создаете.

Это можно решить с помощью списков ACL: в ACL вы можете установить набор разрешений a maskи default, который применяется ко всем файлам и каталогам, созданным внутри каталога с этим набором ACL. Таким образом, одним из возможных решений вашей проблемы будет

  • убедитесь, что вы являетесь членом общей группы на всех системах, на которых вы хотите использовать свой внешний диск
  • сделайте все файлы и каталоги на вашем диске принадлежащими этой группе и установите бит SGID во всех каталогах
  • измените ACL всех каталогов, включив в них маску и разрешения по умолчанию, которые сообщают ядру о создании каждого нового файла / каталога с разрешениями на запись, установленными для группы.

Смотрите setfacl(1), и acl(5)для более подробной информации.


1
В ext4 был плавающий патч для отображения его и gid, spinics.net/lists/linux-fsdevel/msg57240.html , но я не думаю, что он прошел ...
Rmano

11

Есть еще один похожий вопрос, и здесь предлагается bindfs:

mkdir /home/$user/sda1
bindfs -u $user -g $group /mnt/sda1 /home/$user/sda1

Пользователи OSX предлагают noownersвариант монтирования, описанный так:

Игнорировать поле владения для всего тома. Это приводит к тому, что все объекты отображаются как принадлежащие идентификатору пользователя 99 и идентификатору группы 99. Идентификатор пользователя 99 интерпретируется как текущий эффективный идентификатор пользователя, в то время как идентификатор группы 99 используется напрямую и переводится как «неизвестный».


bindfs довольно медленный Возможно, потому что это файловая система FUSE.
Навин

4

Владелец и группа файла хранятся в виде чисел. Таким образом, файл будет принадлежать uid = 1005, независимо от того, к какому пользователю (или его вообще нет) пользователь системы подключен.

Изменение пользователя / группы на никто не решит вашу проблему. Тогда только пользователь nobody (или члены группы nobody) будет иметь доступ к файлам.

К сожалению, я не думаю, что есть способ отключить проверку разрешений на ext4. См., Например, Возможно ли отключить права доступа к файлам в файловой системе ext3 или ext4?


2

Андреас Визе говорит, что если у вас есть общий идентификатор группы на всех хостах, вы можете решить проблему с помощью setgidбитов и ACL

Я задаю вопрос Предопределенные идентификаторы групп в дистрибутивах Linux?

После собственных исследований выяснилось, что такая группа существует во всех затронутых дистрибутивах: sysидентификатор общей группы 3на Debian, Ubuntu, RedHat, Fedora, CentOS, Suse, FreeBSD, OpenBSD, NetBSD, MacOSX, Solaris.

С этим:

$ sudo chgrp -R sys /mnt/data/dir
$ sudo chmod -R g+s /mnt/data/dir
$ sudo setfacl -R -m g:sys:rwx /mnt/data/dir
$ sudo setfacl -R -d -m g:sys:rwx /mnt/data/dir

и вкус этого:

$ sudo adduser user sys

Вы userсможете читать / писать любые файлы на /dir.

Большая часть работы может быть setgidполезной, но, к сожалению, у вас обычно мало контроля umask. Таким образом, ACL используется для предоставления полного решения.

Смотрите также:

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.