Это проблема многопользовательских систем, особенно если у вас их несколько. ;) Там нет действительно хороший способ сделать то, что вы хотите. Подходы, приходящие на ум, будут
- иметь одинаковый UID для вашей учетной записи на каждой машине, на которой вы используете внешний диск (на самом деле это невозможно, поскольку, скорее всего, не все машины находятся под вашим контролем)
- использование файловой системы, не подозревающей о концепции владельца / группы (FAT или NTFS приходят на ум, но ... аааа, нет)
Наиболее эффективным подходом будет возвращение к общей практике. В большинстве (по крайней мере) Linux-систем существуют группы, которые обычно имеют общие GID. В качестве примера можно привести users
GID 100
в большинстве дистрибутивов Linux. Если бы вам удалось зарегистрировать свою учетную запись в этой группе, вы могли бы
- сделать все файлы и каталоги на вашем диске принадлежащими этой группе
- каким-то образом удается иметь соответствующие групповые разрешения для этих файлов и каталогов
- каким-то образом удается создать новые файлы с соответствующим владением группой, соответственно. разрешения.
Первый и второй пункт легко выполнить ( 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)
для более подробной информации.