2009-10-21 44 views
15

Estoy probando scripts CGI por primera vez pero sin éxito. He leído muchos tutoriales y los he podido seguir en diferentes foros pero no puedo hacerlo funcionar. Estoy usando un servidor web Apache en una máquina Fedora 10. siempre tengo problemas con(13) Permiso denegado: acceso denegado a /cgi-bin/test.cgi

[Wed Oct 21 20:47:36 2009] [notice] SELinux policy enabled; httpd running as context unconfined_u:system_r:httpd_t:s0 
[Wed Oct 21 20:47:36 2009] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) 
[Wed Oct 21 20:47:36 2009] [notice] Digest: generating secret for digest authentication ... 
[Wed Oct 21 20:47:36 2009] [notice] Digest: done 
[Wed Oct 21 20:47:36 2009] [notice] Apache/2.2.11 (Unix) DAV/2 PHP/5.2.9 mod_ssl/2.2.11 OpenSSL/0.9.8g configured -- resuming normal operations 

necesito ayuda. Así es mi entorno.

uname -a 
Linux localhost.localdomain 2.6.27.5-117.fc10.i686 #1 SMP Tue Nov 18 12:19:59 EST 2008 i686 i686 i386 GNU/Linux 

ls -l /var/www/cgi-bin/ 
total 36 
-rwxrwxrwx 1 root root 106 2009-10-21 18:29 index.html 
-rwxr-xr-x 1 root root 11089 2009-02-24 20:11 squidGuard.cgi 
-rwxr-xr-x 1 root root 5720 2009-02-24 20:11 squidGuard-simple.cgi 
-rwxr-xr-x 1 root root 5945 2009-02-24 20:11 squidGuard-simple-de.cgi 
-rwxrwxrwx 1 root root 110 2009-10-21 17:38 test.cgi 

apachectl -v 
Server version: Apache/2.2.11 (Unix) 
Server built: Mar 6 2009 09:12:25 

perl -version 
This is perl, v5.10.0 built for i386-linux-thread-multi 
Copyright 1987-2007, Larry Wall 

Mi script

cat test.cgi 
#!/usr/bin/perl 
print "Content-Type: text/html\n\n"; 
print "Hello, world!\n"; 

El mensaje de error I gen cuando intento acceder al servidor de la página web "http://192.168.50.29/cgi-bin/test.cgi" tiene el siguiente aspecto:

[Wed Oct 21 21:00:27 2009] [error] [client 192.168.50.69] (13)Permission denied: access to /cgi-bin/test.cgi denied 

he añadido la línea:

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" 

a /etc/httpd/conf/httpd.conf

No puedo hacer que funcione. ¿Alguien puede ayudarme?

+0

El mensaje de error I gen cuando intento acceder al servidor de la página web "http://192.168.50.29/test.cgi "se ve así: [Mié 21 de octubre 22:31:32 2009] [error] [cliente 192.168.50.69] (13) Permiso denegado: el ejecutivo de '/var/www/html/test.cgi' falló [Mié 21 de oct. 22:31:32 2009] [error] [cliente 192.168.50.69] Cabeceras prematuras del script: test.cgi –

+1

¿Por qué, oh por qué, oh por qué root posee esos archivos? –

+0

Descubre qué usuario/grupo posee el proceso del servidor Apache y se asegura de que posee sus scripts cgi y tiene permiso de ejecutivo. – heferav

Respuesta

11

Compruebe sus permisos de os para test.cgi y asegúrese de que el usuario o grupo que está utilizando para ejecutar su apache tenga acceso de lectura.

EDITAR - El problema es con los permisos, pero no con los permisos de lectura, ya que está utilizando SELinux, debe preocuparse por el contexto del archivo. Compruebe esto thread en los foros de Fedora, explica bastantes opciones para resolver su problema.

+0

Según la pregunta, test.cgi tiene 777 permisos, es decir, leer, escribir, ejecutar para el usuario, grupo y otros, para que todos los usuarios puedan hacer cualquier cosa –

+0

Es cierto, me perdí ese bit en mi primera lectura con código sin formato. – pedromarce

5

. PRIMERO COMPRUEBE HTTPD.CONF ARCHIVO. Establezca el directorio de scripts de la siguiente manera en el httpd.conf.
Aquí debe asegurarse de encontrar el archivo httpd.conf correcto. Por ejemplo, en mi Debian, el httpd.conf predeterminado es/etc/apache2/sites-avaialbe/default.

 
<Directory "dir_name"> 
    Options All 
    AllowOverride All 
    Order allow,deny 
    Allow from all 
<Directory> 

O usted podría utilizar la carpeta predeterminada/cgi-bin.

. Configure ejecute el permiso para el script de prueba.

 
chmod +x script_name 
+1

facepalm, olvidé en mi caso el permiso de ejecución – elhombre

4

comprobar su fstab si el sistema de archivos montado tiene permiso para ejecutar

UUID=xxx-xxx-xxx-xx-xx  /mnt/mountpoint  ext4  rw,user,exec  0  0 

el ejecutivo parte es importante

4

SELinux impide Apache tenga acceso al script CGI en mi caso. Una solución rápida sucia-n-que trabajó para mí fue apagando SELinux:

vim /etc/sysconfig/selinux 
set "SELINUX=disabled" 
reboot 
+1

Bueno, ahora usted tiene el problema de que no está ejecutando wi th SELinux;) Creo que en su caso ha creado un directorio cgi-bin en otra ubicación, lo que significa que debe agregar un nuevo contexto de archivo a la lista de políticas mediante el comando 'semange fcontext -a -t httpd_sys_script_exec_t "/ path/to/directory (/.*)? "'y luego' restorecon -Rv/path/to/directory 'para aplicar el nuevo contexto de archivo a los archivos. Echa un vistazo a man semanage-fcontext y ve a la sección de EJEMPLO, aquí hay un gran ejemplo de este proceso. – elhombre