index.html (4170B)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1" /> 6 <title>Mi primer SELinux denial</title> 7 <link rel="icon" type="image/png" href="/favicon.png" /> 8 <link rel="stylesheet" type="text/css" href="../article.css" /> 9 </head> 10 <body> 11 <header> 12 <p class="title">Mi primer SELinux denial</p> 13 <p class="date">15 de mayo de 2025 • fjbalon</p> 14 </header> 15 <p>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 <emb>httpd.conf</emb> y lo he situado en <emb>/etc/httpd/conf/</emb>, 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:</p> 16 <pre><code>[dbac32ab conf]# cd /etc/httpd/conf/ 17 [dbac32ab conf]# mv httpd.conf httpd.conf.bk 18 [dbac32ab conf]# cp /tmp/httpd.conf httpd.conf 19 [dbac32ab conf]# ls -l 20 total 32 21 -rw-r--r--. 1 root root 1516 May 15 09:20 httpd.conf 22 -rw-r--r--. 1 root root 12005 Jan 22 00:22 httpd.conf.bk 23 -rw-r--r--. 1 root root 13430 Jan 22 00:24 magic</code></pre> 24 <p>Sin embargo, al hacer el cambio y realizar un reinicio del servicio, me ha fallado.</p> 25 <pre><code>[dbac32ab conf]# service httpd restart 26 Redirecting to /bin/systemctl restart httpd.service 27 Job for httpd.service failed because the control process exited with error code. 28 See "systemctl status httpd.service" and "journalctl -xeu httpd.service" for details. 29 30 [dbac32ab conf]# service httpd status 31 Redirecting to /bin/systemctl status httpd.service 32 × httpd.service - The Apache HTTP Server 33 Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; preset: disabled) 34 Active: failed (Result: exit-code) since Thu 2025-05-15 09:29:38 UTC; 10s ago 35 Duration: 6min 47.750s 36 Docs: man:httpd.service(8) 37 Process: 30756 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE) 38 Main PID: 30756 (code=exited, status=1/FAILURE) 39 CPU: 30msMay 15 09:29:37 dbac32ab systemd[1]: Starting The Apache HTTP Server... 40 May 15 09:29:37 dbac32ab httpd[30756]: httpd: Could not open configuration file /etc/httpd/conf/httpd.conf: Permission denied 41 May 15 09:29:38 dbac32ab systemd[1]: httpd.service: Main process exited, code=exited, status=1/FAILURE 42 May 15 09:29:38 dbac32ab systemd[1]: httpd.service: Failed with result 'exit-code'. 43 May 15 09:29:38 dbac32ab systemd[1]: Failed to start The Apache HTTP Server.</code></pre> 44 <p>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.</p> 45 <p>Con <emb>ls -Z</emb> se puede comprobar el contexto que SELinux aplica a cada archivo.</p> 46 <pre><code>[dbac32ab conf]# ls -Z /etc/httpd/conf/httpd.conf 47 unconfined_u:object_r:user_home_t:s0 /etc/httpd/conf/httpd.conf 48 [dbac32ab conf]# ls -Z /etc/httpd/conf/httpd.conf.bk 49 system_u:object_r:httpd_config_t:s0 /etc/httpd/conf/httpd.conf.bk</code></pre> 50 <p>El contexto es diferente para cada archivo, por lo que he usado <emb>chcon</emb> para copiar el contexto del original al nuevo archivo. Después he reiniciado el servicio y ha funcionado sin problemas:</p> 51 <pre><code>[dbac32ab conf]# chcon --reference=/etc/httpd/conf/httpd.conf.bk /etc/httpd/conf/httpd.conf 52 [dbac32ab conf]# service httpd restart 53 Redirecting to /bin/systemctl restart httpd.service</code></pre> 54 <p>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.</p> 55 <p>Parece que a esto se llama <b>SELinux denial</b>, y no ha sido ni el primero, ni parece que sea el último...</p> 56 </body> 57 </html>