Настоящая проблема заключается в том, как вы разработали синтаксис командной строки <mypgm>
. Вместо того, чтобы пытаться поддерживать два способа интерпретации его аргументов, вместо этого предоставьте два способа его вызова.
Команды Shebang предназначены для сценариев, которые выполняют содержимое вашего сценария; это может быть bash
, perl
или что-то еще, но ожидается, что он вызывается с именем файла сценария для выполнения. Как bash
это делает? Это не угадывается. Если он встречает какой-либо аргумент, который не похож на параметр (или аргумент параметра ), он рассматривает его как сценарий, который необходимо выполнить; аргументы после этого передаются сценарию. Например:
/bin/bash -x -e somename foo bar
Здесь bash будет искать файл somename
и пытаться запустить его как скрипт с аргументами foo
и bar
. Вы должны сделать то же самое, потому что вы возможно захотите когда-нибудь написать <mypgm> <myscript>
в командной строке.
Если вы хотите, чтобы сценарий -меньше использования <mypgm>
использовался по умолчанию, вы можете потребовать передачи сценария с <mypgm> -f <myscript>
. Вот как это делает sed
. Затем вы использовали бы его в строке shebang, подобной этой:
#!<mypgm> -f
Если вы хотите, чтобы сценарий использовался по умолчанию, как в случае с bash
и perl
, создайте параметр, который говорит: «На этот раз сценария нет». Вы можете использовать --
для этого, чтобы <mypgm> -- one two three
не пытался запуститьone
(или что-то еще )как скрипт.В этом случае строка shebang будет просто читать:
#!<mypgm>
Ну, в одном случае для каталога установлен липкий бит(флаг ограничения удаления t
), как в случае /tmp
.
Здесь только владелец файла может удалить его (или владелец каталога)-независимо от прав группы.
Теперь о вашем случае:
Собственник может бегать chmod u+w
сколько угодно, так что этот подход провалится.
Простое и возможное решение :Почему бы не сделать так, чтобы user1
и user2
имели один и тот же UID, и передать право собственности указанному UID? Будет ли это конфликтовать с другими ограничениями вашей системы?
Can we consider the owner as a group that only has exactly 1 member? Does the owner have any special abilities apart from the given permissions?
Не совсем так. Владелец является владельцем файла и может изменять его метаданные. Например, команды chown
, chgrp
, chmod
работают только для владельца файла/каталога (или для root
).
Для разрешений, не являющихся -ACL, владелец, группа и другие являются эксклюзивными группами, -учетная запись не может входить более чем в одну из них.
С помощью этой информации вы должны увидеть, что ограничение прав доступа владельца каталога не имеет особого смысла, потому что как владелец он может назначить любое разрешение по своему выбору. Поэтому в вашем примере вы не можете иметь user3
в качестве владельца.
Что касается меня, я бы, вероятно, владел каталогом как root
. Я бы user1
и user2
в группе, как вы предлагаете. И user3
я бы вообще исключил, чтобы они считались "другими".
Если бы у вас были другие учетные записи в системе, которые не должны иметь доступа к этим каталогам, например user3
, я бы создал еще одну группу, содержащую всех разрешенных пользователей, и использовал бы каталог с разрешениями этой группы для размещения целевого каталога.:
holding_dir: owner:root=rwx, group:big_group(users 1,2,3):rx, other:-
|
+-- target1: owner:root=rwx, group:small_group(users 2,3):rwx, other:rx
+-- target2: owner:root=rwx, group:small_group(users 2,3):rwx, other:wx