static-httpd

Sitio web estático (HTML + CSS) que sostiene el blog del autor
Log | Files | Refs

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>