
Configuré un directorio CGI usando el userdir
mod en Apache. Estoy usando configuraciones lo más generales posible para que sean aplicables a otros usuarios en mi computadora portátil. Llegué a un punto en el que puedo ejecutar el script usando esta URL:
http://localhost/~tomas/cgi-bin/hw.cgi
Pero también puse un enlace a mi public_html
directorio raíz del servidor en /var/www/html
, de modo que cuando localhost
se llama a la URL, obtengo el índice con un enlace a mi directorio en localhost/tomas
. El enlace funciona bien y muestra otro índice, uno de mi usuario. Ahora, el cgi-bin privado está en /home/*/public_html/cgi-bin
, por lo que puedo ver cgi-bin
cuándo obtengo el índice privado. Ahora, cuando entro a este directorio, me sale otro índice con los CGI. Lo cual está bien para mí, aunque no estoy seguro de si esto se considera seguro. Pero si llamo a un CGI desde allí, no se ejecuta y se muestra en su lugar. Este es el problema.
Hasta donde yo sé, se trata de que Apache no ve
http://localhost/tomas/cgi-bin/hw.cgi
como
http://localhost/~tomas/cgi-bin/hw.cgi
He estado buscando una directiva que lo hiciera funcionar, pero no la encuentro. Ni siquiera estoy seguro de qué tengo a mi disposición: ¿una directiva o algo más?
Aquí está mi usermod.conf
:
<IfModule mod_userdir.c>
UserDir public_html
UserDir disabled root
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Require all granted
</Limit>
<LimitExcept GET POST OPTIONS>
Require all denied
</LimitExcept>
</Directory>
<Directory /home/*/public_html/cgi-bin>
Options ExecCGI
AddHandler cgi-script .cgi
</Directory>
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Respuesta1
Dado que se puede acceder al cgi-bin
directorio a través de una ruta separada, una forma de hacerlo es copiar la Directory
sección con la ruta alternativa, justo debajo de la otra, por ejemplo:
<Directory /var/www/html/*/cgi-bin>
Options ExecCGI
AddHandler cgi-script .cgi
</Directory>
Esto también debería deshabilitar los listados de directorios.
Si prefiere tener los índices habilitados, agréguelos Indexes
o Options
haga que hereden sus opciones principales cambiando ExecCGI
a +ExecCGI
, por ejemplo
<Directory /var/www/html/*/cgi-bin>
Options Indexes ExecCGI
AddHandler cgi-script .cgi
</Directory>
Preferiría usar Options Indexes ExecCGI
over Options +ExecCGI
ya que de esta manera no heredarás ninguna opción no deseada.