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)
아니면 비트 세트인가요? 후자의 경우 해당 작업이 비트 작업인가요? 전자인 경우, 그들의 연산은 연산(합집합과 교차점)을 설정합니까?
답변1
"F(유효)? P'(허용): 0"은 무엇을 의미합니까?
이 표현은 비슷한 언어 predicate ? a : b
에서 유래되었습니다 . C
이는 조건자가 true 인 경우 else 를 의미 a if predicate else b
하거나 평가합니다 .a
b
따라서 P'(effective) = F(effective) ? P'(permitted) : 0
파일 유효 비트가 설정되면 허용된 세트가 프로세스 유효 세트에 복사되고, 그렇지 않으면 유효한 세트가 비어 있음을 의미합니다.
이는 기능을 이해하지 못하는 레거시 애플리케이션(아마 요즘 대다수)에 필요합니다. 기능 인식 응용 프로그램은 유효한 기능 없이 시작하고, 필요할 때 기능을 유효한 세트에 복사하고, 완료되면 유효한 세트를 지웁니다(버그로 인해 발생할 수 있는 피해 감소).
허용된 집합은 유효하고 상속 가능한 집합에 추가할 수 있는 기능의 제한된 상위 집합입니다.
허용된 범위 내에 있는 경우에만 유효하거나 상속된 세트에만 기능을 추가할 수 있습니다. 그러나 상속된 세트에 기능을 추가하려면 경계 세트에도 있어야 합니다. — 이 단락은 댓글에서 논의되고 있습니다(변경될 수 있음).
P(xxx) 및 F(xxx) 세트입니까, 아니면 비트 세트입니까? 후자라면 해당 연산은 비트 연산인가요? 전자인 경우, 그들의 연산은 연산(합집합과 교차점)을 설정합니까?
대부분은 비트 그룹이지만 F(effective)
단일 비트입니다.
당신은 또한 다음과 같이 질문했습니다.
규칙은 P'(허용)가 P'(상속 가능)의 상위 집합임을 어떻게 보장합니까? 즉, P'(허용됨)가 P(상속 가능)의 상위 집합일 수 있습니까?
그렇지 않습니다. 귀하의 진술은 철자가 틀렸습니다.
[allow]는 가능한 기능의 제한된 상위 집합이기도 합니다.다음에 추가상속 가능한 세트로.
따라서 프로세스는 허용된 집합에 없는 상속 집합에서 기능을 상속할 수 있습니다. 그러나 해당 기능이 이미 허용된 세트에 포함되어 있지 않으면 상속된 세트에 기능을 추가할 수 없습니다.
답변2
허용된 집합은 유효하고 상속 가능한 집합에 추가할 수 있는 기능의 제한된 상위 집합입니다.
이는 프로세스의 허용 집합이 프로세스의 유효하고 상속 가능한 집합의 상위 집합이라는 의미입니까?
아니요, 그 진술은 간결하지만 그러한 주장을 하지 않습니다(추가할 수 있는 항목의 상위 집합! = 이미 존재하는 항목의 상위 집합). 상속 가능한 세트는 빈 상태에서 시작할 필요가 없습니다.
내 시스템의 function(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(상속 가능)의 상위 집합일 수 있습니까?
그런 것을 보장하지는 않습니다. 예를 들어, 스레드가 파일 확장자 속성에 "security.capability"가 없는 프로그램(즉, 빈 F(상속 가능)이 있음)을 실행할 때 P'(허용)은 빈 집합이 됩니다(즉, 상위 집합이 아님). P(상속 가능)) 및 F(허용)).
"P'(유효) = F(유효)? P'(허용): 0"은 무엇을 의미하나요?
F(유효)가 비어 있지 않으면 P'(유효)를 P'(허용)로 설정합니다. 즉, 허용되는 모든 기능을 처음부터 유효하게 만듭니다. F(유효)의 비어 있음/널이 아닌 상태만 중요하므로 파일의 "security.capability" 확장 속성에 있는 비트/플래그를 통해 구현됩니다.
P(xxx) 및 F(xxx) 세트입니까, 아니면 비트 세트입니까?
그것들은 비트 그룹입니다.
참고: 그 내용은 약간 구식입니다.주변유효 세트를 계산할 때 고려되는 기능 세트입니다. 최신 시스템에서는 feature(7) 맨페이지를 확인하십시오.