Política personalizada

Política personalizada

Quiero ejecutar logstash como root para permitirle leer todos los registros (otorgarle acceso a cada registro es muy tedioso). Sin embargo, no quiero que se vuelva loco en mi servidor, pensé en restringirlo en SELinux.
Las opciones que veo son:

  • Cree una etiqueta completamente nueva para logstash. Esto también significa crear etiquetas para archivos de configuración de logstash, bibliotecas y ejecutables de logstash, etc.
  • Ejecute logstash usando una etiqueta diseñada para otro proceso. Le puse el ojo clogd_tya que tiene logen su nombre y no pude encontrar ningún permiso de escritura sospechoso usandosudo sesearch --allow -s clogd_t | grep clogd_t | less -p write
  • Ríndete y ejecútalo como un proceso raíz sin restricciones.

¿Es algo normal?

Por si importa, estoy usando CentOS 6.7

Respuesta1

Preferiría hacer una política personalizada porque es más limpia y te permite controlar lo que sucede.

Política personalizada

Según tengo entendido, es un demonio basado en Java que ejecutará, por lo que probablemente sea sensato ejecutarlo como system_u:system_r:logstash_t. Luego deberá otorgar acceso (¿solo lectura?) a todos los archivos de registro del dominio logstash_t y finalmente otorgar cualquier permiso adicional que logstash pueda necesitar para ejecutarse.

Usando las interfaces refpolicy tenemos 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)

Entonces el demonio logstash debe poder leer los archivos de registro:

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

Esto debería hacer la mayor parte del trabajo, luego deberás agregar el resto.

Póliza reutilizada

En lo que respecta al segundo punto, no estoy seguro de por qué no obtiene ningún permiso de escritura informado por la búsqueda, pero si observa las fuentes:

# 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...

Realmente no es lo que uno querría de una herramienta de monitoreo de registros. Es posible que encuentre algo adecuado para usar con la segunda solución, solo asegúrese de no obtener permisos adicionales innecesarios, ya que esto anula el propósito de ejecutar el proceso dentro de Selinux.

Espero eso ayude.

información relacionada