Eu descobri que o problema que eu estava tendo era porque eu não compilei o módulo corretamente. Como resultado, as macros provavelmente não "pegaram" e as mensagens de erro do compilador da política checkmodule
realmente não ajudaram a entender isso.
Para que todas essas macros se expandam adequadamente, é necessário compilar a política usando os Makefiles fornecidos pelo SELinux - com um arquivo TE chamado myservice_spool.te, deve-se executar:
make -f /usr/share/selinux/devel/Makefile myservice_spool.pp
Isso criará um arquivo TE temporário com todas as macros expandidas e, em seguida, chamará os compiladores relevantes para criar myservice_spool.pp
.
A documentação do Gentoo vinculada ao OP tem um pouco mais de informação, embora os caminhos dos arquivos não estejam corretos para os sistemas CentOS.
Se você revisar o modelo TE gerado no diretório tmp
(que o makefile do SELinux deixa no local), você pode ver que "atributos" é de fato a maneira correta de manipular um tipo como um arquivo, mas devemos require
para fazê-los funcionar - a maneira como os arquivos do SELinux TE parecem funcionar é que você não obtém nenhum símbolo magicamente importado para o arquivo de configuração - você precisa require
de qualquer coisa que você usa.
Portanto, a maneira correta e não macro de configurar um novo tipo de arquivo é algo assim (copiado do modelo gerado pela TE):
type myservice_spool_t;
require {
attribute spoolfile;
attribute file_type, non_security_file_type, non_auth_file_type;
} # end require
typeattribute myservice_spool_t file_type, non_security_file_type, non_auth_file_type, spoolfile;