Comando WC : contar palabras, líneas y caracteres de archivos

El comando wc viene de "word count" y es un contador de lineas , palabras (letras separadas por espacios) y caracteres (bytes).
wc archivo.txt
584 14583 123787 archivo.txt

La salida muestra que el archivo tiene 584 lineas , 14583 palabras y 123787 caracteres.
Sus opciones en linea de comandos son:
-c cuenta los bytes
-m cuenta las palabras
-l cuenta las lineas

Por ejemplo, para ver si el numero de registros exportados ( select count(*) from tabla ) es identico al del archivo que hemos exportado contaremos las lineas de dicho archivo
wc - l archivo.txt
584 archivo.txt
Para contar el número de archivos en un directorio podemos usar:
ls -1 | wc -l

Gnome : Habilitar iconos en menus y botones

Podemos hace lo de dos formas, desde linea de comando ejecutando:
gconftool-2 --set /desktop/gnome/interface/buttons_have_icons --type bool true
gconftool-2 --set /desktop/gnome/interface/menus_have_icons --type bool true

O gráficamente, ejecutando el "Editor de Configuraciones de Gnome", dentro de Aplicaciones/Sistema.De forma equivalente podemos ejecutar el comando:
gconf-editor

Una vez en el editor buscamos en /desktop/gnome/interface/ y marcamos las opciones
menus_has_icons
buttons_have_icons

Una imagen del editor:



Java: rellenar cadena con espacios

A partir java 1.5 podemos usar la funcion String.format() que funciona de un modo similar al printf de C para rellenar con espacios una cadena.

Si queremos rellenar el String micadena de modo que tenga 10 espacios al final de la cadena usaremos la sentencia siguientes:
String micadena = "123";
String nuevacadena = String.format("%1$-10s",micadena);

de modo que genere la cadena "123 ".
Si usásemos la sentencia:
String nuevacadena = String.format("%1$#10s",micadena);

Los espacios se colocarán al principio, obtendremos " 123".

La función puede recibir varios argumentos o repetir el mismo varias veces:
String nuevacadena = String.format("%1$#10s ; %1$-10s, %2$ ",micadena, "hola");

obtenemos " 123 ; 123 , hola"

En cuanto a número podemos controlar la precisión decimal con el .numerodecimales. En el siguiente queremos 2 decimales, así que usamos .2 y la f para indicar que queremos un float:
double numero = 123.23212;
nuevacadena = String.format("número %1$.2f fin",numero);

Obtenemos 123.23

Si queremos 0 a la izquierda, tenemos que tener en cuenta que si especificamos 10 dígitos, hay que descontarle los dígitos decimales (en nuestro ejemplo 2) y la coma.
nuevacadena = String.format("número->%1$010.2f fin",numero);

En este caso le decimos que queremos 10 digitos, 2 decimales, la coma y 7 dígitos que iran a la parte entera. El número resultante es 0000123,23.

Si no especificamos el nº de decimales los 0 se pondrán a la derecha:
nuevacadena = String.format("número->%1$010f fin",numero);

RESULTADO: 123,232120.

Hay muchas más opciones, incluyendo el formato de fechas. Para más información es mejor ver la documentación oficial.

Para obtener más información sobre el formato:
http://download-llnw.oracle.com/javase/6/docs/api/java/util/Formatter.html#syntax

Tuneles SSH permanentes

En el siguiente post explicamos como crear túneles SSH fijos, sin tener que ejecutar una y otra vez el comando ssh -L. Para más información sobre túneles podemos ver el post ( SSH y VNC tunelizar conexiones).

La configuración se realizará en ~/.ssh/config para que sólo se aplique al usuario actual o bien en /etc/ssh/sshd_config si queremos que dicho túnel sea compartido por todos los usuarios de nuestra maquina.

Al igual que hicimo sen el post original queremos conectar nuestra maquina-cliente a un servidor VNC (servidorremoto), y para ello queremos hacerlo a través de SSH (ssh port forwarding). En lugar de crear el túnel usando la sentencia:
ssh -L 65535:localhost:5900 dieguz2@servidorremoto

Crearemos un tunel fijo editanto el archivo ~/.ssh/config (el túnel sólo estará disponible para nuestro usuario). Añadiendo la linea:
LocalForward 65535 dieguz@servidorremoto:5901

Reiniciamos el servidor ssh, para que los cambios sean efectivos:
sudo rcsshd restart

Y deberiamos ver como nuestra máquina escucha el puerto 65535
netstat -atupn | grep 65535

Para conectar con la maquina VNC:
vncviewer localhost::65535

Fuente:
http://en.opensuse.org/SDB:OpenSSH_tunnels

SSH y VNC : tunelizar conexiones

Vamos a usar tuneles SSH para conectar a un servidor VNC remoto.


Presupongo que ya hay un servidor SSH y un servidor VNC en el servidor. El nombre de esta maquina es "servidorremoto", con ip 192.168.1.2 (una máquina en nuestra misma lan)

En el Servidor:
1) Nos aseguramos que en el archivo /etc/ssh/sshd_config tenemos la opción
X11Forwarding yes
2) Suponemos que el servidor VNC está escuchando la pantalla :1, que suele ser 5901 .Para arrancarlo
vncserver :1

3) Suponemos que tenemos ejecutandose el servidor ssh en el servidor:
/etc/init.d/sshd start


En el cliente:

1) Creamos un tunel local Ejecutamos el comando:
ssh -L puertolocal:localhost:puertoremoto
servidorvnc. En nuestro caso podríamos hacer lo siguiente:
ssh -L 65535:localhost:5901 dieguz2@servidorremoto
El primer puerto 65535 es puerto local (en nuestra maquina cliente), el 5901 es el puerto remoto, el del servidor al que nos queremos conectar. Hemos especificado a continuación el usuario (si lo necesitamos) y el servidor (nombre o dirección ip)

Con este comando estamos creando un túnel en nuestra máquina local, de modo que cualquier programa que se conectará a nuestro puerto local 65535 es tunelizado al puerto ssh (el puerto 22) del servidor remoto, el servidor ssh en el remoto mandara la entrada al puerto 5901.

2) Conectar con el cliente VNC. Usamos el comando:
vncviewer localhost::65535
Es decir nos conectamos a nosotros mismos (localhost). Pero como como hemos hecho un túnel en el paso anterior lo que mandemos al puerto local 65535 de nuestra máquina local se estará mandando al puerto 5901 del servidor con el vnc

Esta técnica de tunelización se puede aplicar a otros muchos puertos: ftp, smtp, pop3, http .... En todos los casos usamos un puerto local para conectarnos al puerto de un servidor remoto.

SEGURIDAD

Deberíamos definir reglas en el cortafuegos para lo siguiente:

a) En el cliente no permitir conexiones al puerto 65535 que no sean locales. Cerrar puerto 65535 en el cliente
b) Abrir el puerto 22 en el servidor para permitir conexiones SSH. Abrir el 22 en el servidor
c) En el servidor asegurarnos que el puerto 5901 esta CERRADO para conexiones externas. Dado que las conexiones se hacen a través del puerto 22 en el servidor, y el acceso al puerto 5901 es local (del servidor al servidor) debemos . Cerrar el 5901 en el cortafuegos:

Eliminar directorios .svn de forma recursiva

Para eliminar recursivamente los directorios .svn en Linux, podemos usar este comando:
rm -rf `find . -type d -name .svn`
De este modo no se dectectaran como directorio tipo SVN

Quakelive y Opensuse 11.3 : gráficos corruptos

Al ejecutar quakelive , en la pantalla de carga aparecen una letras borrosas e ilegibles. Al parecer se debe a que opensuse ya usa la libreria libpng14 y esto da problemas con quake live que necesita la 12.

Tenemos que forzar la carga de firefox con libpng12. La opcíon más rapida es editar el archivo /usr/bin/firefox y añadir al comienzo del mismo la siguiente linea:
LD_PRELOAD="/usr/lib/libpng12.so" /usr/bin/ff $*
Con esto solucionamos los problemas con los gráficos.

Visto en:
http://www.quakelive.com/forum/showthread.php?t=43859&page=6

Pure-ftp: usar sólo usuarios virtuales

Pure-ftpd es un servidor ftp que viene en distribuciones como opensuse ( y la enterpise). Con los siguientes pasos vamos a permitir el uso únicamente de usuarios virtuales ftp.

Los usuarios virtuales ,son usuarios no tienen cuenta real en el servidor ( no tienen entrada en passwd) lo que añade más seguridad a nuestro servidor, si sólo queremos habilitar el ftp y no que tengan shell.Como extra con estos usuarios pueden compartir el mismo "home" de ftp.

Como caso extra vamos a deshabilitar el ftp para usuarios del servidor, de modo que sólo los usuarios virtuales puedan realizar ftp. Todos los pasos siguientes los hacemos como root.

Suponemos que el servidor ya lo tenemos instalado y el puerto abierto (por defecto el 21) en el cortafuegos.

1- Creamos un grupo (grupoftp) y un usuario (usuarioftp) restringido en el sistema (sin shell y sin crear los archivos de home) que tenga como home (podríamos ponerle un home falso)
groupadd grupoftp
useradd -s /bin/false -G grupoftp usuarioftp -d /ftp -M

Descripcion:
- shell (-s): /bin/false. Si usasemos por ejemplo /sbin/nologin no podrá loguear ni con usuarios virtuales
- Grupo(-G): grupoftp
- Directorio del home (-d) : /ftp . También podemos poner un home no existente,, pero he apuntado al directorio donde permitiremos que se almacenen los archivos del ftp
- Opción -M indicamos que no cree el home ni sus archivos asociados (.profile, bash, public_html ...)

2- Creamos el directorio (si no existe) y le asignamos los permisos adecuados:
mkdir /ftp
chown -R usuarioftp.grupoftp /ftp

3- Creamos uno o varios usuarios virtuales de ftp, les asignamos password (nos lo pide alcrearlos) y ejecutamos mkdb para almacenar los cambios y generar el archivo pureftpd.pdb
pure-pw useradd usuario1 -u usuarioftp -g grupoftp -d /ftp
pure-pw useradd usuario2 -u usuarioftp -g grupoftp -d /ftp
pure-pw useradd usuario3 -u usuarioftp -g grupoftp -d /ftp
pure-pw mkdb
Para borrarlos (si lo necesitamos) usaremos los comandos:
pure-pw userdell usuario3
pure-pw mkdb

4- Habilitamos la autenticación de usuarios virtuales. Editamos el archivo /etc/pure-ftpd/pure-ftpd.conf . Descomentamos la linea:
PureDB /etc/pure-ftpd/pureftpd.pdb

Tras estos pasos deberíamos poder conectarnos a nuestro ftp
ftp usuario1@localhost

5- Como paso adicional vamos a prohibir que cualquiera de todos los usuarios de nuestro sistema se puedan conectar por ftp. Vamos a prohibir la autenticacion mendiante PAM, por lo que no podrán loguearse. Volvemos a editar el archivo /etc/pure-ftpd/pure-ftpd.conf . Comentamos la linea:
#PAMAuthentication yes

Si solo queremos que unos determinados usuarios no puedan conectarse por ftp y el resto si dejaremos descomentada la autenticación por pam (es decir permitimos la autenticacion por pam). Si miramos el archivo /etc/pam.d/pure-ftpd veremos que hay una lista de usuarios a los que no se les permite la conexion por ftp en el archivo /etc/ftpusers . Los usuarios del sistema a los que no queramos permitirle el acceso los añadiremos a este último archivo

Por último algunas opciones en el archivo /etc/pure-ftpd/pure-ftpd.conf:
ChrootEveryone YES
# para hacer chroot de los usuarios y que no puedan salir del home
Bind 127.0.0.1, 3021
# para cambiar el puerto por defecto a otro (en este ejemplo al 3021 )

Apache: quitar el server signature ( firma)

Para elimiar el server signature en Suse editamos el archivo /etc/sysconfig/apache2 y cambiamos dos variables a los valores siguientes:
APACHE_SERVERTOKENS="Prod"
APACHE_SERVERSIGNATURE="off"

De este modo en las páginas (por ejemplo las 403 cuando no encuentra un archivo html) aparecerá en la parte inferior :
Server: Apache

Y no una descripcion de la versión del servidor web o del sistema operativo del servidor.Cuanto menos información se proporciona a un posible atacante mejor.

Al realizar estos cambios en sysconfig y al reiniciar el server ( /etc/init.d/apache2 restart ) los cambios se reflejarán en /etc/apache2/sysconfig.d/global.conf

Para otros valores :
http://httpd.apache.org/docs/2.0/mod/core.html#servertokens

Conectar a Terminal Services desde linux

Para poder conectar desde linux al Escritorio remoto de un windows server ( u otra versión de windows) usaremos el programa rdesktop que viene incluido en muchas distribuciones. Este programa actua como cliente de de Terminal Server y nos permite usar el protocolo RDP ( Remote Desktop Protocol ) .

Si lo queremos instalar en Opensuse ejecutaremos:
sudo zypper in rdesktop

La sintaxis más sencilla de conexión es ejecutar desde el terminal
rdesktop [maquina a conectar]
donde maquina a conectar puede ser una ip o un nombre de maquina
por ejemplo:
rdesktop mimaquina.com
Si necesitamos interfaz gráfica podemos usar e instalar tsclient, peor necesitamos tener instalado rdesktop para el acceso a Terminal Server:
sudo zypper in tsclient tsclient-lang
que nos permite manejar varias conexiones como se puede apreciar en la imagen (Terminal Service, VNC, SSH ...):


En la siguiente imagen algunas opciones de configuración de la parte de Terminal Server: