Esse binário tem TODAS as capacidades permitidas ( p) e efetivas ( e) desde o início.
Na representação textual de capacidades, uma entrelinha =é equivalente a all=. Da página de cap_to_text(3)manual:
Caso o operador principal seja =, e nenhuma lista de recursos seja fornecida, assume-se que a lista de ações se refere a todos os recursos. Por exemplo, as três cláusulas a seguir são equivalentes entre si (e indicam um conjunto de recursos completamente vazio): all=; =;
cap_chown,<every-other-capability>=.
Esse binário pode fazer o que quiser, limitado apenas pelo conjunto de limites de capacidade, que em um sistema de desktop típico inclui tudo (caso contrário, binários setuid como sunão funcionariam como esperado).
Observe que isso é apenas uma "pegadinha" da representação textual usada por libcap: no security.capabilityatributo estendido do arquivo para o qual getcapimprimirá /file/path =ep, todos os bits significativos estão efetivamente em ; para um vaziosecurity.capability , /file/path =(com o =não seguido por nada) será impresso em seu lugar.
Se alguém ainda não está convencido, aqui está um pequeno experimento:
# cp /bin/ping /tmp/ping # will wipe setuid bits and extented attributes
# su user -c '/tmp/ping localhost'
ping: socket: Operation not permitted
# setcap =ep /tmp/ping
# su user -c '/tmp/ping localhost' # will work because of cap_net_raw
PING localhost(localhost (::1)) 56 data bytes
64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.073 ms
^C
# setcap = /tmp/ping
# su user -c '/tmp/ping localhost'
ping: socket: Operation not permitted
Observe que um recurso de arquivo vazio também é diferente de um recurso removido ( capset -r /file/path), um recurso de arquivo vazio impedirá que o conjunto Ambient seja herdado quando o arquivo for executado.
Uma sutileza da =epcapacidade do arquivo é que, se o conjunto delimitador não for completo, o kernel impedirá que um programa =epnele seja executado (conforme descrito na seção "Verificação de segurança para binários burros de capacidade" da página de capabilities(7)manual).
Isso significa que os recursos serão colocados no conjunto permitido ( p), e todos os recursos permitidos serão copiados no conjunto efetivo ( e).
O eé usado para programas legados (possivelmente a maioria dos programas no momento atual), ou seja, programas que não sabem sobre recursos, portanto, não podem copiar recursos de permitidos para efetivos.
Quanto ao motivo pelo qual existe o que parece e um conjunto vazio (como @mosvy apontou), os autores da biblioteca confundiram tudo com nenhum (infinito e zero são dois dos números mais confusos).
Esse binário tem TODAS as capacidades permitidas (
p
) e efetivas (e
) desde o início.Na representação textual de capacidades, uma entrelinha
=
é equivalente aall=
. Da página decap_to_text(3)
manual:Esse binário pode fazer o que quiser, limitado apenas pelo conjunto de limites de capacidade, que em um sistema de desktop típico inclui tudo (caso contrário, binários setuid como
su
não funcionariam como esperado).Observe que isso é apenas uma "pegadinha" da representação textual usada por
libcap
: nosecurity.capability
atributo estendido do arquivo para o qualgetcap
imprimirá/file/path =ep
, todos os bits significativos estão efetivamente em ; para um vaziosecurity.capability
,/file/path =
(com o=
não seguido por nada) será impresso em seu lugar.Se alguém ainda não está convencido, aqui está um pequeno experimento:
Observe que um recurso de arquivo vazio também é diferente de um recurso removido (
capset -r /file/path
), um recurso de arquivo vazio impedirá que o conjunto Ambient seja herdado quando o arquivo for executado.Uma sutileza da
=ep
capacidade do arquivo é que, se o conjunto delimitador não for completo, o kernel impedirá que um programa=ep
nele seja executado (conforme descrito na seção "Verificação de segurança para binários burros de capacidade" da página decapabilities(7)
manual).Não é uma capacidade.
Significa conjunto efetivo e conjunto permitido.
Isso significa que os recursos serão colocados no conjunto permitido (
p
), e todos os recursos permitidos serão copiados no conjunto efetivo (e
).O
e
é usado para programas legados (possivelmente a maioria dos programas no momento atual), ou seja, programas que não sabem sobre recursos, portanto, não podem copiar recursos de permitidos para efetivos.Quanto ao motivo pelo qual existe o que parece e um conjunto vazio (como @mosvy apontou), os autores da biblioteca confundiram tudo com nenhum (infinito e zero são dois dos números mais confusos).