Até o Linux Fedora Core 4, o arquivo de política SELinux deveria ser monolítico, ou seja, a política é construída em um único binário pelo checkpolicy e diretamente carregado no kernel. O problema dessa abordagem usando políticas monolíticas é que as políticas SELinux são frequentementes grandes e complexas, e além disso, se a política fosse alterada era necessário pegar todo código fonte da política, modificá-lo e depois compilá-lo. Em vista disso, a partir do Linux Fedora Core 5 as políticas foram modificas para serem separadas em pequenas unidades chamadas de módulos. Isso significa que desenvolvedores terceiros podem embarcar módulos de políticas SELinux junto com suas aplicações, e eles podem fazer isso sem ter que lidar com todo o código restante da política. Isso atualmente funciona separando-se os passos de compilação e link-edição no procedimento de compilação da política. Módulos de política são compilados dos códigos fonte, e linkados quando instalados no ``armazém de módulos''. Essa política linkada é então carregada no kernel para ser aplicada.
O comando primário para lidar com módulos SELinux é o semodule, que permite instalar, atualizar e remover módulos. Outros comandos úteis são: checkmodule, que é o compilador de módulos incluído no pacote do checkpolicy; e o semodule_package, que cria um arquivo de pacote da política (.pp) de um módulo de política compilado. Módulos geralmente são armazenados como um arquivo de pacote da política (extensão .pp) no diretório /usr/share/selinux/$POLITICA/. Lá deve existir pelo menos o arquivo base.pp, que é o módulo básico.
Abaixo seguem os arquivos que compõem o código fonte de um módulo exemplo extraído da Política de Referência SELinux [PEBENITO 2006], aplicado ao serviço BIND (DNS):
Jeronimo Zucco 2008-04-26