• Publicidad

Instalar módulos con root y con permisos para otros

Aquí encontrarás todo lo que sea específicamente acerca de módulos de Perl. Ya sea que estás compartiendo tu módulo, un manual o simplemente tienes una duda acerca de alguno.

Instalar módulos con root y con permisos para otros

Notapor danimera » 2020-01-27 10:12 @466

La pregunta es simple: tengo acceso a root y puedo instalar módulos, pero estos se instalan, por ejemplo en /usr/root.

Mi proyecto es un sitio web y el usuario de Apache para la ejecución del script no tiene permiso para leer los módulos, y la alternativa más rápida fue copiar y pegar a los directorios con permisos.

¿Alguna forma en la que pueda instalar siendo root, pero que los otros usuarios pueda utilizarlos?

También me vendría bien si hay alguna especie de auto instalación de módulos, o si puedo elaborar un script para que se instalen. Son módulos simples como el Try::Tiny, Form::Builder, HTML::Template, etc.
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Publicidad

Re: Instalar módulos con root y con permisos para otros

Notapor explorer » 2020-01-27 16:28 @727

No sé en qué distribución de UNIX/Linux estás, pero en mi Debian
  • Try::Tiny se puede instalar para todos los usuarios con apt install libtry-tiny-perl
  • HTML::Template, lo mismo, con apt install libhtml-template-perl
No hay paquete para Form::Builder, pero estoy casi seguro (habría que ver la matriz de dependencias/éxito en la instalación) de que se puede instalar con el comando cpan o cpanm: cpanm Form::Builder Incluso hasta se puede elegir el directorio de instalación con la opción -L en cpanm.

Otro tema es que el usuario web tenga acceso a esas bibliotecas.

Lo que suelo hacer es preparar un pequeño script cgi que muestre todas las variables de entorno, para ver si es capaz de entrar o conocer el directorio:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. #
  3. # Muestra las variables de entorno
  4. #
  5. # Joaquín Ferrero.
  6. #
  7. # ATENCIÓN: no dejar expuesto este cgi al exterior: da demasiada información a los hackers
  8. #
  9. use v5.14;
  10. use CGI       qw':standard -utf8';
  11. use CGI::Carp qw'fatalsToBrowser';
  12. #use utf8;
  13. #use open qw<:utf8 :std>;
  14.  
  15. say header(-charset => 'utf-8', -type => 'text/plain');
  16.  
  17. say "\nEntorno:\n";
  18.  
  19. while (my($k,$v) = each %ENV) {
  20.     say "$k => $v";
  21. }
  22.  
  23. say "\nDirectorios de bibliotecas:\n";
  24.  
  25. while (my($k,$v) = each %INC) {
  26.     say "$k => $v";
  27. }
  28.  
  29. #say "\nMódulos instalados:\n";
  30. #say qx(cpan -l);              
  31.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

La segunda parte de la salida muestra todos los directorios donde va a buscar por las bibliotecas. Si no está la ruta que quiero, la agrego en mis programas con use lib "ruta";

Ahora está el tema de los permisos... todos los directorios donde debe entrar perl (ejecutado por el Apache) deben tener permiso de lectura y ejecución. Y los propios archivos de biblioteca, deben tener permiso de lectura, para el usuario -o grupo al que pertenece el usuario- web.

Lo más normal es que ese usuario sea www-data, y que pertenezca a un grupo del mismo nombre. Y que ningún otro usuario pertenezca a ese grupo. O sea, esté él solo (no siempre es así, a veces el usuario FTP también pertenece a ese grupo).

Entonces, con dar permisos de lectura a todos los archivos será suficiente.
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
find /usr/root/perl -type d -exec chmod 755 {} \;  # damos permiso de lectura/ejecución para todo el mundo, en las carpetas
find /usr/root/perl -type f -exec chmod 644 {} \;  # damos permiso de lectura           para todo el mundo, en los archivos
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


O... si quieres restringirlo aún más... cambias el propietario de todos los archivos/carpetas a www-data:www-data, y le das permisos de lectura/ejecución solo al usuario.

Para que los usuarios puedan usarlos, deben colocarse en algún directorio que sea "alcanzable" por parte de los usuarios. Lo mismo: depende de quién los vaya a ejecutar (www-data u otro usuario) y dónde (permisos de ese usuario para llegar hasta allí).

Para instalar grupos de módulos, si son pocos, con comandos apt (o del sistema de paquetes de tu distribución) o el comando cpan, valdría.

Hay una forma... que no he probado... que te permite hacer una instalación dando una lista de módulos, pero nunca lo he probado. Es con la opción autobundle del comando cpan.

De forma profesional, hay empresas que usan Carton.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Instalar módulos con root y con permisos para otros

Notapor danimera » 2020-01-30 09:40 @444

Buena la respuesta, y creo que aprenderé un poco. Ahora, ¿cómo podría lograr que se instalaran en las librerías que por defecto Perl busca a la hora de llamar un módulo? A veces tengo errores así:

Can't locate Data/Manip.pm in @INC (you may need to install the Data::Manip module) (@INC contains: /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl) at - line 14."

Y como se puede ver, ahí no aparece la ruta del root donde fue instalado el módulo. Necesito también poder cambiar esa ruta cuando lo instalo.
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Re: Instalar módulos con root y con permisos para otros

Notapor explorer » 2020-01-30 13:01 @584

Lo que no nos has dicho es qué método usas para instalar los módulos. Según el método que uses, se hará de una manera o de otra. Tienes más información en perlmodinstall y en este hilo de perlmonks.

El error que sale es fácil de solventar usando "use lib 'ruta al directorio que contiene la biblioteca';".
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Instalar módulos con root y con permisos para otros

Notapor danimera » 2020-02-14 09:10 @423

Lo que hago es que tengo usuario root y uso, o cpan o cpanm, pero todos quedan instalados sólo para usos del root, así que cuando tengo otro usuario, como por ejemplo, apache para cargar una página que tengo con un script que debería hacer uso de esos módulos, pues estos no tienen acceso, no tienen permisos por que sólo el usuario root tiene permisos para ellos.

Lo que deseo es que cuando use un cpan para instalar, se instale en un directorio con permisos de lectura para otros usuarios.
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Re: Instalar módulos con root y con permisos para otros

Notapor explorer » 2020-02-14 11:18 @513

Si usas cpan o cpanm, los módulos instalados deberían quedar instalados dentro del directorio site/ de alguno de los directorios indicados en donde perl los va a buscar. Esos directorios son los que están en @INC en el momento del arranque, y que puedes ver ejecutando perl -V

A ver... dices que los módulos se instalan en /usr/root/ ¿Ese directorio está entre los que salen al final de la salida de perl -V? ¿Puedes decirnos qué directorios son esos?

Si se instalan exclusivamente en el directorio PERSONAL del root, es que hay algo en la configuración del comando cpan que dice que hay que instalarlos ahí (buscar si hay algo en ~/.cpan/CPAN/MyConfig.pm). En concreto, el valor de mbuildpl_arg es para el proceso Build.pl, y makepl_arg es para Makefile.PL.

Los valores los tienes descritos en CPAN.pm. Un ejemplo de configuración de MyConfig.pm está en este hilo de perlmonks.

Las distintas opciones de indicación del directorio de instalación para Module::Build están en la sección INSTALL PATHS.

De todas formas, insisto en que a lo mejor es más fácil indicarle al servidor web dónde tiene que buscar perl y sus bibliotecas, y dar permiso de lectura a esos directorios.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Módulos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados