No space left on device: mod_rewrite… Solución para servidor web Apache

servidor apache

servidor apache

En alguna ocasión me he topado con que al reiniciar Apache después de matar todos los procesos con killall -9 httpd el servidor Apache no quiere arrancar, Apache start [FALLA], dando en el log el error de más arriba. Se trata de que Apache no ha liberado recursos del sistema y debemos hacerlo nosotros. En concreto se trata de semáforos. Linux tiene dos comandos que me ayudan a hacer esto (ipcs e ipcrm). Por si acaso antes vamos a eliminar los procesos zoombie:

Ver procesos zoombie:

# ps -A -ostat,ppid,pid,cmd | grep -e ‘^[Zz]’

Matar procesos zoombie (tardará un poco):

# kill -HUP `ps -A -ostat,ppid,pid,cmd | grep -e ‘^[Zz]’ | awk ‘{print $2}’`

Este es el error al reiniciar o arrancar Apache:

[crit] (28) No space left on device: mod_rewrite: could not create rewrite_log_lock Configuration Failed

Solución:

Revisar los semáforos de Apache

# ipcs -s | grep apache

Eliminamos todos los semáforos de los procesos de Apache

# ipcs -s | grep apache | perl -e ‘while () { @a=split(/\s+/); print `ipcrm sem $a[1]`}’

Iniciar Apache

# service httpd start

Activar la opción de trabajar con tablas vinculadas en PhpMyAdmin

PhpMyAdmin incluye opciones para relacionar tablas (de tipo InnoDB), pero muchas veces vienen desactivadas y al darle al boton operaciones en la base de datos, aparece el error: Las opciones adicionales para trabajar con tablas vinculadas fueron desactivadas. Para saber porqué, dé clic aquí.

Para activarlas debemos añadir algunas opciones a los ficheros de configuración del PMA.

En algunos paquetes que integran Apache, MySQL y PHP no es necesario configurar nada porque ya traen activadas por defecto estas opciones, comoXAMPP. En otros paquetes, aunque configures estas opciones, es posible que sigan sin funcionar las relaciones, como en el WAMP.

Para lograr que funcionen las relaciones debemos seguir estos pasos:

  1. Comprobar si tenemos una tabla llamada phpmyadmin. Si no es así, ejecutar el script create_tables.sql, que está en la carpeta de scripts de phpmyadmin.
    Esta es una tabla que usa PMA internamente para ofrecer características adicionales, como las relaciones entre tablas.
  2. Acceder al fichero de configuración de PMA config.inc.php (en las versiones nuevas viene como config.default.php) y dejar estas opciones tal y como se indica a continuación:
    $cfg['Servers'][$i]['auth_type'] = 'http';
    $cfg['Servers'][$i]['controluser'] = 'pma';
    $cfg['Servers'][$i]['controlpass'] = 'pmapass';
    $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
    $cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
    $cfg['Servers'][$i]['relation'] = 'pma_relation';
    $cfg['Servers'][$i]['table_info'] = 'pma_table_info';
    $cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';
    $cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';
    $cfg['Servers'][$i]['column_info'] = 'pma_column_info';
    $cfg['Servers'][$i]['history'] = 'pma_history';
    $cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';
  3. Crear un usuario MySQL para utilizar la relación entre tablas (que será el que indicamos anteriormente como controluser con la contraseña indicada en controlpass) y asignarle los correspondientes permisos:
    GRANT USAGE ON mysql.* TO 'pma'@'localhost' IDENTIFIED BY 'pmapass';
    GRANT SELECT (Host, User, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv, Execute_priv, Repl_slave_priv, Repl_client_priv) ON mysql.user TO 'pma'@'localhost';
    GRANT SELECT ON mysql.db TO 'pma'@'localhost';
    GRANT SELECT ON mysql.host TO 'pma'@'localhost';
    GRANT SELECT (Host, Db, User, Table_name, Table_priv, Column_priv) ON mysql.tables_priv TO 'pma'@'localhost';
  4. Reiniciar apache y acceder al PMA. Si todo ha salido bien, ya no tendremos el mensaje de error y aparecerá en el menú de arriba el botón diseñador, desde donde podremos establecer las relaciones entre tablas.

Más información:
PhpMyAdmin Wiki

Script de Nautilus para compartir cualquier directorio en Internet con Ubuntu

Comparte cualquier directorio en Internet en 10 segundos solo con Nautilus y un Script

Hasta el momento la forma mas fácil de compartir archivos en Internet con todo el mundo es usando algún servicio de compartición o sincronización de archivos, tales como Ubuntu One, Dropbox, Wingedbox, etc.

Pero el usuario de Gnome-Look hardball ha subido a Gnome-Look un script que hace lo mismo que cualquiera de estos servicios pero directamente desde tu equipo y en unos cuantos segundos, permitiéndote compartir todo lo que quieras con el que quieras por el puerto :8000 de tu equipo.
El script te permite incluso compartir directorios montados con gvfs, como los directorios de Windows, y lo única dependencia que necesita para funcionar es Zenity.

Comparte cualquier directorio en Internet en 10 segundos solo con Nautilus y un Script

Otro punto a favor de este script seria el mantener todos tus datos dentro de tu propio equipo, mas que nada en estos días donde la privacidad cumple un papel tan importante y donde incluso el concepto de los servicios en la nube se pone a prueba por el lanzamiento de Google Chrome OS.

Ahora para instalar el script solo debes descargarlo desde Gnome-Look – share-http-here, darle permisos de ejecución, copiarlo al directorio ~/.gnome2/nautilus-scripts/ y reiniciar Nautilus para poder acceder a este desde el menú contextual Scripts del directorio que desees compartir.

Comparte cualquier directorio en Internet en 10 segundos solo con Nautilus y un Script

También puedes ejecutar los siguientes comandos en la terminal para instalarlo de forma mas sencilla:

wget http://gnome-look.org/CONTENT/content-files/136489-share-http-here chmod +x ./136489-share-http-here mv 136489-share-http-here ~/.gnome2/nautilus-scripts/share-http-here nautilus -q 

Comparte cualquier directorio en Internet en 10 segundos solo con Nautilus y un Script

Nota: es posible que tengas que modificar el script en caso de tener conexión por medio de WiFi en lugar de cableada. Para esto solo tienes que reemplazar eth0 por wlan0 dentro del script.

Bug de ProFTPd desde Plesk 9.5 hasta la versión 10.0.1 de Plesk

Ójo, esto le interesan a todos los que han actualizado a la versión 10 de Plesk sobre Linux

Pego textualmente la explicación del bug sobre FTPd de los chicos de Parallels

Hi Parallels-Team!

Plesk 10 comes with ProFTPD v 1.3.3 (psa-proftpd-1.3.3-cos5.build109101020.08.x86_64 : ProFTPD — Professional FTP Server). Unfortunately this version has a critical security issue. See http://www.h-online.com/security/new…r-1128907.html and http://bugs.proftpd.org/show_bug.cgi?id=3521:

—————— begin snippet ———————

Security update for ProFTPD FTP server
A flaw in the popular ProFTPD FTP server potentially allows unauthenticated attackers to compromise a server. The problem is caused by a buffer overflow in the pr_netio_telnet_gets() function for evaluating TELNET IAC sequences.

ProFTPD is capable of processing TELNET IAC sequences on port 21; the sequences enable or disable certain options not supported by the Telnet or FTP protocol itself. The buffer overflow allows attackers to write arbitrary code to the application’s stack and launch it. Updating to version 1.3.3c of ProFTPD solves the problem.

The update also fixes a directory traversal vulnerability which can only be exploited if the “mod_site_misc” module is loaded. This flaw could allow attackers with write privileges to leave their permitted path and delete directories or create symbolic links outside of the path. The module is not loaded or compiled by default.

Further information about the update can be found in the release notes and in the NEWS file. As the developers have classified the release as an “important security update”, all users are advised to install it as soon as possible.

——————- endsnippet ———————-

To fix the issue ProFTPD 1.3.3c was released.

When will Parallels provide the neccessary update for Plesk 10? Or do we have to patch ProFTPD bei ourself? For which Plesk version you´ll provide a fix?!?

Thanks!

Aquí teneis una explicación en Castellano del bug http://wiki.woop.es/ProFTPD_TELNET_IAC

La solución de este bug es muy fácil

Como la gente de Atomicturtle.com son mas previsores agregaron a sus repositorios la versión 1.3.3c de psa-proftpd 1.3.3c solamente con agregar los repositorios al servidor y hacer despues un yum upgrade psa-proftpd basta para subsanar el bug de proFTPd

1) Agregamos el repositorio de Atomic con lo siguiente:

 wget -O - http://www.atomicorp.com/installers/atomic |sh 

2) Actualizamos  psa-proftpd a la versión 1.3.3c con:

 yum upgrade psa-proftpd 

Error de Plesk con SSL en /var/log/sw-cp-server/error_log

El error que sale continuamente en el log de Plesk /var/log/sw-cp-server/error_log es el siguiente : Error: (connections.c.299) SSL: 1 error:140780E5:SSL routines:SSL23_READ:ssl handshake failure

La solución parece ser un bug de Plesk , aunque estuve googleando un buen rato, no encontré mucho sobre el tema, el caso es que estaba obteniendo este error en /var/log/sw-cp-server/error_log, además aparecía cada 6 minutos por lo que en 3 días con el servidor funcionando, ya tenía dos historicos del archivo comprimidos en .gz.

Finalmente, buscando en la ayuda de Plesk, encontré la forma de que no volviera a aparecer más, la verdad es que no tiene mucha complicación, lo único que tenemos que hacer es, generar un certificado, dependiendo de las necesidades de cada uno, se puede comprar o autogenerarlo, os hago un copy/paste de la solución en la ayuda de Plesk .

En caso de que necesite generar un certificado autofirmado, siga este procedimiento:

1. Vaya a Inicio > Seguridad > Certificados SSL. Se le mostrará una lista de los certificados SSL existentes en su repositorio.
2. Haga clic en Añadir Certificado SSL.
3. Indique las propiedades del certificado:
* Nombre del certificado. Este le ayudará a identificar este certificado en el repositorio.
* Nivel de Encriptación. Escoja el nivel de encriptación para su certificado SSL. Le recomendamos que escoja un valor superior a 1024 bits.
* Indique su ubicación y el nombre de la organización. Los valores introducidos no deben exceder los 64 símbolos permitidos.
* indique el nombre del servidor para el que ha adquirido el certificado SSL. Por ejemplo: your-domain.com
* Introduzca su dirección de email.
4. Haga clic en el botón Autofirmado. Se generará su certificado y se almacenará en el repositorio.

Como luchar contra el SPAM en Plesk con Qmail

Primero compruebe que todos los dominios tienen la opción ‘Correo para usuario inexistente’ definida a ‘Rechazar’ pero no a reenviar. Puede cambiar este ajuste para todos los dominios usando “Operaciones en Grupo” en la página “Dominios” del CP de Parallels Plesk Panel. La prestación ‘Rechazar correo para usuario inexistente’ está disponible a partir de Parallels Plesk Panel 7.5.3.

Asimismo, compruebe que todas las redes e IPs incluidas en la lista blanca son de su confianza.

Compruebe cuántos mensajes hay en la cola de Qmail con:

# /var/qmail/bin/qmail-qstat
messages in queue: 27645
messages in queue but not yet preprocessed: 82

Si la cola tiene demasiados mensajes, intente descubrir la procedencia del SPAM.

Si el correo está siendo enviado por un usuario autorizado pero no desde el script PHP, puede ejecutar el comando que aparece a continuación para descubrir el usuario que envió la mayoría de mensajes (desde Plesk 8). Tenga en cuenta que es necesario tener activada la opción ‘Autorización SMTP’ en el servidor para poder ver estos registros:

# cat /usr/local/psa/var/log/maillog |grep -I smtp_auth |grep -I user |awk ‘{print $11}’ |sort |uniq -c |sort -n

La ruta a ‘maillog’ puede cambiar en función del SO que esté usando.

El próximo paso es la utilidad `qmail-qread`, que puede usarse para leer las cabeceras de los mensajes:

# /var/qmail/bin/qmail-qread
18 Jul 2005 15:03:07 GMT #2996948 9073 bouncing
done remote user1@domain1.com
done remote user2@domain2.com
done remote user3@domain3.com
….

Esta muestra los remitentes y destinatarios de los mensajes. Si el mensaje incluye demasiados destinatarios, probablemente se tratará de SPAM. Ahora intente encontrar este mensaje en la cola por su ID #2996948:

# find /var/qmail/queue/mess/ -name 2996948

examine el mensaje y encuentre la primera línea “Recibido” para saber desde dónde se envió la primera vez, por ejemplo, si encuentra:

Received: (qmail 19514 invoked by uid 10003); 13 Sep 2005 17:48:22 +0700

Significa que este mensaje fue enviado a través de algún CGI por el usuario con UID 10003. Usando este UID puede encontrar el dominio correspondiente:

# grep 10003 /etc/passwd 

Si la línea ‘Recibido’ contiene un UID de un usuario ‘apache’ (por ejemplo “invoked by uid 48″) – significa que el SPAM fue enviado a través de algún script PHP. En este caso, puede intentar conocer el spammer usando la información de los correos spam (direcciones de/para, asunto o cualquier otro dato). Generalmente es muy difícil descubrir la fuente de SPAM. Si está completamente seguro de que en este momento hay algún script enviando SPAM (la cola crece rápidamente sin motivo aparente), puede usar el siguiente script para saber qué scripts PHP se están ejecutando en este momento:

# lsof +r 1 -p `ps axww | grep httpd | grep -v grep | awk ‘ { if(!str) { str=$1 } else { str=str”,”$1}}END{print str}’` | grep vhosts | grep php

También puede aplicar el artículo 1711, que describe el procedimiento para conocer desde qué dominios se está enviando el correo a través de scripts PHP.

Líneas recibidas como:

Received: (qmail 19622 invoked from network); 13 Sep 2005 17:52:36 +0700
Received: from external_domain.com (192.168.0.1)

significan que el mensaje ha sido aceptado y entregado a través de SMTP y que el remitente es un usuario de correo autorizado.