У меня есть каталог, который содержит данные, которыми обмениваются несколько пользователей. Доступ к этому каталогу и всем, что находится под ним, будет контролироваться группой каталога, которая будет добавлена к соответствующим пользователям. В качестве такового я создал chmod g+s
набор папок «Sticky Group» . Каталог будет содержать древовидную структуру с каталогами и файлами, с общим количеством файлов, вероятно, несколько миллионов. Файлы будут довольно маленькими, я не ожидаю ничего больше, чем 50 МБ.
Моя проблема в том, что владельцем файла или каталога по-прежнему является пользователь, который их создал. Таким образом, даже если бы я удалил этого пользователя из группы доступа, я бы не удалил его доступ полностью.
Так:
Есть ли другие варианты, которые я пропустил, чтобы гарантировать, что все файлы и подкаталоги имеют одного и того же владельца?
Я ожидаю, что смогу периодически просматривать весь каталог с помощью cron-job, но это кажется мне неэффективным для того, что по сути является командой Once-pr-file.
Я нашел пример с использованием INotify, но мне кажется, что он требует большого обслуживания, поскольку требует сценариев.
Я не смог выяснить, может ли ACL помочь мне с принудительным владением.
Есть ли более умный способ сделать это?
Я хочу иметь каталог, которым можно поделиться, добавив группу пользователю. Все, что создано в этом каталоге, наследует схему разрешений от своего родителя. Если есть лучший способ, чем я пытаюсь, я весь в ушах.
источник
chown -hR owner:group
?Ответы:
Установка владельца по умолчанию «автоматически» потребует, чтобы каталог
setuid
вел себя какsetgid
. Однако, хотя это можно настроить во FreeBSD, другие системы UNIX и Linux просто игнорируютu+s
. В вашем случае, однако, может быть другое решение.Итак, по сути, из того, что я вижу, вы хотите контролировать доступ к каталогу, используя механизм групп. Однако для этого не требуется ограничивать разрешения во всей структуре каталогов. На самом деле,
--x
бит выполнения каталога может быть именно тем, что вам нужно. Позвольте привести пример. При условии, что...group_dir
каталогу, естьourgroup
.ourgroup
группе могут получить доступgroup_dir
.user1
иuser2
принадлежатourgroup
.... рассмотрим следующую настройку:
Здесь, давайте предположим, что каждый элемент был создан его владельцем.
Теперь в этой настройке:
ourgroup
. Любой из группы может создавать, перемещать, удалять файлы где угодно внутриgroup_dir
(но не глубже).ourgroup
будет заблокированgroup_dir
, и поэтому не сможет манипулировать чем-либо под ним. Например,user3
(который не является членомourgroup
) не может читатьgroup_dir/user2_submission/README
(даже если у него естьr--
разрешение на сам файл).Однако в этом случае есть небольшая проблема: из-за типичного umask элементы, созданные пользователями, не могут манипулироваться другими членами группы. Вот где приходят ACL. Установив разрешения по умолчанию, вы убедитесь, что все в порядке, несмотря на значение umask:
Этот вызов устанавливает:
rw(x)
Разрешения по умолчанию для владельца.rw(x)
Разрешения по умолчанию для группы.group_dir
любом случае, на самом деле не имеет значения, какие у них права доступа.Теперь, если я создаю элемент как
user2
:Имея этот ACL, мы можем попытаться перестроить нашу предыдущую структуру:
Здесь снова каждый элемент создается его владельцем.
Кроме того, если вы хотите дать немного больше энергии / безопасности тем, кто использует каталог, вы можете рассмотреть некоторые проблемы. Это, например, предотвратит
user1
удалениеuser2_submission
(так как у него есть-w-
разрешениеgroup_dir
):Теперь, если
user1
попытается удалитьuser2
каталог, он получит прекрасныйOperation not permitted
. Однако обратите внимание, что, хотя это предотвращает изменение структуры каталоговgroup_dir
, файлы и каталоги, расположенные ниже, по-прежнему доступны:Еще одна вещь, которую следует принять во внимание, это то, что используемые ACL-списки устанавливают разрешения по умолчанию . Поэтому владелец элемента может изменить связанные с ним разрешения. Например,
user2
может отлично работать ...... следовательно, делает его полный каталог представления недоступным для всех в группе.
Однако, поскольку вы изначально готовы предоставить полный
rws
доступ кому-либо в группе, я предполагаю, что вы доверяете этим пользователям и не ожидаете от них слишком большого количества вредоносных операций.источник
group_dir
первым, независимо от того, владеет ли он файлом или нет. Единственная реальная «привилегия», которой обладает владелец, заключается в том, что он может изменять права доступа к своим созданиям (о чем я немного подробнее рассказал в своем ответе).group_dir
Каталог принадлежитroot:ourgroup
с-rwxr-x---
, что означает , что только корень и члены имелиourgroup
доступ к нему, то есть сделать что - нибудь с файлами под ним. Если у вас нет--x
прав доступа к каталогу, вы не сможете получить доступ к файлу внутри него, даже если у вас есть права доступа к самому файлу.Есть более разумный способ сделать это. Он использует комбинацию set-gid и acls по умолчанию . Очевидно, вам понадобится файловая система с поддержкой acl. Давайте предположим, что каталог, к
/var/grpdir
которому вы хотите предоставить общийsharing
доступ, и что члены группы должны иметь к нему доступ.ACL по умолчанию наследуются подкаталогами, созданными в каталоге с ACL по умолчанию. Таким образом, это означает, что любой файл, созданный в,
/var/grpdir
будет иметь свою группу, установленнуюsharing
битом setgid каталога. Кроме того, он унаследует acls по умолчанию, который переопределит стандартные разрешения стиля linux, потому что мы не указывали ACL с конкретными пользователями или группами. Это означает, что все файлы будут созданы с правами собственности<user>:sharing
и правамиrw-rw----
. Каталоги будут такими же, за исключением того, что они также будут иметь свои собственные списки ACL по умолчанию, настроенные на то же самое, что и их parent (/var/grpdir
), и, конечно, имеют исполняемые биты, установленные для пользователя и группы. Если вы удалите пользователя изsharing
группы, он не сможет получить доступ к каталогу (ни к каким файлам в нем, даже если они им принадлежат).В отличие от периодического исправления разрешений с помощью cronjob, разрешения всегда синхронизируются, так как они обновляются атомарно с помощью вновь созданных файлов и каталогов. Это решение легкое; никаких демонов не требуется, и нет никакого всплеска ввода-вывода при исправлении разрешений одним махом.
источник
Я не знаю ни одного хорошего способа сделать это. Технически самым чистым способом была бы файловая система FUSE, которая делает это. Конечно, много работы, если никто еще этого не сделал.
Альтернативы:
Используйте самбу. Самба имеет
force user
параметр. Вы можете экспортировать каталог локально и смонтировать его локально. Не делает доступ быстрее, но может быть приемлемым, так как задействована только обратная связь.Используйте не Linux-файловую систему, такую как FAT32. Это должно быть настроено для определенного пользователя, чтобы монтировать его. Права доступа должны обрабатываться родительским каталогом.
источник
Я не слышал ни о каком способе автоматического изменения владельца файла так, чтобы владелец файла изменялся при перемещении файла в определенный каталог. Ближайшая вещь - это залипание, но, похоже, вы указали, что владение группой недостаточно, фактическое владение пользователем должно измениться.
В этом случае, я думаю, что ваша лучшая ставка - это работа cron с флагом chown -R, как упоминал Pandya. Положите его на крон для запуска каждую минуту или каждые пять минут.
Если вы можете объяснить, как ваши пользователи используют это, может быть, есть лучшее решение.
ACL может помочь вам получить более точный контроль над тем, кому и что разрешено делать, он не будет автоматически изменять фактическое владение файлом для вас. Я думаю, что вам нужно получить более высокий обзор и оценить / изменить свое решение на этой основе.
источник
Вы можете использовать inotify-tools и написать простой скрипт bash, как показано ниже. Inotify будет следить за сетью каталогов и делать что-то, когда в веб-каталоге будет происходить событие, такое как создание директории. Есть много событий, существующих. Вы можете погуглить или посмотреть на этом сайте
источник