
Hay (tal vez) un cambio entre CentOS 7 y 8 con respecto a systemd y selinux. Todavía no sé cómo lidiar con esto.
Por alguna razón (compatibilidad entre distribuciones) estamos usando postgresql 9.6 deEnterpriseDB. El instalador funciona bien en CentOS 7pero ya no en CentOS 8. El instalador crea un servicio systemd que se ejecuta como usuario postgres (uid=1004 en mi caso).
[Service]
Type=forking
TimeoutSec=120
User=postgres
Group=postgres
...
Al final del instalador, el servicio se inicia utilizando systemctl. Esto falla ahora en CentOS 8. Cuando hago un estado systemctl veo esto:
postgresql.service: Failed to execute command: Permission denied
En el sistema de archivos y con respecto a los permisos del usuario, todo está perfectamente bien.
¡Tan pronto como desactivo SELinux, comienza a funcionar!
Esto no era necesario en CentOS 7. ¿Alguien puede decirme qué puedo hacer ahora ANTES de llamar al instalador para que su ejecución funcione?
Apéndice
Quizás encontré la verdadera razón del problema. Estoy instalando en un disco diferente y no en el sistema de archivos raíz. El instalador comienza a funcionar si lo instalo en el sistema de archivos raíz.Tan pronto como el ejecutable donde la directiva "ExecStart" del archivo de servicio systemd está en otro disco, ya no funciona.¿Cómo decirle al sistema que permita esto?
Muchas gracias por iluminarme.
Respuesta1
¿Un disco diferente como en una parte diferente de la jerarquía de archivos?
¡Con SElinux vigente, eso te obliga a comprender Selinux y cómo crear traducciones de contexto de archivos! Pruebe lo que sucede si cambia, por ejemplo, el archivo de configuración de ntpd y los archivos de registro de ntp a otro lugar como: /services/ntpd/ntp.conf y /services/ntpd/ntp.log.
Respuesta2
Finalmente encontré la solución a mi problema hace una semana. No mencioné eso antes en mi pregunta porque pensé que eso no importaría.
Estaba instalando en un disco separado nuevo y vacío. No el sistema de archivos raíz. Descubrí que la instalación en el sistema de archivos raíz funcionó.
Yo entonces hice un
restaurarcon -r /punto-de-montaje-del-nuevo-disco
¡Y después de eso empezó a funcionar!
Creo que hacer esto no era necesario para CentOS 7.
Respuesta3
¿Copiaste la jerarquía desde la raíz (/) hacia abajo en un disco actualmente montado (es decir, montado como /tmp/tmp_mnt)?
El recoverycon -r restablece el contexto de los archivos... entonces ls -Z es tu amigo
ls -Z en los archivos de unidad systemd para postgres y el binario de postgres es interesante.
Es probable que la política de SElinux difiera entre centos7 y centos8.