Você quase teve isto. O problema é que a regra de permissão
allow unconfined_t mozilla_t : process transition ;
permite que a transição ocorra, mas não faz acontecer. Para isso você precisa de uma regra type_transition:
type_transition unconfined_t mozilla_exec_t : process mozilla_t;
Isso faz com que a transição ocorra quando um processo unconfined_t executa um arquivo mozilla_exec_t.
Com isso concluído, o Firefox não será executado. Eu usei o audit2allow para rastrear as regras adicionais necessárias para permitir que o firefox gerencie arquivos e soquetes temporários.
Aqui está uma política que funciona na minha VM baseada no CentOS 6. Ele precisa do mozilla_read_content booleano selinux ativado (via: setsebool -P mozilla_read_content 1
).
module mozilla 1.0;
require {
role unconfined_r;
type unconfined_t;
type mozilla_t;
type mozilla_exec_t;
type tmp_t;
type user_tmp_t;
type fs_t;
class process transition;
class file { ioctl getattr setattr create read write unlink open relabelto };
class dir { ioctl getattr setattr create read write unlink add_name remove_name };
class filesystem getattr;
class sock_file { getattr setattr create read write unlink };
class unix_stream_socket connectto;
}
role unconfined_r types mozilla_t;
allow unconfined_t self:file relabelto;
allow unconfined_t mozilla_t : process transition ;
type_transition unconfined_t mozilla_exec_t : process mozilla_t;
allow mozilla_t fs_t:filesystem getattr;
allow mozilla_t tmp_t:file { ioctl getattr setattr create write unlink open };
allow mozilla_t tmp_t:dir { ioctl getattr setattr create read write add_name remove_name };
allow mozilla_t user_tmp_t:dir { ioctl create write add_name setattr remove_name };
allow mozilla_t user_tmp_t:sock_file { getattr setattr create read write unlink };
allow mozilla_t unconfined_t:unix_stream_socket connectto;
Para compilar e instalar:
# checkmodule -M -m -o mozilla.mod mozilla.te
checkmodule: loading policy configuration from rekado.te
checkmodule: policy configuration loaded
checkmodule: writing binary representation (version 10) to mozilla.mod
# semodule_package -o mozilla.pp -m mozilla.mod
# sudo semodule -i mozilla.pp