ago 02 2010

421 Home directory not available – aborting

Category: LinuxDavid González @ 8:00

Vamos a ver la receta para solucionar este mensaje de error.

Al acceder por ftp a un alojamiento, el log de nuestro cliente ftp nos muestra un mensaje similar a este:

Comando: USER xxxxxx@dominio.com
Respuesta: 331 User xxxxxx@dominio.com OK. Password required
Comando: PASS ********************
Respuesta: 421 Home directory not available - aborting

El error básicamente viene a decirnos que no puede acceder al directorio, seguramente porque no existe. Así que la solución es simplemente crear la carpeta.

En el servidor ftp pure-ftp, tenemos la posibilidad de automatizar esta tarea y forzar a la creación de los directorios que no existen.

Simplemente tenemos que editar el fichero de configuración con esta línea:

vim /etc/pure-ftpd.conf

# Automatically create home directories if they are missing
CreateHomeDir               yes

y reiniciar el servicio:

/etc/init.d/pure-ftpd restart

Entradas relacionadas

Etiquetas: ,


jul 05 2010

Eliminar fichero que empieza con un guion -

Category: LinuxDavid González @ 21:45

Vamos a ver la receta, para los casos en los que tenemos un archivo que empieza con un guion “-” y no podemos eliminarlo de la forma habitual, ya que desde consola, interpreta el guión como si fuéramos a pasarle alguna opción al propio comando.

dgonzalez@David:~/carpeta$ rm -f -fichero
rm: opción inválida -- c
Pruebe `rm --help' para más información.

En este caso, como existen las opciones “rm -fi” intenta ejecutar ese comando, mostrando error en la opción -c que no existe con el comando rm.

En primera instancia, se me ocurrieron varias maneras de eliminarlo. Con comillas en el fichero, intentando escaparrar el guión, pero no funcionaron.

dgonzalez@David:~/carpeta$ rm "-fichero"
rm: opción inválida -- c
Pruebe `rm --help' para más información.

dgonzalez@David:~/carpeta$ rm \-fichero
rm: opción inválida -- c
Pruebe `rm --help' para más información.

La solución que encontré es bien sencilla, especificar que estas en esta ruta con ./

rm  ./-fichero

Otra manera más pro, es eliminar ficheros por su número de Inodo vía rm-rf.es

Entradas relacionadas

Etiquetas: ,


may 06 2010

Telnet. Comandos POP.

Category: Linux,WindowsDavid González @ 21:03

Ya vimos anteriormente como enviar un email usando telnet. Hoy en lugar de establecer una sesión stmp, lo haremos al POP para ver los correos.

Seguiremos el mismo formato. Vemos los comandos usados y debajo del comando pondré la respuesta del servidor.

  • Conectarnos al servidor destino (dominio.com o IP) con telnet, especificando el host destino y el puerto
telnet destino.com 110

Si el servidor destino tiene un servicio de correo en ese puerto nos devolverá un mensaje.

+OK Hello there.

  • Autenticación. Para ello, especificaremos el usuario y la clave o password
user cuenta@correo.es

+OK Password required.

pass contraseña_dela_cuenta

+OK logged in.

  • Podemos listar los email que hay en la bandeja de entrada con el comando LIST:
LIST

+OK POP3 clients that break here, they violate STD53.
1 1805
2 1954
3 6663
4 2130
5 9795

  • Podemos visualizar los correos usando el comando RETR o TOP
retr número_de_mensaje
top número_de_mensaje número_de_lineas

250 Accepted

  • Para eliminar un mensaje, tenemos el comando DELE
DELE número_de_mensaje

+OK Deleted.

  • Para finalizar la sesión, usaremos el comando QUIT
QUIT

+OK Bye-bye.

De esta forma podemos visualizar los correos de una cuenta desde la consola. Básicamente es lo que está haciendo un cliente de correo por debajo no? ;)

Entradas relacionadas

Etiquetas: ,


abr 16 2010

This version of the ClamAV engine is outdated

Category: LinuxDavid González @ 18:00

Hoy por la mañana me he encontrado que el clam, que estaba instalado en un servidor bajo Centos 5.2, no estaba corriendo.

Al ir a reiniciarlo de la forma habitual (/etc/init.d/clamd restart) mostraba este error:

Starting Clam AntiVirus Daemon: LibClamAV Warning: ******************************************************************************
LibClamAV Warning: ***  This version of the ClamAV engine is outdated.     ***
LibClamAV Warning: *** DON'T PANIC! Read http://www.clamav.net/support/faq ***
LibClamAV Warning: ***********************************************************
LibClamAV Error: cli_hex2str(): Malformed hexstring: This ClamAV version has reached End of Life! Please upgrade to version 0.95 or later. For more information see  www.clamav.net/eol-clamav-094 and www.clamav.net/download (length: 169)
LibClamAV Error: Problem parsing database at line 742
LibClamAV Error: Can't load daily.ndb: Malformed database
LibClamAV Error: cli_tgzload: Can't load daily.ndb
LibClamAV Error: Can't load /var/clamav/daily.cld: Malformed database
ERROR: Malformed database

La solución ha sido actualizar por yum el clamd:

[root@server ~]# yum update clamd

Al hacerlo ha actualizado estos dos paquetes:

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Updating:
 clamav                  i386       0.96-1.el5.rf    rpmforge           12 M
 clamd                   i386       0.96-1.el5.rf    rpmforge          226 k

Una vez hecho, he podido arrancar el clam sin problemas.

Entradas relacionadas

Etiquetas: , , ,


abr 14 2010

ClamAv en nuestro servidor Linux. Como escanear

Category: LinuxDavid González @ 18:00

Hoy vamos a aprender como instalar el antivirus ClamAV y escanear nuestro server.

Primero tenemos que ver que versión tenemos del S.O para añadir el repositorio correcto. Podemos verlo en este fichero:

root@server [~]# cat /etc/redhat-release
CentOS release 5.4 (Final)

Una vez que tenemos localizada la versión, debemos añadir el repositorio. Si nuestro caso fuera la versión 5 usaríamos la primera línea y si fuera la versión 4, usaríamos el segundo enlace.

rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
rpm -Uhv http://apt.sw.be/redhat/el4/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el4.rf.i386.rpm

Instalaremos el antivirus ClamAV

yum install clamd

Una vez instalado, actualizaremos la base de datos de virus:

cd /etc/cron.daily/
./freshclam

En mi caso, sólo quiero pasar el antivirus en la carpeta home (y subcarpetas). Para ello, nos situaremos en dicha carpeta y lanzaremos el clamscan

cd /home/ clamscan --max-filesize=1090401  --recursive=yes --phishing-sigs=yes --phishing-scan-urls=yes --scan-html=yes --scan-pe=yes --scan-mail=no --infected --exclude-dir=mail --exclude-dir=access-logs --exclude-dir=logs --exclude-dir=etc

Podemos pasarle muchos más parámetros al clam. Estas son las opciones que muestra la ayuda.

root@server [~]# clamscan --help

    --help                -h             Mostrar por pantalla esta ayuda
    --version             -V             Mostrar por pantalla la versión
    --verbose             -v             Modo verbose
    --debug                              Habilitar el modo debug de libclamav
    --quiet                              Sólo mostrar por pantalla los mensajes de error
    --stdout                             Escribe en la salida (stdout) en lugar de la salida de errores (stderr)
    --no-summary                         Deshabilitar resumen al final del escaneo
    --infected            -i             Sólo mostrar por pantalla los fichero infectados
    --bell                               Sonido de campana en la detección de virus

    --tempdir=DIRECTORY                  Crear fichero temporales en DIRECTORY
    --leave-temps[=yes/no(*)]            No eliminar los ficheros temporales
    --database=FILE/DIR   -d FILE/DIR    Cargar la base de datos de virus desde un fichero (ficheros db)
    --log=FILE            -l FILE        Guarda el reporte escaneado en un fichero 'FILE'
    --recursive[=yes/no(*)]  -r          Escanea recursivamente subdirectorios
    --file-list=FILE      -f FILE        Escanea fichero desde FILE
    --remove[=yes/no(*)]                 Elimina fichero infectados
    --move=DIRECTORY                     Mueve los fichero infectados al directorio 'DIRECTORY'
    --copy=DIRECTORY                     Copia los fichero infectados al directorio 'DIRECTORY'
    --exclude=PATT                       No escanea ficheros que contengan 'PATT' en el nombre
    --exclude-dir=PATT                   No escanea directorios que contenga 'PATT' en el nombre
    --include=PATT                       Sólo escanea ficheros que contengan 'PATT'
    --include-dir=PATT                   Sólo escanea directorios que contengan 'PATT'

    --detect-pua[=yes/no(*)]             Detecta posiblemente aplicaciones no deseadas
    --exclude-pua=CAT                    Saltar firmas PUA de la categoría CAT
    --include-pua=CAT                    Carga firmas PUA de la categoría CAT
    --detect-structured[=yes/no(*)]      Detecta datos estructurados (SSN, Tarjeta de Crédito)
    --structured-ssn-format=X            Formato SSN (0=normal,1=stripped,2=ambos)
    --structured-ssn-count=N             Mínimo contador SSN para generar una detección
    --structured-cc-count=N              Mínimo contador CC para generar una detección
    --scan-mail[=yes(*)/no]              Escanear correos
    --phishing-sigs[=yes(*)/no]          Detección de phishing basados en firma
    --phishing-scan-urls[=yes(*)/no]     Detección de phishing basado en URL
    --heuristic-scan-precedence[=yes/no(*)] Detiene el escaneo tan pronto como encuentre un resultado heuristico
    --phishing-ssl[=yes/no(*)]           Siempre bloquea coincidencias SSL en url's (modulo de phishing)
    --phishing-cloak[=yes/no(*)]         Siempre bloquea url encubiertas (modulo de phishing)
    --algorithmic-detection[=yes(*)/no]  Algorítmica de detección
    --scan-pe[=yes(*)/no]                Escanea fichero PE
    --scan-elf[=yes(*)/no]               Escanea fichero ejecutables
    --scan-ole2[=yes(*)/no]              Escanea ficheros OEL
    --scan-pdf[=yes(*)/no]               Escanea fichero pdf
    --scan-html[=yes(*)/no]              Escanea fichero html
    --scan-archive[=yes(*)/no]           Escanea ficheros comprimidos (soportado por libclamav)
    --detect-broken[=yes/no(*)]          Intenta detectar fichero ejecutables rotos
    --block-encrypted[=yes/no(*)]        Archivos con bloques cifrados
    --mail-follow-urls[=yes/no(*)]       Descarga y escanea las URL's

    --max-filesize=#n                    Tamaño máximo de ficheros a escanear
    --max-scansize=#n                    La cantidad máxima de datos para buscar cada archivo contenedor (**)
    --max-files=#n                       El número máximo de archivos para buscar cada archivo contenedor (**)
    --max-recursion=#n                   Archivo máximo nivel de recursión para el archivo contenedor (**)
    --max-dir-recursion=#n               Máximo nivel de recursión en los directorios

(*) Opciones por defecto de escaneo
(**) Ciertos archivos (por ejemplo, documentos, archivos, etc) a su vez puede contener otros
   archivos en su interior. Las opciones anteriores garantizar el tratamiento seguro de este tipo de datos.

Entradas relacionadas

Etiquetas: , ,


abr 13 2010

for en bash. Configurar salto de linea en un fichero

Category: LinuxDavid González @ 22:21

Hoy vamos a dar un pequeño truco a la hora de usar un bucle for en un script en bash.

La estructura de un for en bash sería la siguiente:

#!/bin/sh
for i in 1 2 3
do
  echo "$i"
done

Esto nos imprimirá 1 2 3. Vemos que por defecto el bucle for, toma el carácter “espacio en blanco” como referencia. De esta forma lee el 1, luego el 2 y luego el 3.

Otro ejemplo. Tenemos este archivo de texto ‘tureceta.txt’:

dgonzalez@David:~$ cat /home/tureceta/tureceta.txt
esto es una zprueba
una zprueba
texto zde tureceta

y este script, básico, para imprimir cada linea:

#!/bin/sh
for i in `cat /home/tureceta/tureceta.txt`
do
echo $i
done

Como hemos visto, toma como delimitador el carácter espacio y muestra todas las palabras.

dgonzalez@David:~$ sh tureceta.sh
esto
es
una
zprueba
una
zprueba
texto
zde
tureceta

Si queremos podemos cambiar esta referencia con la variable IFS (internal field separator). Si queremos que imprima cada una de las lineas, debemos indicar que esta variable sea un salto de linea, de esta forma:

#!/bin/sh
IFS=$`\n`
for i in `cat /home/tureceta/tureceta.txt`
do
echo $i
done

Así mostraría este resultado:

dgonzalez@David:~$ sh tureceta.sh
esto es una zprueba
una zprueba
texto zde tureceta

Entendiendo esto, se puede usar como delimitador cualquier carácter, incluso una letra:

IFS=','
IFS=';'
IFS='.'
IFS='|'
IFS='z'

Entradas relacionadas

Etiquetas: ,


abr 03 2010

(98)Address already in use: make_sock: could not bind to address 0.0.0.0:443

Category: LinuxDavid González @ 16:31

Alguna me ha pasado, que vas a reiniciar el apache de la forma habitual:

/etc/init.d/httpd restart

o

service httpd restart

y muestra este error:

(98)Address already in use: make_sock: could not bind to address 0.0.0.0:443
no listening sockets available, shutting down
Unable to open logs

por alguna razón, existe algún procesos (que no es apache) que esta haciendo uso del puerto y el propio apache no puede matarlo para iniciarse nuevamente.

La solución es matar todos los procesos de apache y volver a arrancar:

killall -9 httpd
/etc/init.d/httpd start

o

service httpd start

Entradas relacionadas

Etiquetas: ,


abr 01 2010

Copiar un archivo en todos los directorios con find

Category: LinuxDavid González @ 8:10

Ya vimos en otro post el uso del find y algunas de sus opciones.

La receta de hoy sirve para copiar un fichero en todos los directorios o carpetas de un site. Vamos a ver como sería:

find ruta -type d -exec cp -p fichero {} \;

Cuando he tenido que usar esta comando, principalmente, es en los casos en que he creado un php.ini en el public_html con una directiva. Como el php.ini sólo lo activa a nivel de directorio, es necesario tener uno en cada una de las carpetas donde también requerimos dicha directiva activa.

Esta directiva podría ser, por ejemplo:

register_globals=On;
memory_limit = 32M;
max_execution_time = 30
post_max_size = 8M;
include_path = ".:/home/tureceta/php";
upload_max_filesize = 2M;

De esta forma, copiaremos el fichero php.ini en todas la carpetas o directorios de nuestro alojamiento.

Estando en la home (/home/tureceta/public_html), usaremos el comando:

find . -type d -exec cp -p php.ini {} \;

Entradas relacionadas

Etiquetas: , , ,


mar 29 2010

Convertir de ISO-8859 a utf-8

Category: LinuxDavid González @ 8:00

A más de uno le habrá dado mucho trabajo la codificación de caracteres, cuando no muestra bien las ñ, acentos, etc…

Hoy vamos a dar la receta, para convertir estos archivos fácilmente y poder cambiar la codificación. Para ellos usaremos el comando iconv

  • iconv. Convierte la codificación de los ficheros dados de una codificación a otra.
  1. Modo de empleo:
  2. iconv [OPCIÓN...] [FICHERO...]

  3. Opciones o parámetros:
  4. Especificación de formato de Entrada/Salida:
    -f, –from-code=NOMBRE     codificación del texto original
    -t, –to-code=NOMBRE       codificación para el resultado

    Información:
    -l, –list                 lista todos los juegos de caracteres conocidos

    Control del resultado:
    -c                         se omiten los caracteres inválidos en la salida
    -o, –output=FILE          fichero de salida
    -s, –silent               suprime los avisos
    –verbose              muestra información sobre el desarrollo

    -?, –help                 Da esta lista de ayuda
    –usage                Da un mensaje corto de uso
    -V, –version              Muestra la versión del programa

    Los argumentos obligatorios u opcionales para las opciones largas son
    también obligatorios u opcionales para las opciones cortas correspondientes.

  5. Ejemplos:

Convertir un fichero de  ISO-8859-1 a UTF8

iconv --from-code=ISO-8859-1 --to-code=UTF-8 iso.txt > utf.txt

Convertir un fichero de ISO-8859-15 a UTF8

iconv --from-code=ISO-8859-15 --to-code=UTF-8 iso.txt > utf.txt

Gracias Juan ;)

Entradas relacionadas

Etiquetas: ,


mar 25 2010

Comandos en linux para buscar ficheros y carpetas

Category: LinuxDavid González @ 23:50

Vamos a ver algunos de los comandos que nos pueden resultar útiles cuando queremos buscar un archivo y/o carpetas en linux, desde consola.

  • locate
locate archivo.php

Este comando buscar en una “especie de base de datos” donde tiene la ruta de los fichero y así resulta mucho más rápido encontrar los ficheros o carpetas que si se tiene que recorrer toda la estructura de directorios.

Hay que tener en cuenta que la “base de datos” del locate puede estar obsoleta. Para actualizarla debemos usar este comando (lo pondré en segundo plano con “&” porque le puede costar en ejecutarse).

updatedb &
  • find

El comando find sirve para buscar ficheros y directorios pero es muy complejo y tiene muchas opciones, de las cuales sólo explicare algunas.

La ruta de acceso por defecto es el directorio actual (representado con un “. “)  y la expresión por defecto es -print. A la hora de buscar, puedes especificar muchos parámetros:

  1. el nombre (-name xxx)
  2. find . -name tureceta*
  3. Si es un archivo o carpeta (-type f -type d)
  4. find . -type f -name tureceta*
    find . -type d -name tureceta*
  5. Los permisos que tiene (-perm nnn)
  6. find . -type d -perm 777
  7. El usuario al que pertenece (-user usuario1)
  8. find . -type f -user usuario1
  9. El grupo al que pertenece (-group grupo1)
  10. find . -type f -group grupo1
  11. Si el fichero está vacio (-empty)
  12. find . -type f -empty
  13. El tamaño (-size n[cwbkMG]) siendo
    ‘b’    para bloques de 512-byte (este es el de por defecto)
    ‘c’    para bytes
    ‘w’   para two-byte words
    ‘k’    para Kilobytes (1024 bytes)
    ‘M’   para Megabytes (1048576 bytes)
    ‘G’    para Gigabytes (1073741824 bytes)

    find . -size 21k
  14. Modificados los datos en las últimas X*24h (- dtime n)
  15. find . -tipe f -dtime 2  (en las últimas 48h = 2*24)
  16. Accedidos en las últimas X*24h (- atime n)
  17. find . -tipe f -atime 2  (en las últimas 48h = 2*24)

Recordar que con la ayuda y con el man del comando tendréis toda la información

find --help
man find
  • whereis
  • Buscar la localización de un fichero binario, fuente o man

    [root@server ~]# whereis grep
    grep: /bin/grep /usr/share/man/man1/grep.1.gz /usr/share/man/man1p/grep.1p.gz
  • which
  • Buscar la localización de un fichero binario o ejecutable

    [root@sever ~]# which grep
    /bin/grep
    

Entradas relacionadas

Etiquetas: , , , ,


Página siguiente »