Os pongo en contexto. Un Rocky 9.5 (derivado de RHEL, para quien no lo conozca) que he empezado a administrar, sirve un servidor Apache (httpd). He importado una configuración propia en forma de fichero httpd.conf
y lo he situado en /etc/httpd/conf/
, configuración típica. He mantenido la copia original y la copia mía en el mismo fichero y he configurado los permisos y propietarios exactamente igual:
[dbac32ab conf]# cd /etc/httpd/conf/
[dbac32ab conf]# mv httpd.conf httpd.conf.bk
[dbac32ab conf]# cp /tmp/httpd.conf httpd.conf
[dbac32ab conf]# ls -l
total 32
-rw-r--r--. 1 root root 1516 May 15 09:20 httpd.conf
-rw-r--r--. 1 root root 12005 Jan 22 00:22 httpd.conf.bk
-rw-r--r--. 1 root root 13430 Jan 22 00:24 magic
Sin embargo, al hacer el cambio y realizar un reinicio del servicio, me ha fallado.
[dbac32ab conf]# service httpd restart
Redirecting to /bin/systemctl restart httpd.service
Job for httpd.service failed because the control process exited with error code.
See "systemctl status httpd.service" and "journalctl -xeu httpd.service" for details.
[dbac32ab conf]# service httpd status
Redirecting to /bin/systemctl status httpd.service
× httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; preset: disabled)
Active: failed (Result: exit-code) since Thu 2025-05-15 09:29:38 UTC; 10s ago
Duration: 6min 47.750s
Docs: man:httpd.service(8)
Process: 30756 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
Main PID: 30756 (code=exited, status=1/FAILURE)
CPU: 30msMay 15 09:29:37 dbac32ab systemd[1]: Starting The Apache HTTP Server...
May 15 09:29:37 dbac32ab httpd[30756]: httpd: Could not open configuration file /etc/httpd/conf/httpd.conf: Permission denied
May 15 09:29:38 dbac32ab systemd[1]: httpd.service: Main process exited, code=exited, status=1/FAILURE
May 15 09:29:38 dbac32ab systemd[1]: httpd.service: Failed with result 'exit-code'.
May 15 09:29:38 dbac32ab systemd[1]: Failed to start The Apache HTTP Server.
Para mi sorpresa, indicando fallo de permisos para acceder al fichero. Como he comentado, los permisos y propietarios son exactamente iguales. He revertido los cambios y ha funcionado. Por lo que investigando un poco qué puede estar pasando, he comprobado que esta máquina tiene SELinux activado, y al parecer, aplica una capa más para control de acceso.
Con ls -Z
se puede comprobar el contexto que SELinux aplica a cada archivo.
[dbac32ab conf]# ls -Z /etc/httpd/conf/httpd.conf
unconfined_u:object_r:user_home_t:s0 /etc/httpd/conf/httpd.conf
[dbac32ab conf]# ls -Z /etc/httpd/conf/httpd.conf.bk
system_u:object_r:httpd_config_t:s0 /etc/httpd/conf/httpd.conf.bk
El contexto es diferente para cada archivo, por lo que he usado chcon
para copiar el contexto del original al nuevo archivo. Después he reiniciado el servicio y ha funcionado sin problemas:
[dbac32ab conf]# chcon --reference=/etc/httpd/conf/httpd.conf.bk /etc/httpd/conf/httpd.conf
[dbac32ab conf]# service httpd restart
Redirecting to /bin/systemctl restart httpd.service
Es una capa extra que no había tenido en cuenta, debido a que no tengo demasiada experiencia en SELinux. Sé que hay polémicas con su adopción, similar a systemd
, no sólo por añadir una capa de complejidad extra y lo que de ello deriva, sino por su desarrollo liderado por la NSA.
¿Lo conocéis? ¿qué opináis en términos generales?