Executando o logstash no SELinux

2

Eu quero rodar logstash como root para permitir que ele leia todos os logs (conceder acesso a todos os logs é muito cansativo). No entanto, eu não quero correr no meu servidor, pensei em restringi-lo sob o SELinux.
As opções que vejo são:

  • Crie um novo rótulo para o logstash. Isso também significa criar rótulos para arquivos de configuração do logstash, executáveis e bibliotecas do logstash, etc.
  • Execute o logstash usando um rótulo projetado para outro processo. Coloquei meu olho em clogd_t , pois ele tem log em seu nome e não consegui encontrar nenhuma permissão de gravação suspeita usando sudo sesearch --allow -s clogd_t | grep clogd_t | less -p write
  • Desista e execute-o como um processo raiz sem restrição

Ou é algo normal de se fazer?

Caso seja importante, estou usando o CentOS 6.7

    
por Nitz 07.10.2015 / 10:06

1 resposta

3

Eu preferiria fazer uma política personalizada porque é mais limpa e faz com que você controle o que está acontecendo.

Política personalizada

Pelo que entendi, é um daemon baseado em java que você estará executando, então é sensato que ele seja executado como system_u:system_r:logstash_t . Em seguida, você precisará conceder acesso (somente leitura?) A todos os arquivos de log ao domínio logstash_t e, finalmente, conceder quaisquer permissões adicionais que o logstash precise executar.

Usando as interfaces do refpolicy, temos algo como:

policy_module(logstash, 1.0)

# define the entry point and the domain
type logstash_exec_t
init_daemon_domain(logstash_t, logstash_exec_t)

Em seguida, o daemon do logstash precisa ser capaz de ler arquivos de log:

logging_search_all_logs(logstash_t)
logging_getattr_all_logs(logstash_t)
logging_read_all_logs(logstash_t)

Isso deve fazer a maior parte do trabalho, então você precisará adicionar o restante.

Política reutilizada

Para o que diz respeito ao segundo ponto, não sei por que você não está recebendo nenhuma permissão de gravação relatada pela sesearch, mas se você olhar para as fontes:

# clogd.te
storage_raw_read_fixed_disk(clogd_t)
storage_raw_write_fixed_disk(clogd_t)

# storage.te 
########################################
## <summary>
##      Allow the caller to directly write to a fixed disk.
##      This is extremely dangerous as it can bypass the
##      SELinux protections for filesystem objects, and
##      should only be used by trusted domains.
## </summary>
## <param name="domain">
##      <summary>
##      Domain allowed access.
##      </summary>
## </param>
#
interface('storage_raw_write_fixed_disk','
# and the rest of the stuff here...

Não é realmente o que se deseja de uma ferramenta de monitoramento de registros. Você pode encontrar algo adequado para ser usado com a segunda solução, apenas tenha certeza de que você não está recebendo permissões extras desnecessárias, pois isso anula todo o propósito de executar o processo dentro do selinux.

Espero que ajude.

    
por 08.10.2015 / 00:58