Как ACL вычисляет эффективные полномочия на файл?

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

{ mv directory directory.gone && rm -rf directory.gone; } &

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

9
27.08.2014, 22:41
2 ответа

действующих разрешений формируются с помощью ANDing действительных (реальных?) разрешений с маской .  Так как маска вашего файла имеет значение rw-, все действующие разрешения с маской имеют выключенный бит x.

8
27.01.2020, 20:05

Короткий ответ: если вы хотите замаскировать с включенным битом выполнения, вы должны явно установить его с помощью setfacl после touch. Безопасность запрещает его неявную настройку.

setfacl -n -m m::rwx foo

"-n" для подавления пересчета маски (может не понадобиться).
"m::rwx" устанавливает значение маски равным "rwx". Обратите внимание, что "m::x" отключит все операции чтения и записи.


Я не могу показать, почему маска "rw-". Я предполагаю, что каталог по умолчанию, в котором touch создает файл, остается неизменным для всего примера OP.

  1. В записи каталога для 'foo' должен отображаться владелец 'root' (из-за команды sudo и группы 'guards', потому что для каталога установлен бит SUID. Разрешения будут по умолчанию '-rw-...r- -' с групповыми разрешениями каталога '-...rx...' (из-за того, что бит SUID отображается как маленькая буква s).

  2. Затем идут ACL, которые должны быть каталогом по умолчанию. Учитывая, что ACL наследуют , я не ожидаю, что будут созданы какие-либо ACLe, а маска ACLE будет использоваться по умолчанию для каталога, 'rwx'.

Но если они будут созданы, я ожидаю, что новые ACLe будут подготовлены по умолчанию, снова оставив маска в 'rwx'. Если они не загрунтованы от значений по умолчанию, это, казалось бы, противоречит идее ACL по умолчанию - ACL "по умолчанию" будет предоставлять только ACL именованных пользователей и именованных групп.

Это теперь умоляет Вопрос о том, какой должна быть маска ACLe. Я ожидаю, что это будет «rwx» из записи маски по умолчанию. Но она может быть создана с пустой маской, и тогда применяются всевозможные юридические аспекты.

  1. Имея предварительный ACL-список user::rw-, group::rx, other::r--, group:wheel:rwx, group:guards:rwx и mask::: (unset), мы консультируемся с документацию для setfacl, предполагая, что те же правила применяются к созданию файлов.

Существует пункт:

Если ACL содержит записи именованных пользователей или именованных групп, а записи маски не существует, создается запись маски, содержащая те же разрешения, что и запись группы.

Это установит маску ACL на «r-x», если запись группы ACL была создана из записи каталога файлов, или «r-x», если запись группы ACL поступила из ACL по умолчанию. (В любом случае, в этом случае результат тот же.)

Также есть пункт:

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

Если применяется это правило, маска будет начинаться как «r-x» (та же логика), что и в предыдущем предложении), а затем будет изменена на «объединение всех разрешений, затронутых записью маски».

«Разрешения, на которые влияет ввод маски», не определены в документации по команде setfacl. В документации POSIX ACL говорится:

Маска представляет собой комбинацию всех прав доступа группы-владельца и всех записей пользователей и групп.

Укажите слово «союз», которое является аддитивным, я бы прочитал «сочетание» как логическое ИЛИ.Другими словами, если какая-либо группа или пользователь ACLe имеет разрешение «x», маска будет содержать «x».

  1. По всей этой логике значение маски в примере OP должно быть «rwx», независимо от того, какой логический путь был использован.

Приведенное выше рассуждение должно быть ошибочным, так как x для выполнения не появляется в маске.

Следовательно, должно существовать какое-то правило о том, как вычисляется маска, которое было «скрыто» от общих источников документации (или мы нашли ошибку).

Мой вывод состоит в том, что 'x' всегда безоговорочно удаляется, а документация слабая.

Это изменение, вероятно, было сделано по соображениям «безопасности» — ни один файл не должен быть неявно исполняемым, но должен иметь включенный исполняемый бит после его создания.

8
27.01.2020, 20:05

Теги

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