[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: OT duda con permisos para un grupo



On Wed, 15 Mar 2006 21:32:32 -0300
Angel Claudio Alvarez <angel@angel-alvarez.com.ar> wrote:

> El mar, 14-03-2006 a las 22:16 -0300, Ricardo Marcelo Alvarez escribió:
> > On Tue, 14 Mar 2006 21:31:15 -0300
> > Angel Claudio Alvarez <angel@angel-alvarez.com.ar> wrote:
> > 
> > > El mar, 14-03-2006 a las 20:49 -0300, Ricardo Marcelo Alvarez escribió:
> > > > On Tue, 14 Mar 2006 20:34:50 +0100
> > > > Rober Morales <ultimozar@hotmail.com> wrote:
> > > > 
> > > > > El Martes, 14 de Marzo de 2006 20:24, Ricardo Marcelo Alvarez escribió:
> > > > > > > Si lo puedes leer tú problema posiblemente estará en el script. Comprueba
> > > > > > > q las rutas sean absolutas y las variables q utilizas a ver si hay
> > > > > > > suerte.
> > > > > > >
> > > > > > > Saludos
> > > > > >
> > > > > > El script como root funciona bien, el problema es como usuario, incluso
> > > > > > saque el stdout y stderr hacia un archivo y es ahi donde me aparece que no
> > > > > > tiene permisos para leer ese archivo. En el log deja esto
> > > > > >
> > > > > > Error opening /var/log/apache2/transfer_pg.log: Permiso denegado at
> > > > > > /usr/local/gnupanel/mide-trafico-http.pl line 137
> > > > > 
> > > > > el archivo debe tener permisos de lectura para el usuario/grupo (esto creo que 
> > > > > está)
> > > > > 
> > > > > Y
> > > > > 
> > > > > la ruta debe ser recorrible. Es decir, cada directorio debe tener permisos de 
> > > > > apertura (x) para el usuario/grupo desde "/" o desde donde se ejecute el 
> > > > > script.
> > > > > 
> > > > > prueba con ello.
> > > > > 
> > > > 
> > > > Aca mando los permisos de toda la ruta de directorios
> > > > 
> > > > gnupanel:/# ls -l -d /var 
> > > > drwxr-xr-x  14 root root 4096 2006-02-20 20:03 /var
> > > > gnupanel:/# ls -l -d /var/log
> > > > drwxr-xr-x  13 root root 4096 2006-03-14 06:25 /var/log
> > > > gnupanel:/# ls -l -d /var/log/apache2 
> > > > drwxr-xr-x  2 root root 4096 2006-03-13 03:00 /var/log/apache2
> > > > gnupanel:/# ls -l -d /var/log/apache2/
> > > > access.log         error.log          error.log.1        transfer.log       transfer.log.1     transfer_pg.log    transfer_pg.log.1  
> > > > gnupanel:/# ls -l -d /var/log/apache2/transfer_pg.log
> > > > -rw-r-----  1 root adm 1900 2006-03-14 20:38 /var/log/apache2/transfer_pg.log
> > > > gnupanel:/# 
> > > > 
> > > > 
> > > > Saludos.
> > > > 
> > > El usuario que ejecuta el daemon esta en el grupo adm?
> > > Ejecutaste el script sin daemonizar??
> > > Podes postear el codigo??
> > > > 
> > Aca va el codigo, la parte donde el script cambia el usuario esta comentada
> > #############begin###################
> > 
> > #!/usr/bin/perl
> > 
> > use File::Tail;
> > use Pg;
> > 
> >     sub senal_de_fin
> > 	{
> > 	    my $signal = shift;
> > 	    $SIG{$signal} = \&senal_de_fin;
> > 	    close MENSAGES;
> > 	    exit(0);
> > 	}
> > 
> >     sub senal_de_kill
> > 	{
> > 	    my $signal = shift;
> > 	    $SIG{$signal} = \&senal_de_kill;
> > 	    close MENSAGES;
> > 	    exit(0);
> > 	}
> > 
> > sub analiza_http
> >     {
> >     my $renglon = $_[0];
> >     my $conexion = $_[1];
> >     my $logueo = $_[2];
> >     open(MENSHTTP,">> $logueo");
> >     @datos = NULL;
> >     @datos = split(' ',$renglon);
> >     $dominio = $datos[0];
> >     $transferencia = $datos[1];
> >     my $result = NULL;
> >     $result = $conexion->exec("BEGIN");
> >     $sql = "SELECT dominio FROM gnupanel_transferencias WHERE dominio='$dominio' ";
> >     $result = $conexion->exec($sql);
> >     $result = $conexion->getResult;
> >     
> >     if($result)
> > 	{
> > 	$sql = "UPDATE gnupanel_transferencias SET http = http + $transferencia WHERE dominio = '$dominio' ";
> >     	$result = $conexion->exec($sql);
> > 	$estado = $result->resultStatus;
> > 
> > 	$sql = "UPDATE gnupanel_transferencias SET total = http + ftp + smtp + pop3 WHERE dominio = '$dominio' ";
> >     	$result = $conexion->exec($sql);
> > 	$estado = $estado && $result->resultStatus;
> > 
> > 	if($estado == PGRES_COMMAND_OK)
> > 	    {
> >     	    $result = $conexion->exec("END");
> > 	    }
> > 	else
> > 	    {
> > 	    $mensaje = $conexion->errorMessage;
> > 	    print MENSHTTP $mensaje;
> >     	    $result = $conexion->exec("ROLLBACK");
> > 	    }
> > 	}
> >     else
> > 	{
> > 	$mensaje = "No se hace nada \n";
> > 	print MENSHTTP $mensaje;
> >     	$result = $conexion->exec("END");
> > 	}
> > 	
> >     close MENSHTTP;
> >     }
> >     
> > 
> > #######################################################################################################################
> > ## Put ourselves in background if not in debug mode. 
> > require "/etc/gnupanel/gnupanel.conf.pl";
> > 
> > $nombre = $0;
> > $nombre = substr($nombre,rindex($nombre,"/")+1,length($nombre)-1);
> > 
> > $logueo = "/var/log/".$nombre.".log";
> > $pidfile = "/var/run/".$nombre.".pid";
> > $conexion = NULL;
> > 
> > open(STDERR, ">> $logueo");
> > 
> > $SIG{'TERM'} = \&senal_de_fin;
> > $SIG{'KILL'} = \&senal_de_kill;
> > 
> >     if (open(TTY, "/dev/tty"))
> > 	{
> > 	    ioctl(TTY, $TIOCNOTTY, 0);
> > 	    close(TTY);
> > 	}
> > 
> >     $definida = setpgrp(0, 0);
> > 
> >     $proceso = getppid;
> > 
> >     $child_pid = fork;
> > 
> >     if ( $child_pid != 0)
> > 	{
> > 	    print "Inicializando el medidor de trafico de HTTP \n";
> > 	    exit(0);
> > 	}
> >     else
> > 	{
> > 
> > #Inicio del programa
> > 	    open(STDOUT, ">> $logueo");
> > 	    open(PIDO,"> $pidfile");
> > 	    print PIDO "$$ \n";
> > 	    close PIDO;
> > 
> > #	    my ($login,$pass,$uid,$gid) = getpwnam($usuario);
> > #	    $( = $gid;
> > #	    $) = $gid;
> > #	    $< = $uid;
> > #	    $> = $uid;
> > #
> > #	    if (  ((split(/ /,$)))[0] ne $gid) || ((split(/ /,$())[0] ne $gid)  ) 
> > #		{
> > #		open(MENSAGES,">> $logueo");
> > #		print MENSAGES "No se pudo cambiar el GID \n";
> > #		close MENSAGES;
> > #		}
> > #	 
> > #	    if (  ($> ne $uid) || ($< ne $uid)  )
> > #		{
> > #		open(MENSAGES,">> $logueo");
> > #		print MENSAGES "No se pudo cambiar el UID \n";
> > #		close MENSAGES;
> > #		}
> > #
> > #	    undef($login);
> > #	    undef($pass);
> > #	    undef($uid);
> > #	    undef($gid);
> > 
> > 	    $file = File::Tail->new(name=>$archivo_log_http,interval=>1,maxinterval=>1,adjustafter=>1);
> > 	    $conexion = NULL;
> > 	    $conexion = Pg::connectdb("dbname=$database host=localhost user=$userdb password=$pasaportedb");
> > 	    
> > 	    while(1)
> > 		{
> > 		$estado = $conexion->status;
> > 		
> > 		if($estado==PGRES_CONNECTION_OK)
> > 		    {
> > 		    while(defined($linea=$file->read))
> > 			{
> > 			    chop($linea);
> > 	    		    analiza_http($linea,$conexion,$logueo);
> > 			}
> > 		    }
> > 		else
> > 		    {
> > 		    $mensaje = $conexion->errorMessage;
> > 		    open(MENSAGES,">> $logueo");
> > 		    print MENSAGES $mensaje;
> > 		    close MENSAGES;
> > 		    $conexion->reset;
> > 		    }
> > 		}
> > 
> > #fin del programa
> > 	}
> >     
> > $end = 0;
> > 
> > 
> > ###############################################################################################################################################################
> > #############end#####################
> > 
> > En el archivo /etc/gnupanel/gnupanel.conf.pl
> > 
> > estan definidas las siguientes variables
> > 
> > 
> > #############begin###################
> > 
> > $database = "gnupanel";
> > $userdb = "gnupanel";
> > $pasaportedb = "XXXXXXXXXXX";
> > 
> > $archivo_log_mail = "/var/log/mail.log";
> > $archivo_log_ftp = "/var/log/proftpd/proftpd.log";
> > $archivo_log_http = "/var/log/apache2/transfer_pg.log";
> > $archivo_log_https = "/var/log/apache-ssl/transfer_pg.log";
> > 
> > $tiempo_dir = 900;
> > $directorio_raiz_sitios = "/var/www/sitios";
> > $directorio_raiz_correo = "/var/mail/correos";
> > 
> > $usuario = "gnupanelex";
> > $grupo = "gnupanelex";
> > 
> > #############end#####################
> > 
> > saludos.
> > 
> > 
> > 
> > 
> > > > 
> > > > > -- 
> > > > > "Como no sabían que era imposible, lo hicieron!"
> > > > > 
> > > > > Rober Morales Chaparro
> > > > > 
> > > > > 
> > > -- 
> > > Angel Claudio Alvarez
> > > Usuario Linux Registrado 143466
> > > GPG Public Key en http://pgp.mit.edu
> > > key fingerprint = 3AED D95B 7E2D E954 61C8  F505 1884 473C FC8C 8AC4
> > > 
> > > 
> 
> No entiendo para que cambias el usuario Por que no lo ejecutas
> directamente como el usuario??
> Es necesario que utilices File::Tail??
> El problema puede estar en ese modulo o que al cambiar de usuario este
> no tenga entorno, por eso te recomiendo ejecutarlo directamente como
> usuario ( con su - usuario)
> 

Antes de probarlo asi, ya lo probe con "su usuario" y me pasa lo mismo. El File::Tail (es similar al comando tail pero 
desde dentro de un script de perl) es para ir leyendo la linea que va entrando al log lo suba en ese momento a la base 
de datos, tambien tenia la opcion de enviar el log de apache a travez de un pipe a un programa, pero segun lo que lei 
en la pagina de apache hay que estar muy seguro de que el programa no tenga ningun bug de seguridad por eso opte pòr esta opcion.

Saludos.






> -- 
> Angel Claudio Alvarez
> Usuario Linux Registrado 143466
> GPG Public Key en http://pgp.mit.edu
> key fingerprint = 3AED D95B 7E2D E954 61C8  F505 1884 473C FC8C 8AC4
> 
> 

Attachment: pgpFLTQiDzi94.pgp
Description: PGP signature


Reply to: