Mostrando entradas con la etiqueta linux. Mostrar todas las entradas
Mostrando entradas con la etiqueta linux. Mostrar todas las entradas

/bin/bash vs. /usr/bin/env bash

Cuando estamos programando un script en bash siempre solemos inicializarlo con la línea que indica que es eso, un script en bash. Esta línea a mayores nos indica el path del intérprete. Por norma general, suele ser siempre /bin/bash/usr/bin/bash. Este "o" es el que puede causarnos algunos problemas. Para evitarlo, podemos emplear el siguiente truco: llamar a la función de enviroment. Es decir, pasamos de comenzar el script típico,
#!/bin/bash

# Código bash a ejecutar...
A usar las variables de entorno, para que sea ésta la que localice el path exacto donde está bash.
#!/usr/bin/env bash

# Código bash a ejecutar...
Con esto lo que conseguimos es hacer el script más flexible y adaptable a otros entornos donde quizás bash no esté en la misma ruta.
Leer más

Backups incrementales con tar

Sí, es cierto, hacía tiempo que no escribía nada en el blog y eso no puede ser. Después de un tiempo de parón, espero volver a ser más constante en las entradas.
En este caso, vamos a ver un método de hacer un backup incremental, pero sin ningún software adicional, sino empleando el comando tar.
La importancia de realizar backups no hace falta que la comente, pues es un tema muy sabido por todos. El método típico de hacer backup con tar, es comprimir todos los ficheros que así desees en un contenedor y darle un nombre, por ejemplo, una fecha. Si todos los finales de día lo hacemos, tenemos un backup bastante consistente y ante posibles fallos. El único problema, que ocupará mucho espacio! Para resolver este problema está el backup incremental y tar, como no podía ser de otra manera, también lo soporta. A continuación, dejo un ejemplo de cómo se debería de emplear tar para la realización de un backup incremental.
  • Crear el entorno de pruebas
    shell> mkdir -p test/aa test/bb test/cc
    shell> touch test/aa/a test/bb/b test/cc/c
    
  • Realizar el primer backup
    Importante aquí, la opción que le pasamos --listed-incremental file.
    shell> tar --listed-incremental test.metadata \
               -czf test.tar.gz test
    
  • Borrar y cambiar ficheros
    shell> rm test/aa/a
    shell> touch test/aa/aa
    shell> echo "hola" > test/bb/b
    
  • Volver a lanzar el backup incremental
    Cada incremental lo vamos añadiendo a un nuevo contenedor.
    shell> tar --listed-incremental test.metadata \
               -czf test.inc1.tar.gz test
    
  • Restaurar ficheros
    Para ello, necesitamos el fichero de backup completo y también los incrementales
    shell> mkdir restore
    shell> tar xzf test.tar.gz -C restore
    shell> tar --incremental \
               -xzf test.inc1.tar.gz -C restore
    
Como podemos apreciar que ha añadido el fichero creado pero también borrado el fichero eliminado en el momento de hacer el incremental. Espero que os haya resultado útil.
Como ya sabréis, realizar backups al mismo disco no es una buena idea, por lo que si no lo conoces, te recomiendo la lectura del tag bacula, que quizás te ayude a tener un backup más seguro.
Leer más

Grabación de sesiones de consola

No fui el primero, ni seré el último en preguntarse cómo grabar todo lo que estás haciendo en la consola de tu equipo Linux, par a continuación poder dejarlo a libre disposición.
hasta que conocí el software del que os voy a hablar hoy, la forma que tenía de hacerlo no era más que la de grabar toda la pantalla (o una región) y dejar luego el vídeo, por ejemplo en Youtube.
Pues bien, ahora ya no podrás decir que no conoces ttyrec, con el que podrás grabar todo el comportamiento de tu consola de una forma más limpia y rápida.

Instalación

ttyrec está disponible en prácticamente todos los repositorios oficiales de las principales distribuciones, así que para instalarlo,
shell> apt-get install ttyrec

Grabar

Comenzar una nueva sesión o grabación es muy sencillo. Únicamente tendremos que saber el nombre que le vamos a querer dar y a continuación,
shell> ttyrec -a git_usage.tty
Para pararla, emplearemos Control + c.

Reproducir

Una vez tengamos la grabación finalizada, tendremos un fichero que podemos reproducir las veces que queramos, únicamente tendremos que tener instalado ttyplay, que viene con el paquete ttyrec.
shell> ttyplay git_usage.tty
Por suerte, este tipo de ficheros, al almacenar texto plano ocupan muy poco, por lo que pasárselos a alguien es sencillo y no debería de darnos problema. De todas formas existen webs, como playterm.org que nos permiten subir el fichero e incrustarlo en una web o dejarlo público.

Referencias

Leer más

Link vmlinuz.old is damaged

Pues bien, hoy es uno de esos días en los que te pones a actualizar un equipo y te das cuenta de que queda poco espacio en la partición raíz. Investigando un poco más, observas que hay muchas versiones del kernel instaladas, pero que en realidad no se están empleando para nada, por lo que decides hacer limpieza. Concretamente, éste es el caso,

shell> dpkg -l |grep linux-image
ii linux-image-3.2.0-29-generic 3.2.0-29.46  Linux kernel...
ii linux-image-3.2.0-60-generic 3.2.0-60.91  Linux kernel...
ii linux-image-3.2.0-68-generic 3.2.0-68.102 Linux kernel...
ii linux-image-3.2.0-69-generic 3.2.0-69.103 Linux kernel...
ii linux-image-3.2.0-70-generic 3.2.0-70.105 Linux kernel...
ii linux-image-3.2.0-74-generic 3.2.0-74.109 Linux kernel...
ii linux-image-3.2.0-75-generic 3.2.0-75.110 Linux kernel...
ii linux-image-3.2.0-77-generic 3.2.0-77.114 Linux kernel...
ii linux-image-3.2.0-79-generic 3.2.0-79.115 Linux kernel...
ii linux-image-generic          3.2.0.79.93  Generic Linux
Como veis, hay algunas versiones del kernel instaladas, y que en realidad no son necesarias, así que vamos a realizar una purga de aquellas que no nos interesen. Lo primero es saber qué versión del mismo estamos usando, no vayamos a desinstalar el kernel que estamos empleando. Para ello,
shell> uname -r
3.2.0-75-generic
No está cargada la última versión y siendo un equipo de producción, reiniciar "por que sí", tampoco es posible, así que vamos a purgar aquellos que no nos interesan, es decir, todos menos la última versión (3.2.0-79) y la que estamos usando (3.2.0-75).
shell> apt-get remove --purge linux-image-3.2.0-29-generic
shell> apt-get remove --purge linux-image-3.2.0-60-generic
shell> apt-get remove --purge linux-image-3.2.0-68-generic
shell> apt-get remove --purge linux-image-3.2.0-69-generic
shell> apt-get remove --purge linux-image-3.2.0-70-generic
shell> apt-get remove --purge linux-image-3.2.0-74-generic
shell> apt-get remove --purge linux-image-3.2.0-77-generic
Y tras ello,
shell> apt-get autoremove --purge
Durante la desinstalación del kernel 3.2.0-77 ha aparecido un curioso error,
shell> apt-get remove --purge linux-image-3.2.0-77-generic
Desinstalando linux-image-3.2.0-77-generic ...
...
The link /vmlinuz.old is a damaged link
Removing symbolic link vmlinuz.old 
 you may need to re-run your boot loader[grub]
Purgando ficheros de configuración de linux-image-3.2.0-77...
...
Donde se nos está indicando que el link al fichero /vmlinuz.old está dañado y que no va a funcionar. Para corregirlo, simplemente debemos de recargar nuestro gestor de carga (en mi caso grub), tal como sigue.
shell> update-grub
Y problema solventado.
Leer más

Etiquetar particiones

Si bien el otro día hablamos de cómo manejar y cambiar el UUID de una partición, hoy vamos a ver cómo emplear las etiquetas (labels) para poder administrar nuestros puntos de montaje y que así tengan más significado. La idea es pasar de un /dev/sda1 a un /dev/disk/by-label/raiz. Algo más legible y entendible por cualquier persona.
Para hacerlo, lo primero que debemos es comprobar si nuestro disco tiene alguna etiqueta. Para ello,
shell> lsblk -f
NAME      FSTYPE      LABEL      MOUNTPOINT
sda                                         
├─sda1    ext4                   /boot
├─sda2    ext4                   /
└─sda3    ext4                                  
Como vemos, no hay ninguna etiqueta de nombre para las particiones. La solución está en el empleo del comando e2label, que sirve precisamente para asignarle etiquetas a las particiones. Procederemos por lo tanto como sigue,
shell> e2label /dev/sda1 boot
shell> e2label /dev/sda2 raiz
shell> e2label /dev/sda3 data
Puedes aplicar etiquetas únicamente a aquellas particiones que te interese, a mi me interesa etiquetarlas las 3 que voy a usar. Si ahora ejecutamos nuevamente el primer comando (lsblk),
shell> lsblk -f
NAME      FSTYPE      LABEL      MOUNTPOINT
sda                 
├─sda1    ext4        boot       /boot
├─sda2    ext4        raiz       /
└─sda3    ext4        data
A partir de este momento, bajo la carpeta /dev/disk/by-label existe los links a los disco y que se pueden usar, por ejemplo, para montar una partición.
shell> mount /dev/disk/by-label/data /mnt
Quizás acordarse de la nueva ruta para realizar los montajes de disco sea más complejo, pero desde luego, para saber qué es lo que se está haciendo, mucho más simple.

Referencias

Leer más

Cambiar UUID del disco

Hace ya un tiempo hablamos en este blog acerca del uso de los UUIDs y los discos. El que no sepa de qué estoy hablando, puede leer la entrada Obtener el UUID del disco. En él se indica de forma clara cómo obtener el identificador universal del disco para posteriormente trabajar con él, por ejemplo en fstab.

Cambiando UUID

Hoy vamos a dar un paso más allá y ver cómo cambiar dicho UUID. A priori, el algoritmo que se emplea para la creación de los UUID no permite que este identificador esté repetido en un mismo equipo, aunque como todo, siempre puede haber excepciones. En caso de que esto os haya pasado, sabréis que trabajar con UUIDs en un sistema con dos repetidos es imposible. En cada montaje del sistema, aparece un disco y otro y hay muchos fallos. Pues bien, la solución en esos casos no es otra que la de cambiar dicho UUID.
Con el comando blkid se puede obtener el listado de los IDs de las particiones del disco,
shell> blkid
/dev/sda1: UUID="e12c98df-7c8e-4f50-be39-e208597f71a7"
/dev/sda2: UUID="2bf49a55-f967-4fec-9127-9d049a5e7091"
/dev/sda3: UUID="a6a1fc9a-48e5-4cff-82b9-04f0afa925e3"
y también está el comando uuidgen, que permite precisamente crear "el churro" alfanumérico que se emplea como identificado.
shell> uuidgen
502eb30f-9c0c-4308-80d7-e1061ba39e4f
Para cambiar el ID de una partición debemos de emplear el comando tune2fs y pasarle el nuevo UUID que nos interese, es decir, uno aleatorio. Por lo tanto,
shell> tune2fs -U `uuidgen` /dev/sda3
tune2fs 1.42.9 (4-Feb-2014)
Y vemos ahora que los cambios han surtido el efecto deseado.
shell> blkid
/dev/sda1: UUID="e12c98df-7c8e-4f50-be39-e208597f71a7"
/dev/sda2: UUID="2bf49a55-f967-4fec-9127-9d049a5e7091"
/dev/sda3: UUID="c6dfe0b1-ceec-477b-a764-9db98439c5f9"

Referencias


Nota: La partición afectada que vayamos a cambiar debe de estar desmontada.
Leer más

Arrancar ISO desde grub

Una de las muchas sorpresas que depara GNU/Linux es la versatilidad que este ofrece para hacer cosas. Hoy vamos a ver una que nos puede ayudar e incluso sacar de más de un apuro y que es cómo arrancar una ISO desde Grub.
Por norma general, cuando queremos arrancar una ISO, debemos de grabarla en un CD o en un pendrive para poder iniciar con ella el equipo y así verla y probarla. Pues bien, este tipo de acciones se pueden terminar con la posibilidad de arrancar una ISO desde el propio grub. Este método no servirá, lógicamente, para una reinstalación completa de tu sistema, pero sí te brindará la posibilidad de reiniciar tu equipo y probar una ISO de cualquier otra distribución o arrancar algún CD de utilidades. Vamos ya, por lo tanto, a preparar nuestro entorno.

Preparación del sistema

Vamos a ver aquí los pasos que debemos de hacer antes de nada. Lo primero será obtener la ISO que queramos tener en el arranque. Por ejemplo, una Ubuntu, una copia de BackTrack o el mismo Gparted. Para ello, debemos de ir a la web oficial y descargarla. Este paso no tiene nada que ver con lo que vamos a comentar, pero sí es necesario para luego.
Una vez que tengamos la ISO, deberemos de colocarla en una ruta específica. Puesto que estamos hablando de ISO de arranque, a mi me gusta colocarlas en /iso, por lo tanto,
shell> mkdir /iso
shell> mv gparted-live-0.20.0-2-i486.iso /iso
shell> mv ubuntu-14.04.1-desktop-amd64.iso /iso
A continuación, vamos a hacer que el grub se muestre cuando arranque, pues en las últimas versiones arranca con un retraso de 0 segundos, lo que hace que se complique la elección del sistema operativo a arrancar. Si no tienes este problema, ignora este paso, sino, edita el fichero /etc/default/grub y déjalo como sigue.
...
#GRUB_HIDDEN_TIMEOUT=0
...
Y ya para finalizar el apartado de cosas que debemos de saber, necesitamos averiguar sobre qué disco y que partición está nuestra nueva carpeta (/iso). Si tienes una instalación de las típicas, se supone que estará en el disco 0 (/dev/hda o /dev/sda) y la partición 1, por lo tanto (hd0, 1). Esto es importante tenerlo identificado. Para asegurarte, compruébalo con fdisk y con mount.
shell> fdisk -l
Dispositivo Inicio Comienzo    Fin    Bloques  Id  Sistema
/dev/sda1   *      2048   29296639   14647296  83  Linux
/dev/sda2      29296640   33202175    1952768  82  Linux swap
/dev/sda3      33202176  234440703  100619264  8e  Linux LVM
shell> mount
/dev/sda1 on / type ext4 (rw,errors=remount-ro)
...

Edición del grub

La parte común ya está. Ahora nos queda añadir las entradas necesarias a nuestro grub. Se recomienda no añadirlas directamente en /boot/grub/grub.cfg, puesto que en cada actualización este fichero se regenera y por lo tanto los cambios se pierden. Lo mejor es usar el fichero /etc/grub.d/40_custom, que es precisamente para estos casos, añadir entradas manualmente.

Ubuntu 64

menuentry 'Ubuntu 14.04 Live (64 bits)' {
   set isofile="/iso/ubuntu-14.04.1-desktop-amd64.iso"
   loopback loop (hd0,5)$isofile
   linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
   initrd (loop)/casper/initrd.lz
}

Ubuntu 32

menuentry 'Ubuntu 14.04 Live (32 bits)' {
   set isofile="/iso/ubuntu-14.04.1-desktop-i386.iso"
   loopback loop (hd0,5)$isofile
   linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
   initrd (loop)/casper/initrd.lz
}

Gparted

menuentry 'Gparted' {
   set isofile="/iso/gparted-live-0.20.0-2-i486.iso"
   set root=(hd0,5)
   loopback loop (hd0,5)$isofile
   linux (loop)/live/vmlinuz boot=live config union=aufs noswap noprompt ip=frommedia toram=filesystem.squashfs findiso=$isofile
   initrd (loop)/live/initrd.img
}
Cómo veis, cada ISO a arrancar tiene unas opciones diferentes y estas debes de averiguarlas antes de poder iniciarla. Por norma general, está documentado el proceso en la web principal.
Lo único que nos queda ahora por realizar es una actualización del grub.
shell> update-grub2

Arrancando desde la ISO

Llegados a este punto, ya estamos listos para poder reiniciar nuestro sistema. Así que, cerramos la consola y todo lo que estemos haciendo y reiniciamos.
Os debería, tras el reinicio salir una pantalla similar a esta donde destaqué con letra más clara las dos ISOs que tendremos disponibles para iniciar.





Qué significa cada uno de los parámetros

  • menuentry
    Nombre que aparecerá como entrada del grub.
  • set isofile
    Define una variable, isofile, que contendrá la ruta absoluta de la imagen a iniciar.
  • set root
    Indica la partición raíz sobre la que está la imagen.
  • loopback
    Indica la ruta donde localizar la imagen en el disco. Es una composición de disco + variable isofile.
  • linux
    Kernel que se usará para arrancar y la localización del mismo. También se le pasan aquí las opciones de arranque.
  • initrd
    Indica la localización del fichero initrd, pero siempre dentro de la imagen.
Leer más

Limitando ancho de banda con wondershaper

Hace tiempo hablamos en este blog sobre trickle, una herramienta que servía para controlar el ancho de banda que se consume. O dicho de otra forma, limitar la velocidad de subida o descarga de un equipo.
Lo bueno de GNU/Linux es su heterogeneidad, y hoy voy a comentar sobre wondershaper, un pequeño script (si bash script) que sirve para lo mismo, limitar el ancho de banda. Internamente wondershaper emplea la herramienta tc, que se comunica directamente con el kernel para gestionar el tráfico de red. La idea de emplear este tipo de herramientas es poder priorizar el tráfico en una red de equipos, dejando máxima prioridad para conexiones SSH y navegación web, por ejemplo, y bajando prioridad a  las descargas. Esto justamente es lo que se consigue con herramientas de control de tráfico (tc).
wondershaper lo que hace es abstraer la complejidad de tc y dejar un simple script para controlar el límite de ancho de banda de entrada y salida a un equipo por una interfaz. Así que vamos a ver un poco esta herramienta.

Instalación

wondershaper está disponible desde los repositorios oficiales,
shell> apt-get install wondershaper

Uso

El uso básico, donde nos muestra si hay algo activo y qué hace es únicamente pasándole el interfaz de red a controlar.
shell> wondershaper eth0.3

Limitar ancho de banda

Para limitar el ancho de bando que un interfaz de red puede consumir,
shell> wondershaper eth0.3 40 10
Donde pasamos el interfaz a controlar, el velocidad de descarga (40 kbps) y la velocidad de subida (10 kbps).

Comprobar limitaciones activas

shell> wondershaper eth0.3
qdisc cbq 1: root refcnt 2 rate 10000Kbit (bounded,isolated) prio no-transmit
 Sent 2020 bytes 12 pkt (dropped 0, overlimits 4 requeues 0) 
 backlog 0b 3p requeues 0 
  borrowed 0 overactions 0 avgidle 12500 undertime 0
qdisc sfq 10: parent 1:10 limit 127p quantum 1514b depth 127 divisor 1024 perturb 10sec 
 Sent 1170 bytes 11 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 234b 3p requeues 0 
...

Borrar limitaciones

shell> wondershaper clear eth0.3
Wondershaper queues have been cleared.
Una herramienta en esencia sencilla, pero que simplifica la creación de limitaciones de forma muy eficaz.
Leer más

Recuperar contraseña de root

Aunque es una práctica que únicamente hay que llevar a cabo en casos extremos, hoy voy a explicar de forma sencilla cómo poder resetear la contraseña de root de prácticamente cualquier distribución GNU/Linux con tener únicamente acceso directo al equipo físico.
Lo primero es reiniciar la máquina y esperar a que salga el Grub. En cuanto lo tengamos delante, nos movemos para que no arranque con la opción por defecto, ya que vamos a querer introducirle una opción para que nos permita trabajar. Para hacerlo, únicamente debemos de presionar la tecla "e" sobre la línea del sistema que vayamos a arrancar. A continuación posicionarnos sobre la línea que pone algo referente al kernel y volver a presionar "e". Ahí ya nos dejará modificar la línea de arranque del sistema, con lo que podemos hacer cosas.

Lo primero es borrar las palabras quiet y splash (si aparecen) y añadir lo siguiente,
init=/bin/bash 
Quedando la línea como se muestra en la siguiente imagen, en capas los pasos que se han mencionado. Ahora ya estamos listos para arrancar el sistema, así que únicamente presionamos ENTER y a continuación "b".
Esto nos llevará a una shell básica del sistema GNU/Linux en la que tendremos a nuestra disposición pocos comandos, pero en realidad los necesarios. Si os dais cuenta, tenemos una shell como root, pero sin que nos haya pedido la contraseña, en un sistema de sólo lectura, eso sí.
Como bien hemos dicho, no hay posibilidad de escritura, así que vamos a conseguirla, para ello,
shell> mount -o remount,rw /
Nota: Si el sistema al que estáis accediendo tiene la carpeta /etc en una partición diferente a /, hay que efectuar la misma operación sobre /etc.

Ahora ya sólo nos queda cambiar la contraseña del usuario que nos interese, en este caso, root. Para ello, simplemente ejecutamos passwd y metemos la nueva contraseña. Contraseña que esta vez evitaremos olvidarnos.
Una vez finalizado todo el proceso, ejecutamos sync y tras ello reiniciamos la máquina. El comando reboot no está disponible, por lo que podemos hacerlo presionando Control + Alt + Supr.
Leer más

Búsqueda de archivos en GNU/Linux

Fijo que en muchas ocasiones te tocó buscar un archivo en un sistema GNU/Linux. Pues bien, hoy te dejo aquí una pequeña chuleta con los comandos que deberías saber, según velocidad y sensibilidad que desees para poder encontrarlos.
  • whereis
    El mejor buscando ejecutables dentro del sistema. No busca por nombre exacto, sino el comando o binario que le pasas, así como la documentación (páginas man), o el código fuente del mismo.
    shell> whereis ls
       ls: /bin/ls /usr/share/man/man1/ls.1.gz
    
  • type
    No es exactamente el buscador de comandos o ficheros, pero nos sirve, para entre otras cosas saber el comando que vamos a ejecutar, por ejemplo, si tenemos definido un alias para él.
    shell> type ls
       ls es un alias de `ls --color=auto'
    shell> type -a ls
       ls es un alias de `ls --color=auto'
       ls is /bin/ls
    
  • which
    Busca el binario dentro de la ruta del path. Si lo encuentra, devuelve la dirección completa.
    Aunque su utilidad puede estar en entredicho, puede sacarte de más de un apuro si tienes el mismo comando en diferentes localizaciones y no sabes cual ejecutar. Con él podrás pasar el path completo y ejecutar el que quieras.
    shell> which ls
       /bin/ls
    
  • locate
    Es una verdadera alternativa al último comando que veremos, el incombustible find, pero con la ventaja de que éste tiene previamente indexados los ficheros existentes, por lo que la búsqueda es mucho más rápida. Tras la instalación indexa los datos que hay, pero cada cierto tiempo es necesario realizar una actualización de su base de datos (comando updatedb) para que tenga indexados los nuevos ficheros.
    shell> locate fstab
       /etc/fstab
       /etc/fstab.d
       /lib/init/fstab
       /sbin/fstab-decode
       /usr/lib/udisks/udisks-helper-fstab-mounter
       /usr/share/doc/mount/examples/fstab
       /usr/share/doc/util-linux/examples/fstab.example2
       /usr/share/man/man5/fstab.5.gz
       /usr/share/man/man8/fstab-decode.8.gz
       /usr/share/vim/vim74/syntax/fstab.vim
    
  • find
    El mítico comando de búsqueda de Linux. Sobre él hay miles de páginas acerca de cómo se usa y todas las opciones que tiene. Realiza una búsqueda en todo el path pasado como parámetro y puede realizar filtros de casi todo tipo (permisos, propietarios, fechas, etc.). Saber usarlo cuesta, pero una vez aprendido compensa.
    shell> find /usr/share/doc/ -name fstab*
       /usr/share/doc/mount/examples/fstab
       /usr/share/doc/util-linux/examples/fstab.example2
    
Leer más

SSH terminal in web

Hoy os voy a mostrar una pequeña forma de tener accesible un servidor SSH desde un navegador. Supongo que a muchos de vosotros esto no os servirá de nada y a otras muchos les será de gran ayuda. Hay veces que tener una conexión segura SSH es más complicado, sin embargo, tener un servicio vía web que se encargue de ser servidor SSH, pues nos vendrá bien.
Por supuesto, lo que voy a contar ahora simplemente facilita la conexión a una máquina, pero para nada garantiza su seguridad. Así que un control de accesos y un extra de seguridad nunca está demás.

Instalación

Lo primero de todo es instalar el software necesario que vamos a emplear. En este caso usaremos shellinabox, que se define a si mismo como una línea de comandos encapsulada en código AJAX.
Puesto que está disponible desde los repositorios oficiales,
shell> apt-get install openssl shellinabox

Configuración de shellinabox

Una vez tenemos todo instalado, ya está el servicio prácticamente listo para arrancar. Lo único que nos queda pendiente es establecer el puerto por defecto en el que vamos a querer que se ejecute. En mi caso lo voy a poner en el 443 (https). Para ello, editamos el fichero de configuración, /etc/default/shellinabox y lo dejamos como sigue.
SHELLINABOX_DAEMON_START=1
SHELLINABOX_PORT=443
SHELLINABOX_ARGS="--no-beep"
Es decir, la configuración por defecto, únicamente cambiando el puerto de escucha.

Configuración avanzada

La configuración por defecto la verdad es que funciona perfectamente y nos permite ya de por sí abrir una consola en el equipo que está haciendo de servidor. Sin embargo, si nos interesa abrir una consola en otro equipo de la red local, también lo podemos hacer directamente empleando shellinabox. Un ejemplo de configuración para ello sería,
SHELLINABOX_PORT=443

# specify the IP address of a destination SSH server
SHELLINABOX_ARGS="--o-beep -s /:SSH:192.168.0.70"
En donde establecemos que se abra un túnel SSH hacia el servidor con IP 192.168.0.70.

Arrancando servicio

Una vez tengamos ya todo configurado simplemente tendremos que arrancar el servicio.
shell> /etc/init.d/shellinabox start
Y ya podremos conectarnos con un navegador al puerto descrito y tener nuestra shell en el equipo.
shellinabox example
shellinabox example

Certificado SSL

Por cierto, shellinabox trae por defecto un certificado autofirmado, pero lógicamente podemos crear nuestro propio certificado si así tenemos más confianza.
shell> cd /var/lib/shellinabox
shell> openssl genrsa -des3 -out server.key 1024
shell> openssl req -new -key server.key -out server.csr
shell> cp server.key server.key.org
shell> openssl rsa -in server.key.org -out server.key
shell> openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
shell> cat server.crt server.key > certificate.pem
Y con ello podemos conseguir, por ejemplo, que el certificado SSL que nos muestre sea de confianza para nuestro navegador, tras importar los certificados pertinentes, lógicamente.

Para más información acerca del servicio empleado o de cómo usarlo puedes ir a su página oficial o leer la página del manual en cuestión.
Leer más

Deshabilitar los USBs en Linux

No todos los ordenadores con GNU/Linux tienen por que ser para uso personal, sino que puede darse el caso de que tengas la suerte de trabajar con un equipo de empresa que tenga instalado GNU/Linux. Puesto que los datos suelen ser un tema muy importante, y cada vez más, muchas empresas optan por evitar la fuga de información a través de dispositivos USB. Así que, si eres el administrador de estos equipos, lee esta entrada entera, que te podrá ser útil.
La verdad es que es un truco muy sencillo, pero a la vez muy útil, y por supuesto, fácilmente implementable con Salt o Puppet. Deshabilitar los USBs de un equipo es tan sencillo como crear el fichero /etc/modprobe.d/no-usb con el siguiente contenido,
install usb-storage /bin/true
Y tras ello, reiniciar el equipo para que surjan efecto los cambios. Una vez lo hayas hecho, al conectar un UBS tu sistema no lo reconocerá y por lo tanto no se podrá usar.
En realidad lo que acabamos de hacer es forzar la 'no carga' del módulo de manejo de USBs por parte del kernel, con lo que los dispositivos no están habilitados. Esto lo puedes comprobar con un sencillo,
shell> lsmod | grep -i usb
Donde el módulo usb-storage no podrá salir.

Habilitarlo temporalmente

Por supuesto, si eres root y deseas usar el USB en un momento dado, lo puedes hacer recurriendo a la técnica de:
  1. Cargar el módulo
    shell> modprobe usb-storage
    
  2. Usar el USB
  3. Descargar el módulo nuevamente
    shell> modprobe -r usb-storage
    

Otra forma de deshabilitar el USB

Esta forma no es más sencilla de realizar, pero sí más simple de alterar por el usuario si lo sabe, pero aquí la dejo también. Consiste en alterar la línea del Grub que hace referencia a la carga del kernel y agregar el parámetro nousb. Con ello hará que no se carguen los módulos del USB.
kernel /vmlinuz-3.11.0-12-generic ro root=LABEL=/ console=tty0 nousb
Leer más

Empleando pagefile en GNu/Linux

Esta entrada va dedicado a toda aquella gente que viene de sistemas Windows, acostumbrada a tener un fichero de swap en disco y que lo desea seguir manteniendo en GNU/Linux.
Por defecto, cuando se instala un sistema Linux, siempre es aconsejable y muy recomendable crear un partición de tipo swap que el sistema manejará y empleará para dicha tarea de forma automática. Si tienes varias distribuciones instaladas en el mismo equipo, todas podrán compartir dicha partición, por lo que ahorrarás bastante espacio en disco.
Sin embargo, hay veces que puedes decidir no disponer de dicha partición. Por ejemplo, si tu equipo tiene mucha memoria RAM, más de 8Gb, es raro que termines usando la swap, por lo que podrás ahorrarte ese espacio de disco que nunca lo aprovecharás. Claro que siempre terminarás por hacer alguna tarea que requiera de swap, entonces en ese momento estás fastidiado y por suerte, gracias a dd, tendrás la solución al alcance del comando ;-)
La solución no es más que imitar lo que hace Windows con el fichero pagefile.sys, es decir, crear un fichero de tamaño limitado que se empleará dinámicamente de memoria swap. Para ello, y copiando el nombre empleado por Windows para dicho fichero, podemos hacer algo tal que así,
shell> dd if=/dev/zero of=/pagefile.sys bs=4k count=2048M
Con ello acabamos de crear sobre la partición raíz de nuestro sistema un fichero, pagefile.sys, de 2Gb de tamaño. A continuación tendremos que darle formato y emplearlo como memoria swap. Primeramente formateamos,
shell> mkswap /pagefile.sys
Y a continuación lo 'montamos' como memoria swap.
shell> swapon /pagefile.sys
Este sencillo truco lo tuve que usar un par de veces el mi portátil cuando comencé a darle mucha caña, tras seguir las recomendaciones de Optimización de Linux con discos SSD y la verdad es que me pareció muy interesante compartirlo con todos.
Leer más

Controlar actividad de usuarios en GNU/Linux

Una de las cosas más complejas a la hora de administrar un servidor compartido es controlar qué hace cada usuario. Es importante tener y poder saber qué hace cada usuario en su momento, no sin embargo verlo. Esta parte hay que dejarla clara: Poder saber no es lo mismo que saber. Cada usuario en su día a día de trabajo necesita hacer muchas cosas, y que seas root no te da derecho a "espiar" lo que hace cada usuario. Sin embargo, puede darse el caso de que pase algo en el sistema y quieras saber quién fue el responsable de tal fechoría. Para hacer este tipo de análisis, sí que se puedes emplear estas herramientas de auditaría.
Hoy vamos a hablar por lo tanto de acct, una utilidad para la contabilidad de procesos e inicios de sesión en GNU/Linux. Si la tienes que emplear, da mucho juego e información, así que no está demás tenerla como proceso en el sistema. No consume mucho y llegado el momento, puede ser de utilidad.
Lo primero es instalarla. Para ello,
shell> apt-get install acct
O en sistemas Red Hat,
shell> yum install psacct
Tras su instalación, tendremos que arrancar el proceso que lleva el mismo nombre que el paquete. A partir de este momento, acct estará ya recolectando datos para nosotros, así que toca ver la forma de explotar los datos que almacena.
  • ac
    Este comando se encarga de sacar información de tiempo de conexión de usuario al sistema.
    shell> ac -p
       root                  1823.40
       javier                0.00
    
       total     1823.40
    
  • sa
    No muestra un sumario de información relativa a las estadísticas de ejecución de cada usuario.
    shell> sa -u
       -7365568   0.00  cpu    979k  mem  accton
       -7365568   0.00  cpu  26288k  mem  touch
       -7365568   0.00  cpu  26608k  mem  psacct
       -7365568   0.00  cpu    979k  mem  consoletype
       -7365568   0.00  cpu  26528k  mem  psacct       *
       -7365568   0.00  cpu  26608k  mem  psacct
       -7365568   0.00  cpu  28928k  mem  ls
       -7365568   0.31  cpu  27696k  mem  bash
       -7365568   1.41  cpu  17472k  mem  sshd
       -7365568   0.00  cpu   4332k  mem  unix_chkpwd
       -7365568   0.00  cpu   4332k  mem  unix_chkpwd
       -7365568   0.00  cpu  16416k  mem  sshd         *
       ...
    
  • lastcomm
    Muestra todos los comandos que los usuarios han ejecutado en el sistema. Este es el comando más potente, sin dudarlo, ya que permite sacar mucha información o ser muy cotilla, lo que prefiramos.
    A parte del comando ejecutado, también nos indica la fecha, el usuario y dónde se ejecutó.
    shell> lastcomm
       gtbl           root   pts/0   0.00 secs Sun Jun 22 13:48
       sh         F   root   pts/0   0.00 secs Sun Jun 22 13:48
       gzip           root   pts/0   0.00 secs Sun Jun 22 13:48
       gzip           root   pts/0   0.00 secs Sun Jun 22 13:48
       gzip           root   pts/0   0.00 secs Sun Jun 22 13:48
       bash       F   root   pts/0   0.00 secs Sun Jun 22 13:23
       hostname       root   pts/0   0.00 secs Sun Jun 22 13:23
       bash       F   root   pts/0   0.00 secs Sun Jun 22 13:23
       id             root   pts/0   0.00 secs Sun Jun 22 13:23
       sshd      SF   sshd   ---     0.00 secs Sun Jun 22 13:23
       ...
    
    Como veis, información muy valiosa para análisis en caso de desastre.
Por supuesto, estos tres comandos tienen muchas más opciones que permiten extraer o simplificar la información mostrada, así que no dudes en echarle un vistazo a la página man de cada uno.
Leer más

Desfragmentar disco en Linux

Muchas veces la gente que está acostumbrada a emplear Windows, cuando comienza en el mundo de Linux le sorprende que no haya una forma fácil de desfragmentar el disco duro, como hacía en sus épocas Windowseras. La verdad es que siempre se suele decir que los sistemas ext3 y ext4, los más empleados últimamente en el mundo GNU/Linux, especialmente de escritorio, no sufren de fragmentación. Esto es una verdad a medias, o una mentira piadosa, como prefiráis decir. Todos los sistemas de ficheros, al trabajar con ellos se fragmentan y los de GNU/Linux no iba a ser menos. Es cierto, que por el diseño se fragmentan mucho menos, pero algo también sufren.
Pues bien, si sois de lo que preferís tener el sistema siempre muy controlado y os gusta tener el disco perfectamente ordenado e4defrag es vuestra utilidad para sistemas de ficheros extN.
Lo primero es instalarla y en sistemas basados en Debian esta utilidad está dentro del paquete e2fsprogs, así que...
shell> apt-get install e2fsprogs
Tras su instalación, podemos ver el porcentaje de fragmentación que tiene una de nuestras particiones tal que así,
shell> e4defrag -c /dev/mapper/vg0-data
Fragmented files                      now/best     size/ext
1. /data/01 - El big bang.avi         283/1        1869 KB
2. /data/02 - Agujeros negros.avi     234/1        2258 KB
3. /data/04 - Estrellas.avi           215/1        2458 KB
4. /data/08 - Lunas.avi               208/1        2544 KB
5. /data/05 - Planetas.avi            197/1        2688 KB

 Total/best extents                   44846/30877
 Average size per extent              4961 KB
 Fragmentation score                  0
 [0-30 no problem: 31-55 a little bit fragmented: 56- needs defrag]
 This device (/dev/mapper/vg0-data) does not need defragmentation.
 Done.
Lo que está aquí representado es el resultado de ejecutar el comando en el disco que tiene las "copias de seguridad" de todo aquello que veo y que tras varios años escribiendo y borrando en él, apenas hay fragmentación. Por este detalle es por lo que se suele decir que GNU/Linux no sufre de este tipo de problemas.
Por supuesto, si vuestro sistema presenta más fragmentación o algún tipo de problema, la forma de ejecutar e4defrag es la misma, simplemente sin la opción -c.
shell> e4defrag /dev/mapper/vg0-data
Según el tamaño de los ficheros y el estado del disco, le llevarán un poco más o un poco menos. Al finalizar os presentará las estadísticas y vuestro disco quedará sin la tan temida fragmentación.

Nota: Es recomendable que durante el proceso de desfragmentado se emplee el acceso a disco lo menos posible.
Leer más

Deshabilitar la comprobación de discos en el arranque

Creo que a muchos, por no decir todos los que estemos leyendo esta entrada nos habrá pasado alguna vez, que tras reiniciar un equipo y teniendo prisa en que arranque, éste se pone a comprobar el disco en busca de problemas.
Esta tarea está por defecto en los sistemas de ficheros extN y reiserfs y, lógicamente, si está es por algo. Pero puesto que GNU/Linux es altamente configurable si deseamos que una partición nunca se compruebe, bien por que son muchos datos, bien por que lo hacemos nosotros manualmente, podemos indicárselo. Para ello existe el comando tune2fs.
shell> tune2fs -c0 -i0d /dev/sdXY
Según el manual, las opciones que le pasamos indican lo siguiente:
  • -c max-mount-counts
    Adjust the maximal mounts count between two filesystem checks. If max-mount-counts is 0 then the number of times the filesystem is mounted will be disregarded by e2fsck and the kernel.
  • -i interval-between-checks[d|m|w]
    Adjust the maximal time between two filesystem checks. No postfix or d result in days, m in months, and w in weeks.
    A value of zero will disable the time-dependent checking.
Como veis, en el man de tune2fs se explica el método para deshabilitar, aunque también recomienda no deshabilitarlo, ya que la comprobación del sistema de ficheros es algo importante, ya que garantiza la integridad y la consistencia de los datos.
Failure to do so may lead to filesystem corruption due to bad disks, cables, memory, or kernel bugs to go unnoticed until they cause data loss or corruption.
Así que ya sabéis, si necesitáis evitar que la máquina compruebe el disco tras un reinicio concreto, existen otras formas de hacerlo y si aun así queréis deshabilitarlo, tener presente los problemas futuros que pueda entrañar.
Leer más

Forzar chequeo de disco en reinicio del sistema

Hoy os quiero presentar un truco tan interesante como sencillo. Hay muchas veces que nos interesa forzar un chequeo de disco cuando el sistema se reinicie, pero que por lo que sea, no podemos reiniciarlo en ese momento. Luego lo reiniciamos y se nos olvida de indicárselo en el parámetro del shutdown, con lo que seguimos en la misma.
Para evitar que eso nos suceda, podemos crear un fichero vacío en la raíz del sistema y que se llame forcefsck. Tan simple como eso y conseguiremos que en el próximo reinicio el sistema compruebe los discos, para a continuación borrar automáticamente dicho fichero.
shell> touch /forcefsck
Leer más

Conseguir permisos para guardar ficheros desde vi

Fijo que no soy al único que le pasa lo de editar un fichero en vi y cuando vas a guardarlo te das cuenta de que no tienes permisos para hacerlo. Si las modificaciones que has realizado son pocas y pequeñas, aun puede no molestar demasiado, pero sino, efectivamente volver a aplicarlas nuevamente esta vez ya con permisos resulta molesto. A la mayoría de los administradores cuando nos sucede esto lo que hacemos es escribir en un fichero temporal los datos y luego "machacar" el original. Por suerte vi para estas cosas nos facilita la vida, y con un simple
:w /tmp/ssh.config
logramos que se guarde en el fichero temporal que deseemos, ya luego es cuestión de mover los datos.
Sin embargo, si estamos editando y obtenemos alguno de estos errores,
W10: Advertencia: cambiando un fichero de sólo lectura 58,1 Final

E45: Está activa la opción 'readonly' (añada «!» para forzar).

E212: No puedo abrir el fichero para escribir en él.
antes de optar por guardar con otro nombre, quizás sea mejor obtener desde vi los permisos necesarios y así evitar la molestia y la inseguridad que puede provocar dejar un fichero de configuración, por ejemplo, en un directorio temporal. Para ello,
:w !sudo tee %
[sudo] password for javier: 

Si te parece útil este truco, úsalo y compártelo!

Leer más

Ocultar los procesos a usuarios

En el último artículo de Debian Administration leo un sorprendente post que habla sobre cómo esconder los procesos a usuarios sin privilegios, mediante un parámetro presente desde el kernel 3.2.
Para hacer este tipo de protecciones la única forma que existía con antelación era emplear utilidades y parches aplicados en el kernel. Por suerte, con las últimas versiones del kernel de Linux, esto ya lo podemos hacer de forma nativa e inmediata, lo cual facilita, y mucho, el trabajo a la hora de proteger y ocultar datos a los administradores de sistemas.

¿Cuándo emplear este truco?

En los equipos de sobremesa habituales, desde luego no tiene sentido hacer este tipo de filtros, pues no es necesario ocultar los proceso de otros usuarios; entre otras cosas, suelen ser mono-usuario.
En servidores, quipos compartidos por varios usuarios a la vez (GNU/Linux es multi-usuario de verdad!) o equipos en los que se están a ejecutar procesos críticos, pues quizás sí tenga más sentido ocultar los procesos que no son del propio usuario. Por qué el usuario X tiene que saber lo que está a ejecutar el usuario Y. Si no interesa que lo sepa, empleamos este truco y listo.

Cómo configurar esta nueva utilidad del kernel

La nueva utilidad descrita está basada en un parámetro, hidepid, que se le pasa como parámetro de montaje a la partición /proc. Los posibles valores que puede tomar son:
  • 0 - Valor por defecto del sistema. Todos los usuarios pueden ver todos los procesos.
  • 1 - Esta opción ya ofrece algo de restricción a lo que un usuario normal puede ver. Ante la salida estándar de "ps aux", por ejemplo, no se pueden ver procesos de otros usuarios, pero bajo /proc todavía puede ver estos procesos.
  • 2 - Esta es la opción más restrictiva. Un usuario normal no puede ver nada que otros estén ejecutando ni siquiera accediendo a la carpeta /proc. Todo está oculto para él.
Y la forma de emplearla es, en tiempo real y sin hacer nada, volver a montar la partición /proc, pasándole como parámetro esta nueva opción.
shell> mount -o remount /proc --options=hidepid=2
Al realizarlo, el cambio es inmediato y según el valor que le pasemos, dentro de los posibles, veremos el resultado en usuarios sin privilegios de root. Por ejemplo, si ejecutamos la línea que os acabo de indicar, cualquier usuario que no tenga permisos dejará de ver todos aquellos procesos que no sean suyos y para él, el servidor sólo ejecutará cosas suyas.
Si nos interesa emplear esta funcionalidad de forma permanente, tendremos que aplicar el cambio en el fichero /etc/fstab y añadir la opción comentada a la partición /proc, tal como sigue.
proc   /proc   proc   defaults,hidepid=2   0   0
Las diferentes salidas se muestran a continuación. La primer, en ejemplo de lo que ve un usuario sin privilegios antes de bloquearle el acceso a los procesos que no son suyos,
javier@shell> ps aux
USER      PID %CPU %MEM   VSZ   RSS TTY  STAT START   TIME COMMAND
root        1  0.0  0.0  2776  2864 ?    Ss   mar12   0:00 /sbin/init
root        2  0.0  0.0     0     0 ?    S    mar12   0:00 [kthreadd]
root        3  0.0  0.0     0     0 ?    S    mar12   0:00 [ksoftirqd/0]
root        4  0.0  0.0     0     0 ?    S    mar12   1:22 [kworker/0:0]
root        5  0.0  0.0     0     0 ?    S<   mar12   0:00 [kworker/0:0H]
root        7  0.0  0.0     0     0 ?    S    mar12   0:00 [migration/0]
...
Y a continuación, el mismo usuario una vez pasada la opción hidepid=2.
javier@shell> ps aux
USER      PID %CPU %MEM  VSZ   RSS TTY  STAT START   TIME COMMAND
javier   2589  0.0  0.0 3352  7876 ?    Ssl  mar12   0:00 x-session-manager
javier   2649  0.0  0.0 4444   500 ?    S    mar12   0:00 /usr/bin/dbus...
javier   2650  0.0  0.0 1856  2048 ?    Ss   mar12   0:09 //bin/dbus-...
javier   2661  0.0  0.0 9360  2548 ?    S    mar12   0:00 /usr/lib/x86...
javier   2665  0.1  0.2 3284 17076 ?    S    mar12   5:12 xfwm4
javier   2669  0.2  0.2 2584 20508 ?    Sl   mar12   7:34 xfce4-panel
...
Sin dudarlo, una opción muy interesante para equipos compartidos que debería de estar presente en muchos, por no decir todos los servidores de producción. 

Referencia: debian-administration.org
Leer más

Acelerando el arranque de Linux y sus aplicaciones

Desde hace ya un tiempo, empleo Linux Mint como sistema operativo de escritorio. Dejé un poco de lado Debian para sistemas de escritorio y opté por las pre-configuraciones que ya vienen de base con Mint. En general estoy contento. Tras la instalación del sistema base hay que hacer una amplia limpieza de paquetes, pues trae muchas cosas que en mi vida usaré. Creo que en realidad nadie usará todos los paquetes que trae, pero tras la limpieza queda ya un sistema más o menos decente.
Finalizada la instalación básica, tocó optimizar el acceso a disco. Puesto que ahora dispongo de una unidad SSD, hay que cuidarla para poder sacarle el máximo partido y también la máxima vida útil. Puedes ver aquí todos los pasos que recomiendo.
Pues como siempre, lo siguiente a esto es acelerar la carga, tanto del sistema base como de las aplicaciones que suelo emplear. Para hacerlo empleé dos programas de precarga.
El primero, preload, es un pequeño daemon que se encarga de optimizar el acceso a disco según aquellos programas que se inician y así arrancarlos más rápido. En arranque la primera vez es un poco más lento, tras ella, más rápido. Para instalarlo,
shell> apt-get install preload
El otro programa del que hablamos es prelink. Éste se encarga de hacer una modificación de todas las librerías que los binarios tienen como dependencias para se usen las que ya están cargadas en el sistema y así acelerar el arranque de aplicaciones. Si la aplicación que vamos a usar ya tiene las librerías cargadas, por que otra aplicación lo hizo por ella, ésta no cargará tantas cosas e irá más fluida. Para instalarlo,
shell> apt-get install prelink
Una vez instalada, debemos de modificar el fichero de configuración (/etc/default/prelink) y cambiar el valor de la variable PRELINKING para activar el prelinkado.
< PRELINKING=unknown
> PRELINKING=yes 
A continuación, forzamos el linkado de los principales binarios,
shell> prelink -all
En caso de que quedamos incluir otras carpetas de binarios, como por ejemplo, /opt o /srv, tendremos que modificar el fichero de configuración, /etc/prelink.conf, y añadirlas ahí.
Ahora ya podemos reiniciar el sistema para que todos los cambios se apliquen correctamente. Tras ello, deberíamos de notar que las aplicaciones se inician con mayor rapidez.

Leer más

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios