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

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

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

    chmod 777 /mnt/externalDrive литий> chown nobody:nogroup /mnt/externalDrive литий>

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

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

16 голосов | спросил Lord Loh. 24 AMpThu, 24 Apr 2014 02:50:30 +040050Thursday 2014, 02:50:30

4 ответа


18

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

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

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

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

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

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

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

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

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

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

ответил Andreas Wiese 24 AMpThu, 24 Apr 2014 03:08:28 +040008Thursday 2014, 03:08:28
10

Есть другой подобный вопрос и предлагается bindfs

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

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

  

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

ответил Michael Shigorin 12 +04002014-10-12T19:24:28+04:00312014bEurope/MoscowSun, 12 Oct 2014 19:24:28 +0400 2014, 19:24:28
4

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

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

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

ответил derobert 24 AMpThu, 24 Apr 2014 03:11:29 +040011Thursday 2014, 03:11:29
2

Andreas Wiese говорит, что если у вас есть общий идентификатор группы на всех хостах, вы можете решить свою проблему с помощью 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 используется для обеспечения полного решения.

См. также:

ответил gavenkoa 1 PMpFri, 01 Apr 2016 20:09:39 +030009Friday 2016, 20:09:39

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132