O SElinux não se importa muito com os caminhos dos arquivos.
Não consigo duplicar seu problema.
Eu estou usando um staff_r
role e staff_t
type no Fedora 20, mas isso parece replicar efetivamente o seu problema.
Meu programa:
#include <stdio.h>
#include <stdlib.h>
#include <selinux/selinux.h>
int main() {
security_context_t con;
if (getcon(&con) < 0) {
perror("Cannot getcon");
return 1;
}
printf("%s\n", con);
freecon(con);
return 0;
}
Minha política.
policy_module(getcon, 1.0.0)
require {
role staff_r;
type staff_t;
}
## Type defs
type getcon_exec_t;
type getcon_t;
application_domain(getcon_t, getcon_exec_t)
## Role permits
role staff_r types getcon_t;
## Transitions
domain_auto_transition_pattern(staff_t, getcon_exec_t, getcon_t);
## Access vectors
allow getcon_t staff_t:process sigchld;
userdom_use_inherited_user_ptys(getcon_t);
Para compilar o programa:
gcc -o getcon getcon.c -lselinux
Para compilar e carregar a política:
make -f /usr/share/selinux/devel/Makefile load
Correndo sem alterar o contexto
$ ./getcon
staff_u:staff_r:staff_t:s0-s0:c0.c1023
Alterando o contexto:
# chcon -t getcon_exec_t getcon
$ ./getcon
staff_u:staff_r:getcon_t:s0-s0:c0.c1023
Alterando o diretório pai para default_t:
# chcon -t . default_t; chcon -t getcon_exec_t getcon
$ ./getcon
staff_u:staff_r:getcon_t:s0-s0:c0.c1023
Você pode tentar usar minha política como base, se quiser. Mas isso não parece me afetar.