Monday, November 24, 2008

Conociendo fuser (que proceso usa un socket o un sistema de archivos)

fuser es una utilidad que sirve para averiguar que proceso esta usando un archivo, socket o sistema de archivos.

El otro dia necesite saber que proceso estaba abriendo el puerto 113, entonces ahi vino fuser al rescate:

fuser -n tcp 113

lo cual me devolvio

113/tcp: 2786

El numero 2786 que vemos en la salida indica (en mi caso) que el proceso con numero 2786 esta abriendo el puerto 113 tcp. Por supuesto se puede cambiar el "space" y en vez de usar tcp, usar udp si es necesario.

Otro uso muy util es para averiguar que procesos estan usando un filesystem, y se usa de la siguiente manera:

# fuser -m -u /dev/sda3
/dev/sda3: 1rce(root) 2rc(root) 3rc(root) 4rc(root) 5rc(root) 6rc(root) 9rc(root) 10rc(root) 103rc(root) 143rc(root) 144rc(root) 145rc(root) 146rc(root) 595rc(root)

y la lista continua pero la corto por una cuestion de simplicidad ...

Lo que podemos ver en la salida del comando es el numero de proceso seguido por algunas letras y entre parentesis el propietario o usuario del proceso. Las letras que se ven tienen el siguiente significado:

c = current directory / directorio actual
e = executable being run / ejecutable siendo corrido
f = open file / archivo abierto
F = open file for writing / archivo abierto para escritura
r = root directory / directorio de root
m = mmap'ed file or shared library / archivo de mmap o libreria compartida

Espero que les resulte util como a mi ;-)

Saludos !

Thursday, November 20, 2008

TIP: Conectar con SSH o SFTP en otro puerto que no sea el 22

Supongamos que deseamos correr el daemon sshd en otro puerto que no sea el default (o sea, el 22) para evitar la mayoria de los escaneos por bots, e intentos de conexion por diccionario, u otro motivo si vamos al caso.

Modificamos el /etc/ssh/sshd_config en la linea de Port = 22 y le asignamos el numero de puerto que deseemos:

Port = 5000

Reiniciamos ssh con:

/etc/init.d/ssh restart

Y luego desde algun cliente podemos conectar, suponiendo que la IP de esa maquina es 192.168.1.1 al puerto 5000 de la siguiente forma:

sftp "-oPort=5000" 192.168.1.1
ssh "-oPort=5000" 192.168.1.1

Saludos !

Uso de la RAM para guardar datos con RAMFS o TMPFS

Hace algun tiempo se me ocurrio la idea de que seria util almacenar ciertos datos en la RAM debido a su velocidad de escritura, asi que me puse a investigar y encontre dos sistemas para hacerlo, uno RAMFS y el otro TMPFS.

Como montar ambos ? aqui va para los impacientes nuevamente:

mkdir -p /mnt/tmp
mount -t tmpfs -o size=10m tmpfs /mnt/tmp

o sino para ramfs, de la siguiente forma:

mkdir -p /mnt/ram
mount -t ramfs -o size=10m ramfs /mnt/ram

Con ambos comandos disponemos de 10 MB en RAM para escribir, pero con las siguientes diferencias:

- RAMFS crece dinamicamente, asi que si tenemos 1 GB de RAM y le seguimos tirando datos, ocupara toda la memoria e incluso ocupara SWAP (peligroso para mi gusto).

- TMPFS no crece dinamicamente, asi que si lo usamos como en el ejemplo, nunca nos iremos del limite de 10 MB, pero logicamente obtendremos los mismos errores al quedarnos sin espacio que con una particion llena en disco. No usa SWAP, por ende es el mas seguro de los dos.

Logicamente, podemos montar una particion con cualquiera de los dos sistemas al inicio en /etc/fstab como cualquier otro sistema de archivos.

Y por ultimo, una obviedad: al ser ambos sistemas de archivos alojados en la RAM, al desmontarlos o al reiniciar el equipo perdemos los datos, asi que hay que copiar los datos a algun otro lugar antes de desmontar o reiniciar.

El uso personal que le doy a todo esto es para almacenar las sesiones de php en un directorio especial, en el php.ini se puede cambiar con la directiva:

session.save_path = "/tmp/ramdisk"

Eso es todo amigos !

Editor Vim (explicación sencilla)

Increíblemente, después de años de usar linux para distintas cosas, recién ahora me pongo a ver como usar más o menos el famoso editor Vim.

El editor consta de 2 modos: Inserción y Comando

Para entrar en el modo Inserción basta con presionar la tecla "Insert" en nuestro teclado, y abajo a la izquierda vim nos avisa con "-- INSERT --" o si presionamos dos veces "Insert" con "-- REPLACE --" (obviamente con este último modo reemplazamos el texto).

Para salir del modo Inserción presionamos la tecla "Esc".

Cabe aclarar que vim se inicia en modo comando.

Los comandos que aprendi hasta el momento (los que me sirven a mi por lo menos) son los siguientes (nótese la diferencia entre mayúsculas y minúsculas):

h: mueve el cursor hacia la izquierda
j: mueve el cursor hacia abajo
k: mueve el cursor hacia arriba
l: mueve el cursor hacia la derecha

$: mueve el cursor al final de la linea
0: mueve el cursor al principio de la linea

v: marca una selección de texto
CTRL+v: marca una selección de texto libre (modo columna, similar a UltraEdit)
y: copia el texto seleccionado
x: corta el texto seleccionado
p: pega el texto después del cursor
P: pega el texto antes del cursor

u: deshace los cambios
U: deshace los cambios pero solo en la línea actual
CTRL+r: rehace los cambios

Para borrar un número de lineas, se puede presionar "d" mas el nro de lineas que deseamos borrar (ej: 3) y luego "d" nuevamente.

Tambien en el modo comando, al ingresar "dos puntos" o ":" podemos tipear diversos comandos, como pueden ser:

:q (salir)
:q! (salir sin guardar cambios)
:w (guardar archivo)
:wq (salir guardando el archivo)
:e nombre_archivo (abrir otro archivo en la misma consola)
:bn (proximo buffer/archivo, usado para moverse entre archivos si tenemos mas de uno abierto)
:bp (igual que :bn pero para ir al buffer previo)

Y para mi asombro (gracias Carlitos), vim tiene tabs. Para usar este modo debemos invocar vim de la siguiente manera:

vim -p archivo1.txt archivo2.txt archivo3.txt

Luego nos movemos entre tabs con los comandos :tabn y :tabp (para next/siguiente o previous/anterior respectivamente)

Tambien una vez dentro de vim se puede usar el comando :tabnew nombrearchivo para abrir un nuevo tab con otro archivo.

Por supuesto existen muchos mas comandos y tips para vim, estos son simplemente los comandos que permiten un uso básico (y que como ya dije, me sirven a mi).


Espero que les sea de utilidad

Saludos !

Problema con Samba y Windows Vista (NTLMv2)

Sin demasiada introducción (los impacientes, contentos), hay que cambiar estas líneas por las siguientes:

[global]
valid users = %S

por simplemente

[global]
users = %S

Además en los shares, lo mismo:

[www]
comment = sites
path = /www
users = %S # esta linea estaba con "valid users" antes
public = no
writable = yes
printable = no
create mask = 0700


Además es necesario ajustar en las máquinas Vista lo siguiente:

1) Abrir la consola "Local Security Policies" ejecutando el comando "secpol.msc" (solo disponibles en la version Bussiness y Ultimate).
2) Ir a Local Policies –> Security Options –> Network Security: LAN Manager authentication level.
3) Cambiar el valor de "NTLMv2 responses only" a "LM and NTLM – use NTLMV2 session security if negotiated".

Si tienen la version Home de Vista (que no tiene la consola secpol.msc como dije mas arriba) se puede cambiar el valor directamente desde el registro ejecutando el comando "regedit" y ajustando el siguiente valor de 3 a 1:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\LMCompatibilityLevel

Como siempre, mucho cuidado al editar el registro a mano.

Esta configuración me permitió tener un mix de clientes con XP y Vista y seguir usando el sistema de autenticación con usuarios simples


PD: Disculpen, pero tengo Windows en ingles :-/

Followers

About me

Santa Fe, Argentina
Programador Web, PHP, MySQL, JQuery, Administrador Linux. LAMP, Lighttpd, Nginx.