Вопрос: Почему chmod (1) в группе влияет на маску ACL?


Я пытаюсь понять это поведение Unix (которое я тестирую на Ubuntu 11.10):

$ touch foo
$ setfacl -m u:nobody:rwx foo
$ getfacl foo
# file: foo
# owner: michael
# group: michael
user::rw-
user:nobody:rwx
group::rw-
mask::rwx
other::r--

$ chmod g-rw foo
$ getfacl foo
# file: foo
# owner: michael
# group: michael
user::rw-
user:nobody:rwx         #effective:--x
group::rw-          #effective:---
mask::--x
other::r--

Обратите внимание, что команда chmod (1) обновила маску ACL. Почему это происходит?

Руководство пользователя SunOS должен сказать следующее:

Если вы используете команду chmod (1), чтобы изменить владельца группы файлов   разрешений на файл с записями ACL, как владелец группы файлов   разрешений и маски ACL изменены на новые разрешения. Быть   что новые разрешения маски ACL могут   разрешений для дополнительных пользователей и групп, у которых есть записи ACL на   файл.

Я спрашиваю, потому что это было бы удобно для меня, если бы chmod (1) не имел такого поведения. Я надеюсь, что, понимая, почему он делает то, что он делает, я могу лучше спроектировать, как я установил права на файловую систему.


15
2018-01-23 16:34


Источник


Теперь я задаюсь вопросом, должен ли я спрашивать об этом на unix.stackexchange.com. Попытка выбрать правильный сайт всегда сложна. - Michael Kropat


Ответы:


Это не быть удобным для вас, если chmod() не было такого поведения.

Было бы очень неудобно, потому что вещи, которые традиционно ожидают работать в Unixes, нарушатся. Такое поведение вам хорошо помогает, знаете ли вы это.

Жаль, что IEEE 1003.1e никогда не становился стандартом и был снят в 1998 году. На практике, четырнадцать лет спустя, это стандарт, что широкий диапазон операционных систем - от Linux через FreeBSD в Solaris - фактически реализуют.

Рабочий проект № 17 IEEE 1003.1e делает интересным чтение, и я рекомендую его. В добавлении B § 23.3 рабочая группа содержит подробное 8-страничное обоснование относительно сложного способа работы ACL POSIX в отношении старого S_IRWXG флаги разрешения групп. (Стоит отметить, что люди TRUSIX предоставили такой же анализ десятью годами ранее.) Я не собираюсь копировать все это здесь. Прочтите обоснование в проекте стандарта для деталей. Вот очень краткий:

  • Руководство SunOS ошибочно. Это должен читать

    Если вы используете chmod(1) команду изменить права владельца группы файлов на файл с записями ACL, или разрешения владельца группы файлов или маска ACL изменяется на новые разрешения.

    Это поведение, которое вы можете видеть происходящее, несмотря на то, что говорит текущая справочная страница, в вашем вопросе. Это также поведение, указанное в проекте стандарта POSIX. Если CLASS_OBJ (Терминология Sun и TRUSIX для ACL_MASK) существует запись контроля доступа, биты группы chmod() установите его, иначе они GROUP_OBJ вход контроля доступа.

  • Если бы это было не так, приложения, которые выполняли различные стандартные действия с помощью `chmod ()`, ожидая, что он будет работать как `chmod ()`, традиционно работали над старыми не-ACL Unixes, либо оставят зияющие дыры в безопасности, либо видят, что они думают, что они зияют дыры в безопасности:

    • Традиционные приложения Unix ожидают, что смогут отказать в доступе к файлу, названию pipe, device или directory, с chmod(…,000), При наличии ACL это только отключается все пользователя и группы, если старый S_IRWXG карты для CLASS_OBJ, Без этого, установив старые разрешения файлов на 000 не повлияет на USER или GROUP записи и другие пользователи, что удивительно, все же имеют доступ к объекту.

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

    • Традиционные сценарии Unix ожидают, что они смогут chmod go-rwx и в конечном итоге только владелец объекта может получить доступ к объекту. Еще раз - как вы можете видеть - это все еще полученная мудрость двенадцать лет спустя. И снова это не работает, если S_IRWXG карты для CLASS_OBJ если он существует, поскольку в противном случае chmod команда не отключит USER или GROUP записи контроля доступа, приводящие к тому, что пользователи, кроме владельцев и не владеющих групп, сохраняют доступ к тому, что ожидается быть доступным только владельцу.

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

      Система, в которой биты разрешений в остальном были отделены от ored с ACL будут иметь chmod(…,000) проблема упомянутый ранее.

дальнейшее чтение


21
2018-01-23 23:33



Удивительно, что все это имеет большой смысл. Ваше разъяснение на странице руководства подтвердило мои подозрения в отношении поведения, в то время как ваши три объяснения были именно тем, что мне нужно, чтобы стать просвещенным по этому вопросу. Я намного счастливее, зная, какой дизайн дизайна, и я так рад, что вы разместили свою презентацию, что избавило меня от всех этих чтений, чтобы ответить на один вопрос. - Michael Kropat
Будем ли мы застрять с этой бессмысленной бессмысленной совместимостью в течение следующих 50 лет ?! Я имею в виду, ЧТО ФУТК? - hopeseekr
@hopeseekr Вы всегда можете использовать fork Linux, 100s утилиты GNU и 1000 сторонних программных продуктов, чтобы они не использовали S_IRWXG разрешений больше. Позвони мне, когда закончишь. - Tobia


Это поведение применимо только к записям ACL POSIX. Причина в том, что у вас есть папка, и внутри этой папки существует файл, вы можете использовать acl как rwx (например) папку и файл. Если групповые разрешения файла rw- (которые они могут быть как типичный сценарий), таким образом, маска дает acl эффективные разрешения rw- хотя ACL явно обозначает rwx.

С другой стороны, каталог, который почти всегда равен + x, имеет эффективные разрешения маски ACL, что также позволяет + x.

Таким образом, эта маска в основном используется для различения разрешений между файлами и папками для набора ACL POSIX, чтобы файл не стал исполняемым, если он обычно не должен быть.


1
2018-01-23 16:42