Как вывести список всех дескрипторов окон Wine, принадлежащих выбранным window PID?

Короткий ответ: если вы хотите замаскировать с включенным битом выполнения, вы должны явно установить его с помощью 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' всегда безоговорочно удаляется, а документация слабая.

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

1
19.12.2016, 19:21
1 ответ

Вот список выбранных дескрипторов (замените terminal.exe именем приложения):

$ winedbg --command "info wnd" | grep -wf <(winedbg --command "info thread" | ex + "/ terminal.exe \ n \ zs /;, / ^ \ S / -p" -scq! / dev / stdin | awk '{print $ 1} ')

В основном мы grep обрабатываем список всех оконных обработчиков ( info wnd ) по определенному списку потоков. Список анализируется редактором ex на основе вывода информационных потоков и сохраняется в специальный файл ( / dev / fd ), который загружается grep ( -f ). Команда awk используется для печати первого столбца, в котором перечислены идентификаторы потоков.

Объяснение используемого синтаксиса ex :

  • + «cmd» - выполнить команду
  • /terminal.exe\n\zs /;, / ^ \ S / -p

    • / pattern1 /;, / pattern2 / - поиск по диапазону (; помещает курсор после первого шаблона)
    • /terminal.exe\n\zs/ - поиск для terminal.exe и отметьте начальную точку ( \ zs )
    • / ^ \ S / - выбор заканчивается на первой непустой строке
    • - p - печатает выделенное выше, за вычетом одной строки (связанное сообщение )
    • -scq! - s тихо и принудительно (! ) выполнить команду q uit c
    • / dev / stdin - прочитать содержимое из стандартного ввода
0
28.01.2020, 01:06

Теги

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