Один файл должен принадлежать двум пользователям. Как? Сбой жесткого связывания

Я бы предложил использовать

find / '(' -iname '*.htm' -o -iname '*.html' ')' -printf '%h\n' | uniq | xargs -r -d '\n' ls -l

Первую часть, find / '(' -iname '* .htm' -o -iname ' * .html '') '-printf'% h \ n ', находит все файлы, заканчивающиеся на .htm или .html в верхнем или нижнем регистре (используя glob шаблоны) и печатает каталог (% h ) для каждого такого найденного файла, по одному каталогу в строке.

Из-за того, как find сканирует каталоги, в списке есть один или несколько последовательных идентичных каталогов; uniq сохраняет только по одному из них.

Наконец, мы передаем список каталогов в xargs , говоря ему не запускать команду без каталогов -r , и что разделителем является новая строка - d '\ n' . Команда ls -l ; доработайте по своему вкусу.

Если вам нужен только список каталогов, а не их содержимое, отбросьте часть xargs :

find / '(' -iname '*.htm' -o -iname '*.html' ')' -printf '%h\n' | uniq
32
17.08.2016, 19:13
5 ответов

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

chgrp bar file
chmod 640 file
setfacl -m g:baz:r-- file

Теперь обе группы bar и baz могут читать файл.

Например, вот файл, принадлежащий bin: bin с режимом 640.

$ ls -l foo
-rw-r-----+ 1 bin bin 5 Aug 17 12:19 foo

+ означает, что существует набор ACL, поэтому давайте взглянем на него.

$ getfacl foo
# file: foo
# owner: bin
# group: bin
user::rw-
group::r--
group:sweh:r--
mask::r--
other::---

Мы видим строку group: sweh: r - : это означает, что люди в группе sweh могут ее прочитать.

Эй, это я!

$ id
uid=500(sweh) gid=500(sweh) groups=500(sweh)

И да, я могу прочитать файл.

$ cat foo
data
50
27.01.2020, 19:37

Я думаю, это типичное использование списков управления доступом (ACL). Добавьте обоих пользователей (или группы) в ACL конфигурационного файла:

/etc/foo  root:root rw-------  # Traditional Unix ownership and permission for foo
$ setfacl -m user:bar:rw- /etc/foo  # Allows user bar to read and write foo
$ setfacl -m user:baz:rw- /etc/foo  # Allows also user baz to read and write foo

Возможно, вам сначала придется установить acl-пакет.

16
27.01.2020, 19:37

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

«Новый» «облачный» способ состоит в том, чтобы вся конфигурация обрабатывалась системой управления конфигурациями (например, chef , puppet или ] анзиблем ). В этом случае не имеет значения, что у вас есть два разных, но идентичных файла на сервере, поскольку оба являются копией одного файла из системы управления конфигурацией.

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

(Для записи, поскольку вы не используете управление конфигурацией, я бы выбрал групповую систему, как в ответе @ drg).

2
27.01.2020, 19:37

Вы можете пересмотреть эти утверждения:

Возможное решение: Создайте новую группу barbaz, членами которой являются bar и baz . Пусть foo принадлежит root: barbaz .

Мне это кажется довольно жестким решением. Нет ли более аккуратного и простого способа поделиться файлом конфигурации foo между двумя программами?

Почему создание новой группы - это неуклюжее? Это дает следующие преимущества перед ACL:

  • Хотя вы сформулировали это как гипотетическое с помощью команд / usr / bin / bar и / usr / bin / baz , это актуально что эти две программы могут совместно использовать файл конфигурации. Это говорит о том, что программы естественно связаны. Создание для них новой группы, казалось бы, описывает отношения, которые действительно существуют и должны вызывать поведение (например, разрешения на чтение общего файла конфигурации).
  • Решение этой проблемы с помощью групп переносимо на каждый Unix, что означает, что вы можете полагаться на один и тот же механизм, работающий точно так же, в любой Unix или Unix-подобной системе. ACL намного сложнее, и их переносимость может быть проблемой.

Лично я считаю ACL жестким решением, а группы - более простым, традиционным для Unix способом.

23
27.01.2020, 19:37

Сделайте режим файла 0660 (или даже 0440, если запись не требуется) и право собственности bar:baz. Тогда один процесс сможет получить доступ к файлу благодаря пользовательским разрешениям, а другой - благодаря групповым. Это работает даже на файловых системах, где ACL нет.

3
27.01.2020, 19:37

Теги

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