Sab Sep 02, 2006 12:22 pm
|
 |
Guille
Perlero Nuevo

|
Registrado: 31 May 2006
Mensajes: 34
Ubicación: Argentina
|
|
| Otra duda sobre CGI... |
|
|
¡¡Hola a todos!!
Mi problema es que deseo ejecutar un CGI desde un usuario, que debe eliminar, borrar o listar, en carpetas de otros usuarios...
He intentado darle esas propiedades a traves del sudo pero no he tenido resultados y tengo igual error 500, he intentado ejecutarlo en la carpeta del usuario con el archivo de nombre de root pero recibo también error 500.
Alguien tiene alguna sugerencia...
¡¡¡Saludos para todos!!! |
|
|
|
Sab Sep 02, 2006 12:27 pm
|
 |
Guille
Perlero Nuevo

|
Registrado: 31 May 2006
Mensajes: 34
Ubicación: Argentina
|
|
|
|
|
Mi log de error apache muestra lo siguiente:
Premature end of script headers: /home/guille/public_html/Scripts/h.pl
Saludos!! |
|

Sab Sep 02, 2006 12:37 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
|
|
|
|
|
Realmente no importa donde esté el cgi, porque luego, con chdir o indicando el path completo, se tiene acceso a todos los ficheros y carpetas que el usuario que está ejecutando el cgi tiene.
Eso quiere decir que los permisos de ficheros y directorios que se quieren modificar deben tener permisos adecuados para ese usuario. O que el usuario que ejecuta el cgi pertenezca al mismo grupo que los ficheros. O que los ficheros pertenezcan al grupo del usuario.
Esta última es la mejor opción. En mi sistema, por ejemplo, el servidor web es el usuario www-data, que pertenece al grupo www-data. Cuando el cgi corre, lo hace como ese usuario, por lo que podrá tener acceso y modificar todos los ficheros que tengan permiso de modificación para ese usuario y/o grupo. Lo que suelo hacer es que los ficheros pertenezcan al grupo www-data, mientras que la propiedad del fichero pertenece al usuario original. Dándole al fichero, además, permiso de modificación al grupo, pues entonces el servidor web ya puede cambiarlos.
Naturalmente, también es válida dar a los ficheros y directorios todos los permisos para que todo el mundo (entre ellos el usuario www-data) puedan modificarlos.
Otra opción es poner el bit de setuid al cgi, con lo que el cgi corre con la personalidad del propietario o la del grupo (según se ponga en un sitio o en otro el bit de setuid). Esto es más peligroso, porque estamos corriendo un programa como un usuario normal, mientras antes lo hacíamos como el www-data, que normalmente tiene muchos menos privilegios y accesos.
Recuerda que para ejecutar el cgi en un determinado directorio, es necesario decirle al servidor web que allí se puede ejecutar cgi.
Más información:
http://quark.fe.up.pt/ApachES/manual-es/howto/cgi.html#filepermissions |
|

Sab Sep 02, 2006 1:57 pm
|
 |
Guille
Perlero Nuevo

|
Registrado: 31 May 2006
Mensajes: 34
Ubicación: Argentina
|
|
|
|
|
Lamentablemente no he podido hacer de ninguna de las 2 maneras ya que poniendo el setuid al archivo y el ejecutable a nombre de root sigo recibiendo error 500...
Y en cuanto a la otra posibilidad tampoco es viable ya que todos los usuarios se encuentra con su archivos de tipo usuario.usuario
Pero escribiendo este post, se me ha ocurrido una idea que tal vez puede funcionar agregare a todos los grupos al usuario que ejecuta el script.
Luego cuento como fue....
Saludos!!! |
|

Lun Sep 04, 2006 8:36 am
|
 |
Guille
Perlero Nuevo

|
Registrado: 31 May 2006
Mensajes: 34
Ubicación: Argentina
|
|
|
|
|
Ey de nuevo por aca...
Les comento que lo anterior ha funcionado pero varias dudas estéticas con respecto al funcionamiento.
En el código tengo lo siguiente:
| Código: |
my $mail = `ls /home/usuario/mail/ -l`;
print "$mail"; |
Esto me devuelve algo asi:
| Código: |
total 156
-rw-rw---- 1 usuario mail 544 Dec 27 2005 Borrador
-rw-rw---- 1 usuario mail 544 Apr 30 17:30 Correo electr&APM-nico no deseado
-rw-rw---- 1 usuario mail 504 Dec 27 2005 Drafts
-rw-rw---- 1 usuario mail 544 Jun 5 12:40 Elementos enviados
-rw-rw---- 1 usuario mail 504 Dec 27 2005 INBOX.Drafts
-rw-rw---- 1 usuario mail 504 Dec 27 2005 INBOX.Sent
-rw-rw---- 1 usuario mail 504 Dec 27 2005 INBOX.Trash |
Mi pregunta es la siguiente, hay alguna manera de poder hacer que esto salga como en la terminal renglón por renglón y no todo junto, ya he intentado ponerlo en un array y poniendo los subíndices, pero ya el subíndice [0], no es el primer renglón del que aparece en la terminal, ¿a que se debe eso?
La manera que encuentro para hacerlo es meter la salida en un archivo y luego imprimir esto pero bueno... la otra manera sería mas facil..
¡¡¡Saludos y gracias!!! |
|

Lun Sep 04, 2006 9:07 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
|
|
|
|
|
Para que salga renglón por renglón, como en la terminal, pero en una página web, debemos recordar que para el html, un caracter de fin de línea es como un espacio en blanco más. Por eso salen todos los renglones juntos.
Hay varias soluciones. La clásica es insertar toda la salida dentro de marcas de texto preformateado:
| Código: |
| print '<pre>', $mail, '</pre>'; |
Otra forma es añadir una ruptura de línea a cada fin de línea:
| Código: |
| $mail =~ s/\n/<br \/>\n/g; |
Todo esto se puede hacer porque toda la respuesta del comando 'ls' se guardó en una variable escalar.
Se podría haber guardado en una variable array, por lo que entonces tendríamos un renglón por cada elemento del array:
| Código: |
@mail = qx( ls -l );
print $mail[0]; # total 156 |
|
|

Lun Sep 04, 2006 10:04 am
|
 |
Guille
Perlero Nuevo

|
Registrado: 31 May 2006
Mensajes: 34
Ubicación: Argentina
|
|
|
|
|
Ha funcionado de manera excelente gracias explorer!!!
Saludos para todos !! |
|
Powered by phpBB © 2001, 2005 phpBB Group
|