Quero executar o logstash como root para permitir que ele leia todos os logs (conceder acesso a todos os logs é muito cansativo). No entanto, não quero que ele fique descontrolado no meu servidor, pensei em restringi-lo ao SELinux.
As opções que vejo são:
- Crie um rótulo totalmente novo 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. Fiquei de olho
clogd_t
porque temlog
em seu nome e não consegui encontrar nenhuma permissão de gravação suspeita usandosudo sesearch --allow -s clogd_t | grep clogd_t | less -p write
- Desista e execute-o como um processo raiz irrestrito
É algo normal de se fazer?
Caso seja importante, estou usando o CentOS 6.7
Responder1
Prefiro fazer uma política personalizada porque é mais limpa e permite que você controle o que está acontecendo.
Política personalizada
Pelo que entendi, é um daemon baseado em Java que você estará executando, então provavelmente é sensato fazê-lo funcionar como system_u:system_r:logstash_t
. Em seguida, você precisará conceder acesso (somente leitura?) a todos os arquivos de log do domínio logstash_t e, finalmente, conceder quaisquer permissões adicionais que o logstash possa exigir para ser executado.
Usando as interfaces 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)
Então o daemon 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
Quanto ao segundo ponto, não sei por que você não está obtendo nenhuma permissão de gravação relatada pela pesquisa, mas se você olhar 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 registro. Você pode encontrar algo adequado para ser usado com a segunda solução, apenas certifique-se de não obter permissões extras desnecessárias, pois isso anula todo o propósito de executar o processo dentro do selinux.
Espero que ajude.