Как мы будем понимать правила возможностей в отношении exec ()?

Из интерфейса программирования Linux:

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

Означает ли это, что разрешенный набор процесса представляет собой расширенный набор как эффективного набора, так и наследуемого набора процесса?

Ядро рассчитывает новые возможности процесса, используя следующие правила:

P ‘(разрешено) = (P (наследуется) & F (наследуется)) | (F (разрешено) & cap_bset)

P ‘(эффективный) = F (эффективный)? P ‘(разрешено): 0

P ‘(наследуемый) = P (наследуемый)

В приведенных выше правилах P обозначает значение набора возможностей до exec() , P ‘обозначает значение набора возможностей после exec() , а F обозначает набор возможностей файла. Идентификатор cap_bset обозначает значение ограничивающего набора возможностей.

Как правила гарантируют, что P ‘(разрешенный) является надмножеством P’ (наследуемым)? Другими словами, может ли P ‘(разрешено) стать не надмножеством P (наследуемым)?

Что означает «F (эффективно)? P ‘(разрешено): 0»?

Являются ли наборы P(xxx) и F(xxx) или наборы битов? Если последнее, операции над ними битовые операции? Если прежние, операции над ними устанавливаются (объединение и пересечение)?

2 Solutions collect form web for “Как мы будем понимать правила возможностей в отношении exec ()?”

Что означает «F (эффективно)? P ‘(разрешено): 0»?

predicate ? a : b выражения predicate ? a : b predicate ? a : b , происходит от C как языки. Это означает, a if predicate else b или если предикат истинен, он оценивается как a else, который он оценивает как b .

Следовательно, P'(effective) = F(effective) ? P'(permitted) : 0 P'(effective) = F(effective) ? P'(permitted) : 0 означает, что если установлен эффективный бит файлов, скопируйте разрешенный набор в эффективный набор процессов, иначе оставьте эффективный набор пустым.

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

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

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

Являются ли наборы P (xxx) и F (xxx) или наборы битов? Если последнее, операции над ними битовые операции? Если прежние, операции над ними устанавливаются (объединение и пересечение)?

Большинство наборов битов, но F(effective) – один бит.

Вы также спросили:

Как правила гарантируют, что P ‘(разрешенный) является надмножеством P’ (наследуемым)? Другими словами, может ли P ‘(разрешено) стать не надмножеством P (наследуемым)?

Это не так, ваше заявление не читается.

[Разрешено] также является ограничивающим надмножеством возможностей, которые могут быть добавлены в наследуемый набор.

Таким образом, процесс может наследовать возможности своего унаследованного набора, которых нет в разрешенном наборе. Но может не добавить возможность в унаследованный набор, если только он не находится в разрешенном наборе.

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

Означает ли это, что разрешенный набор процесса представляет собой расширенный набор как эффективного набора, так и наследуемого набора процесса?

Нет, и это утверждение, хотя и является кратким, не претендует на такое утверждение (расширенный набор вещей, которые могут быть добавлены! = Расширенный набор вещей, которые уже есть). Наследственный набор не должен начинаться с нуля.

Manages (7) на моей системе объясняет это лучше:

 Permitted: This is a limiting superset for the effective capabilities that the thread may assume. It is also a limiting superset for the capabilities that may be added to the inheritable set by a thread that does not have the CAP_SETPCAP capability in its effective set. 

Как правила гарантируют, что P ‘(разрешенный) является надмножеством P’ (наследуемым)? Другими словами, может ли P ‘(разрешено) стать не надмножеством P (наследуемым)?

Это не гарантирует такую ​​вещь. Например, P ‘(разрешенный) станет пустым набором (то есть не расширенным набором P (наследуемый)), когда stream выполняет программу без “security.capability” в расширенном атрибуте файла (то есть с пустым F (наследуемым) и F (разрешено).

Что означает “P ‘(эффективный) = F (эффективный)? P’ (разрешенный): 0”?

Если F (эффективный) не пустой, то установите P ‘(эффективный) в P’ (разрешенный), то есть сделайте все разрешенные возможности эффективными с самого начала. Так как имеет значение только пустое / непустое состояние F (эффективное), оно реализовано с помощью только бита / флага в расширенном атрибуте файла «security.capability».

Являются ли наборы P (xxx) и F (xxx) или наборы битов?

Они биты.

NB: эти вещи немного устарели; теперь существует также набор возможностей окружения , который учитывается при расчете эффективного набора. Проверьте man-страницу возможностей (7) в любой новой системе.

Linux и Unix - лучшая ОС в мире.