Ao usar o setcap, onde a permissão é armazenada?

7

Usar setcap para dar permissões adicionais a um binário deve gravar a nova permissão em algum lugar, no armazenamento ou na memória, onde ela é armazenada?

Usar lsof como não funciona porque o processo desaparece muito rapidamente.

    
por Zulgrib 26.08.2017 / 18:39

2 respostas

7

Permissões estendidas, como listas de controle de acesso definidas por setfacl e sinalizadores de capacidade definidos por setcap , são armazenadas no mesmo local das permissões tradicionais e definem sinalizadores [ug] id definidos por chmod : no inode do arquivo.

(Eles podem ser armazenados em um bloco separado no disco, porque um inode tem um tamanho fixo que tem espaço para os bits de permissão tradicionais, mas não para as permissões estendidas potencialmente ilimitadas. Mas isso só importa em casos raros, como como tendo que se preocupar que setcap poderia ficar sem espaço em disco. Mas mesmo chmod poderia ficar sem espaço em disco em um sistema que usa deduplicação!)

O GNU ls não exibe os atributos setcap de um arquivo. Você pode exibi-las com getcap . Você pode listar todos os atributos estendidos com getfattr -d -m - ; o atributo setcap é chamado security.capability e é codificado em um formato binário que getcap decodifica para você.

    
por 27.08.2017 / 01:12
4

setcap define os recursos de arquivo que são armazenados no atributo estendido do sistema de arquivos. Isso é explicado em man 7 capabilities :

The file capability sets are stored in an extended attribute (see setxattr(2)) named security.capability.

Você pode inspecionar os recursos de um processo em execução examinando os campos CapInh / CapPrm / CapEff em /proc/PID/status . Veja minha resposta para " Como definir recursos com o comando setcap? "para explicação sobre como os recursos são aplicados ao processo no exec.

    
por 26.08.2017 / 18:49