Etiquetas

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

lunes, 8 de abril de 2013

Servidor ftp seguro con una instancia independiente de ssh

Como SysAdmins, en muchas ocasiones precisamos ofrecer servicio de acceso sftp (secure ftp) en un host conectado a internet. En un principio, el problema que se plante es que como sftp utiliza ssh, si ya estamos usando ssh para administración remota y otros servicios administrativos utilizar la misma instancia para acceso sftp a usuarios externos podría plantear una brecha de seguridad. Por eso, utilizar otra instancia de sshd, independiente de la "principal" (administrativa) puede suponer un agregado de seguridad extra, porque vamos a "limitar" los permisos que daremos a los usuarios que accedan vía sftp.

sftp, conocido como "ftp seguro" utiliza el protocolo ssh ("secure shell") para encriptar todo el tráfico de red envuelto en este tipo de comunicación o transferencias de archivos. De esta forma, mejora el protocolo ftp clásico, en el cual credenciales de acceso como archivos se envían sin cifrado, lo que los hace visibles para ojos de malvivientes.

Lo que nos proponemos con este acercamiento es crear una instancia adicional de sshd, es decir, correr otro deminio (servidor) ssh que será el encargado de prestar el servicio para sftp, en otro puerto diferente al estándar (puerto 22). Partiendo de ese punto limitaremos los usuarios solo a usuarios definidos para usar sftp como también limitaremos las opciones del shell del usuario.

Manos a la obra

1) Crear configuracion para nuevo demonio:

Aquí copiaremos el archivo original de configuración del servidor sshd para que nos sirva de punto de partida.

cd /etc/ssh
cp -p sshd_config sshd_config-sftp


2) Modificaciones en sshd_config-sftp (Alterar puerto, bindings, etc):
OBS. Importante: es clave definir el PID file para este nuevo demonio o instancia.
Este nuevo servicio sshd escuchará conexiones en el puerto 2222, definido en el archivo sshd-config-sftp.

# BOF Modificaciones para segundo demonio
# Port modificado
Port 2222
# Agregado PID para este demonio
PidFile /var/run/sshd-sftp.pid

3)Seguridad: no permitir acceso root y limitar usuarios: Permitiremos acceso a esta instancia de sshd solo a los usuarios listados en AllowUsers o a los pertenecientes al grupo AllowGroups

# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
AllowUsers ptolomeo alberto # Usuarios permitidos para acceso sftp
AllowGroups sftp # Grupo permitido

4) Crear symlink para diferenciar el demonio del principal:

# cd /usr/sbin
# ln -s /usr/sbin/sshd /usr/sbin/sshd-sftp
# ls -l sshd-sftp
lrwxrwxrwx 1 root root 14 mar 28 11:10 sshd-sftp -> /usr/sbin/sshd

5) Si se usa PAM, como es default en Debian:

# cd /etc/pam.d/
# ln -s sshd sshd-sftp

6) Modificar el script SysV para inicio y parada:

# cd /etc/init.d/
# cp -p ssh ssh-sftp

7) Alterar script de inicio ssh-sftp para definir las config de la nueva instancia (ver abajo en Anexo I el script completo).

8) Creacion de usuario y grupo para acceso restringido:

# useradd -m -c "usuario acceso sftp limitado" -s /bin/bash ptolomeo
# passwd ptolomeo
Introduzca la nueva contraseña de UNIX:
Vuelva a escribir la nueva contraseña de UNIX:
passwd: contraseña actualizada correctamente

# addgroup sftp
Añadiendo el grupo `sftp' (GID 1005) ...
Hecho.

# usermod -aG sftp ptolomeo
# groups ptolomeo
ptolomeo : ptolomeo sftp

9) OPCIONAL: ambiente chroot para el acceso sftp

Si bien, se recomiendan, los pasos descriptos en esta sección (9) son opcionales. Describen cómo configurar un ambiente chroot para que los usuarios sftp se encuentren limitados únicamente a su directorio de usuario ($HOME). De esa forma no podrán acceder a lectura de otros archivos del sistema operativo, por ejemplo.

# chown root:sftp /home/ptolomeo/
# chmod 755 /home/ptolomeo/

9.1) Alterar estas líneas de /etc/ssh/sshd_config-sftp

# Comentado para acceso chroot (ver abajo)
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

9.2) Agregar al final de /etc/ssh/sshd_config-sftp:

###################################################
## OPT. (RECOMENDADO): ###
## Para acessos sftp ambiente chroot ###
## Requiere OpenSSH>= 4.8 ###
## Este bloque debe estar al final del archivo ###
## sshd_config-sftp ###
###################################################
Match User ptolomeo
ChrootDirectory /home/ptolomeo
#ForceCommand internal-ftp
# Restringir todavia mas las posibilidades (+ paranoia)
AllowTcpForwarding no
GatewayPorts no
X11Forwarding no

Esta última configuración establece que cuando el usuario coincida com ptolomeo, que fue el que se definió para acceso sftp el mismo quede en una jaula chroot en su directorio home. También la misma directiva condicional se puede aplicar al grupo sftp, lo que sería mejor en caso de que tengamos que dar acceso sftp a múltiples usuarios , lo que suele ser lo habitual.


Anexo I

Script llamado ssh-sftp tipo SysV de inicio para la instancia, que fue modificado a partir del original /etc/init.d/ssh, que queda inalterado.

#! /bin/sh

### BEGIN INIT INFO
# Provides: sshd-sftp
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: OpenBSD Secure Shell server
### END INIT INFO

set -e

# /etc/init.d/ssh-sftp: start and stop the OpenBSD "secure shell(tm)" daemon

test -x /usr/sbin/sshd-sftp || exit 0
( /usr/sbin/sshd-sftp -\? 2>&1 | grep -q OpenSSH ) 2>/dev/null || exit 0

umask 022

if test -f /etc/default/ssh; then
. /etc/default/ssh
fi

. /lib/lsb/init-functions

if [ -n "$2" ]; then
SSHD_OPTS="$SSHD_OPTS $2"
fi

# Are we running from init?
run_by_init() {
([ "$previous" ] && [ "$runlevel" ]) || [ "$runlevel" = S ]
}

check_for_no_start() {
# forget it if we're trying to start, and /etc/ssh/sshd_not_to_be_run exists
if [ -e /etc/ssh/sshd_not_to_be_run ]; then
if [ "$1" = log_end_msg ]; then
log_end_msg 0
fi
if ! run_by_init; then
log_action_msg "OpenBSD Secure Shell server not in use (/etc/ssh/sshd_not_to_be_run)"
fi
exit 0
fi
}

check_dev_null() {
if [ ! -c /dev/null ]; then
if [ "$1" = log_end_msg ]; then
log_end_msg 1 || true
fi
if ! run_by_init; then
log_action_msg "/dev/null is not a character device!"
fi
exit 1
fi
}


check_privsep_dir() {
# Create the PrivSep empty dir if necessary
if [ ! -d /var/run/sshd-sftp ]; then
mkdir /var/run/sshd-sftp
chmod 0755 /var/run/sshd-sftp
fi
}

check_config() {
if [ ! -e /etc/ssh/sshd_not_to_be_run ]; then
/usr/sbin/sshd-sftp $SSHD_OPTS -t || exit 1
fi
}

export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"

case "$1" in
start)
check_privsep_dir
check_for_no_start
check_dev_null
log_daemon_msg "Starting OpenBSD Secure Shell server" "sshd"
if start-stop-daemon --start --quiet --oknodo --pidfile /var/run/sshd-sftp.pid --exec /usr/sbin/sshd-sftp -- -f /etc/ssh/sshd_config-sftp $SSHD_OPTS; then
log_end_msg 0
else
log_end_msg 1
fi
;;
stop)
log_daemon_msg "Stopping OpenBSD Secure Shell server" "sshd"
if start-stop-daemon --stop --quiet --oknodo --pidfile /var/run/sshd-sftp.pid; then
log_end_msg 0
else
log_end_msg 1
fi
;;

reload|force-reload)
check_for_no_start
check_config
log_daemon_msg "Reloading OpenBSD Secure Shell server's configuration" "sshd"
if start-stop-daemon --stop --signal 1 --quiet --oknodo --pidfile /var/run/sshd-sftp.pid --exec /usr/sbin/sshd-sftp; then
log_end_msg 0
else
log_end_msg 1
fi
;;

restart)
check_privsep_dir
check_config
log_daemon_msg "Restarting OpenBSD Secure Shell server" "sshd"
start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile /var/run/sshd-sftp.pid
check_for_no_start log_end_msg
check_dev_null log_end_msg
if start-stop-daemon --start --quiet --oknodo --pidfile /var/run/sshd-sftp.pid --exec /usr/sbin/sshd-sftp -- -f /etc/ssh/sshd_config-sftp $SSHD_OPTS; then
log_end_msg 0
else
log_end_msg 1
fi
;;
try-restart)
check_privsep_dir
check_config
log_daemon_msg "Restarting OpenBSD Secure Shell server" "sshd"
set +e
start-stop-daemon --stop --quiet --retry 30 --pidfile /var/run/sshd-sftp.pid
RET="$?"
set -e
case $RET in
0)
# old daemon stopped
check_for_no_start log_end_msg
check_dev_null log_end_msg
if start-stop-daemon --start --quiet --oknodo --pidfile /var/run/sshd-sftp.pid --exec /usr/sbin/sshd-sftp -- -f /etc/ssh/sshd_config-sftp $SSHD_OPTS; then
log_end_msg 0
else
log_end_msg 1
fi
;;
1)
# daemon not running
log_progress_msg "(not running)"
log_end_msg 0
;;
*)
# failed to stop
log_progress_msg "(failed to stop)"
log_end_msg 1
;;
esac
;;

status)
status_of_proc -p /var/run/sshd-sftp.pid /usr/sbin/sshd-sftp sshd && exit 0 || exit $?
;;

*)
log_action_msg "Usage: /etc/init.d/ssh-sftp {start|stop|reload|force-reload|restart|try-restart|status}"
exit 1
esac

exit 0
Continuar »

martes, 5 de febrero de 2013

Algunos TIPs para que los niños naveguen seguros

Que los niños naveguen seguros en Internet es la preocupación de la mayoría de los padres.
Ese es el tema del segmento de Tecnología en el programa "Dinero Por Nada".

Continuar »

lunes, 12 de noviembre de 2012

Alarma RTC: Despiérta y anda


RTC - Wake: Cómo programar fácilmente el reloj RTC para encender la PC
Son tiempos en los que hay que ahorrar energía.
Dejar la PC encendida por horas, sólo porque en cierto horario va a ejecutar una cierta tarea (ejemplo grabar un stream de audio, bajar archivos, etc) no es negocio.
El reloj interno (RTC, siglas de Real Time Clock) viene en nuestra ayuda.
Sigue aquí un script simplísimo que permite programarlo fácilmente.

RTC son las siglas de "Real-Time Clock". Por decirlo lo más simple posible, el reloj del "BIOS" de la PC, que aún cuando la máquina está apagada continúa guardando los datos de hora y fecha. Eso sí, en la mayoría de los casos lo guarda con huso GMT.
El RTC tiene una función de alarma, que puede ser muy útil si quisiéramos "despertar" (encender la PC si está en estado de hinernación o suspendida a ram).
Podemos programar para encender la PC en cierto horario, cuando queremos realizar alguna tarea programada sin tener que dejar la computadora encendida durante horas, con el correlato de un interesante ahorro de energía.
Sigue abajo el script:


#!/bin/bash

##################################################
## rtc_wake.sh: ##
## Este script programa la alarma RTC del BIOS ##
## para despertar la maquina y realizar alguna ##
## tarea. ##
## Este script depende de rtcwake para grabar ##
## los datos en el BIOS. ##
## Para eso debe correrse como root. ##
## Requiere Debian pkg: util-linux. ##
## MGR - 11/11/2012 ##
##################################################
echo
echo "RTC2 Wake"
echo "---------"
echo
echo -ne "Ingrese fecha y hora a despertar. Formato: YYYY-MM-DD HH:MM:ss "
read inp
epoch=`date -d "$inp" +%s`
echo "epoch: $epoch"
rtcwake -m mem -t $epoch
El script debe correrse como root, porque son necesarios esos poderes para acceder a escribir el RTC.
Cuando lo ejecutemos nos pedirá que ingresemos el horario en que queremos que el PC despierte. Podemos hacerlo en horario local (ej. ART). La función del script es traducirlo a "timestamp" o segundos desde la "Época". Ese es el formato que requiere la utilidad rtcwake, que es el encargado de hacer su magia.
Inmediatamente la máquina suspenderá a RAM, ya que esa es la opción que se le pasó a rtcwake -m mem. También se podría suspender a disco.

Para asegurarnos de que vaya a funcionar podemos verificar si el BIOS lo soporta:

$ dmesg | grep -i "rtc"
rtc_cmos 00:04: RTC can wake from S4
En general, los BIOS posteriores al año 2000 suele soportar la función de RTC wake up.

Es sólo eso. Luego, sólo programar las tareas que se deseen hacer, con crontab o at.


Continuar »

jueves, 13 de septiembre de 2012

Cómo escuchar Vorterix desde la consola u otras apps

Los medios de comunicación clásicos, como la radio, el disco o la televisión vienen atravesando una profunda reconversión. Tanto es así que hoy son múltiples las formas de escuchar la radio más allá de su versión clásica con un receptor de ondas hertzianas. En este post se agrupa una contribución de un lector de Equiscentrico que nos pasa la forma de escuchar radio Vorterix desde la consola o desde cualquier otra aplicación sea de pc o celular.

La radio Vorterix apostó de lleno a la transformación del medio. En especial a través de su sitio web, que procura ser más una "plataforma" multimedial más que una mera radio. Por eso incluyen una variedad de contenidos multimedia. Y eso es muy bueno, sin dudas, en tanto tiende a aumentar la oferta y las posibilidades de acción del "oyente"/usuario.

Pero también una de las principales ventajas del medio radio fue su ubicuidad o si preferimos su ubicuidad. Desde que los receptores fueron portátiles, a principio con las radios a transistores y hoy con los celulares, fue posible ir con la radio a todas partes. Y eso fue algo específico de ese medio.
Hoy existe una variedad de formas para recibir "radio" ya sea por ondas hertzianas o por streaming de datos (internet).
No solo existen PCs, celulares sino también aplicaciones "embebidas" como media centers de audio o video. Por eso es importante que las radios se ciñan a estándares para que puedan ser oidas en cualquiera de estos múltiples dispositivos.

Dejo en este post una contribución de un lector -no dejó su nombre o nick- que me permitió seguir escuchando Vorterix desde un media center de audio:

Encontré una forma práctica de escuchar Vorterix:
http://184.173.77.4:9776/listen.pls

Hasta tienen la lista de temas que pasaron:
http://184.173.77.4:9776/played.html

De esa forma es posible escuchar Vorterix desde una consola de Linux o desde cualquier otra aplicación que maneje streaming de radios.

Gracias por la contribución!!!
Continuar »

domingo, 8 de julio de 2012

Compilar un Kernel "a la Debian"

Compilar el núcleo del sistema operativo Linux/GNU, contrariamente a lo que muchos creen no es una tarea dificil.
Sí, seguro, es una tarea que lleva mucho tiempo y esfuerzo a fuerza de pruebas errores. Pero también existe una forma de compilar el núcleo de forma rápida, por ejemplo cuando necesitamos probar un kernel más reciente al que tenemos instalado en nuestra distribución.

El kernel Linux es el núcleo central del sistema operativo Linux/GNU, que fuera iniciado hace más de 20 años por Linus Torvalds.
Existen varios motivos para lo que es útil compilar el kernel. Una puede ser que necesitemos alguna funcionalidad que nuestro núcleo actual no tiene habilitada o bien, si deseamos por ejemplo disminuir la "huella" (el tamaño) del núcleo del sistema, por ejemplo, porque trabajamos en un sistema embebido.

Pero normalmente la razón fundamental para actualizar el núcleo del sistema es que contamos con alguna pieza de hardware que requiere de un kernel más nuevo.
La tarea más ardua de construir un núcleo a medida es configurar cada uno de los parámetros. Eso es indispensable, por ejemplo, si trabajamos con un kernel que deberá tener una pisada (tamaño) reducido para funcionar en un equipo determinado.
Una forma de construir el núcleo en pocos pasos consiste en tomar como punto de partida una configuración que ya está en producción.
En el ejemplo de abajo partimos de la configuración que utiliza el kerne stock de Debian. Los pasos del proceso serían los siguientes:

1) Bajar una versión del núcleo algo más reciente desde kernel.org.
Una vez que lo hayamos descomprimido en un directorio de trabajo copiaremos la configuración de un kernel en producción:


cp /boot/config-3.0.0-1-686-pae /home/elequiscentrico/dir-de-fuentes/.config

Con esto nos aseguramos de partir de un kernel que viene en producción en un sistema Debian.

3) Ajustar pasos finales:
make oldconfig
Con este paso deberemos configura solo los itemns nuevos de la nueva versión en la que estamos trabajando.

4) Compilación "A la Debian"

$ make-kpkg clean

$ fakeroot make-kpkg --initrd kernel_image kernel_headers --append-to-version=miKernel

Ir por un aperitivo, una cerveza, una gaseosa o un chocolate caliente. Y...


5) Si todo fue bien, y deseamos instalar el nuevo kernel y sus headers:

# dpkg -i linux-kernel-3.4.4-miKernel.deb
(o la versión y nombre que hayamos decidido, claro).

Este método es "A la Debian", porque difiere de la metodología tradicional. Su principal ventaja, además de la sencillez es que saca ventaja de todo el poderío del sistema de Paquetes Debian, ya que para instalar o desinstalar el nuevo kernel sólo debemos usar dpkg.
Compilar el kernel es una tarea importante a medida que vamos usando más y más el sistema Linux/GNU.
Correciones, sugerencias o comentarios siempre son bienvenidos.


Continuar »

miércoles, 27 de junio de 2012

Convertir pdf a formatos e-book

Los lectores de libros electrónicos -también conocidos como eReaders- son una realidad, inclusive en lugares del globo en donde debemos pagar un poco más por ellos. Mi modesta experiencia me indica que pese a todos los pronósticos y vaticinios apocalípticos sobre la muerte del libro tradicional o "papel", el libro electrónico viene a ser un complemento a ellos.
En esta ocasión pongo a disposición un procedimiento que encontré, luego de bucear un poco en google y hacer mis propias pruebas para convertir archivos pdf por ejemplo revistas electrónicas -pongo como ejemplo la revista brasileña "Espírito Livre" que suelo leer- al formato más amigable para lectores electrónicos, por ejemplo el Kindle de Amazon.

Al buscar un lector de libros electrónicos o e-Books, me preocupó bastante que tuvieran soporte para formato pdf ¿La razón principal? Que muchos de los contenidos que leo vienen en ese formato, por ejemplo la revista brasileña Espírito Livre ( http://www.revista.espiritolivre.org/ ). La misma es en mi opinión una revista muy interesante sobre Linux/GNU, tecnología y cultura libre. Este año viene con algo de atraso en sus ediciones debido a que estuvieron muy activos en la organización de un encuentro o congreso.

Conversión

Yo había intentado leer revistas como Espírito Livre en el celular, pero el tamaño del dispositivo junto con el diseño a dos columnas de la revista complicaba mucho la lectura.
El PDF va bien en computadoras de escritorio, pero en lectores portables como el Kindle u otros dispositivos similares ese formato resulta lento y dificil de leer.
Dicho eso, se hacía imprescindible convertir los PDFs a un formato "amigable" para el eReader, en el caso del Kindle de Amazon ese formato es el "mobi" o mobipocket.
¿Y qué hace falta para lograr una buena conversión? Dos softwares excelentes: calibre (http://www.calibre-ebook.com/) y k2pdfopt (http://www.willus.com/k2pdfopt/). El primero es un gestor completísimo de libros electrónicos de código abierto, mientras que k2pdfopt es un adaptador de pdf a la estructura necesaria para los lectores (eReaders). K2pdfopt hace la magia necesaria para que la conversión sea bastante exitosa. Incluso, en textos con varias columnas -como es el caso de la revista del ejemplo, E.L) k2pdfopt las convierte a un única columna, lo que es indispensable para una lectura ágil en el lector electrónico.

Sinceramente, hasta este momento, no tengo certeza si k2pdfopt es de código abierto, pero en compensación hay binarios disponibles para usar en Linux/GNU, Mac y Windows.

Manos a la obra

1) Hacerse del software:

Para descargar e instalar Calibre, por ejemplo en Debian (hay versiones para Windows, Mac además de Linux /GNU)

Calibre usa intensivamente Python, así que por si acaso es bueno preparar algunas dependencias:
aptitude install python-beautifulsoup python-cherrypy3 python-clientform python-cssutils python-django python-django-tagging python-encutils python-mechanize python-pypdf
Luego, para instalar calibre desde su repositorio oficial:
python -c "import sys; py3 = sys.version_info[0] > 2; u = __import__('urllib.request' if py3 else 'urllib', fromlist=1); exec(u.urlopen('http://status.calibre-ebook.com/linux_installer').read()); main(install_dir='/opt')"
Suele ser recomendable instalar Calibre desde su repositorio oficial porque tendremos una versión más reciente que la disponible en el repositorio de paquetes de nuestra distribución Linux/GNU.
Nótese que al final del mini script python que hace la descarga se puede configurar el directorio en donde se instalará (ej. opt, /usr/local/share). Donde gusten.
Descargar k2pdfopt:
Simplemente descargar desde http://www.willus.com/k2pdfopt/download/ y guardar el binario (ejecutable) en un directorio local (ej. /usr/local/bin) y dar permisos de ejecución.
Ahora, a convertir se ha dicho:

En el directorio local donde tengamos el pdf de la revista o libro ejecutaremos:

k2pdfopt -ui- -col 2 -j 0 -gs -x Revista_EspiritoLivre_036__marco2012.pdf
La opción -col 2 es importante para los documentos diseñados a dos o más columnas, como es Espírito Livre. Eso le indica a k2pdfopt que intente convertir a una única columna.
El comando de arriba producirá un nuevo pdf, de más páginas y mayor tamaño en bytes, pero con un formato adaptado al lector electrónico. Por ejemplo el archivo resultante puede llamarse Revista_EspiritoLivre_036__marco2012_k2opt.pdf.

Calibre entra en escena: Hecha la magia de k2pdfopt, ahora Calibre se encarga de lo que mejor hace. Convertir entre los diversos formatos de archivo y e-books. Se puede usar desde la consola (CLI) o desde su interfaz gráfica (GUI).
Lo más rápido y directo puede ser la GUI. Para convertir sólo hay que añadir el pdf que nos entregó k2pdfopt y seleccionar como archivo de salida a "mobi", y dejar que Calibre haga su trabajo.
Y a disfrutar de Espírito Livre o cualquier otra revista electrónica en el eReader.

Continuar »

jueves, 15 de marzo de 2012

Cómo extraer ("ripper" o rip) audio de YouTube

YouTube, entre otros servicios de flujos de video a demanda, se han constituido en un archivo audiovisual de la Humanidad.
En sites como YouTube hay mucho material cuyo audio es de buena calidad, por ejemplo de emisiones televisivas, en algunos casos incluso audiciones o presentaciones históricas.

Para los que preferimos archivarnos el audio y poder escucharlo donde sea, en casa, en el vieje en subte, en el auto resulta muy práctico transformar el flujo de video flv en un archivo de audio ogg o en su defecto mp3.
Sigue aquí un paso a paso o, para los apurados, una línea de consola que hará todo el trabajo.


El programa que encontré más rápido y directo es clive, que permite descargar videos de YouTube desde la consola.
Manos a la obra:

aptitude install clive

Hay que verificar que la versión de clive sea más o menos actual. En Debian Squeeze actualizado la versión probada es:

$ dpkg -l | grep clive
ii clive 2.2.13-5+squeeze4 video extraction utility for YouTube, Google Video and others
ii clive-utils 2.1.6-1 additional utilities for clive


clive son una serie de scripts Perl que permiten extraer un archivo flv desde YouTube. Tan simple como esto:

$ clive -f best URLDELVIDEO

Obs.: Con la opción -f best clive intentará obtener el video de mejor calidad disponible. Asombroso.

Y en el directorio de trabajo obtendremos el archivo URLDELVIDEO.flv

Finalmente se puede convertir el video flv a audio con ffmpeg

ffmpeg -i VIDEO.flv nombrearchivo.mp3

Ahora bien, de leyendo de la página de manual de clive pude obtener algunos parámetros interesantes. Para los que están apurados sigue la forma de hacer todo el trabajo en una sola línea de consola, lo que llaman un "oneliner":

Oneliner para extraer el audio en ogg:
clive --exec="ffmpeg -vn -i %i -acodec libvorbis %i.ogg;" -e -f best http://URLDELVIDEO

-vn producirá que no se extraiga el video.
-f best indica a clive tratar de obtener el stream de mejor calidad

Oneliner para extraer MP3 de la mejor calidad disponible:
clive --exec="ffmpeg -i %i %i.mp3;" -e -f best http://URLDELVIDEO

Si acaso no nos gusta el formato flv, también podremos convertir el video y guardar el video podemos hacerlo en ogg:

clive --exec="ffmpeg -i %i -acodec libvorbis %i.ogg;" -e -f best http://URLDELVIDEOENYOUTUBE

Continuar »

viernes, 29 de julio de 2011

Cómo extraer audio de DVD

Siempre resulta cómodo ir con la música a otra parte.
A veces tenemos un DVD musical que disfrutamos mucho y queremos escuchar sus pistas en cualquier momento y no solo en en casa, en la sala o frente a la televisión.
Como siempre la Consola de Linux (CLI) viene en nuestra ayuda.

Hacer una copia personal de nuestros DVDs o extraer el audio para grabarlo en CD o llevarlo en un reproductor de MP3 es una forma de resguardar la música que nos gusta.<br>Es fácil de hacer y no requiere de mucho tiempo si se utilizan dos herramientas de consola. Son lsdvd y transcode.<br><br>Manos a la obra. Para instalarlas en las distros basadas en Debian puede hacerse:


aptitude install lsdvd transcode


lsdvd: nos mostrará el contenido del DVD. Nos informará sobre cuál es la pista más larga, que de seguro es la que nos interesará extraer. Dirá, por ejemplo: "longest track: 1".
Con ese dato a mano, podemos utilizar finalmente transcode para extraer el audio a un archivo. Puede ser wav o algún tipo de archivo comprimido como ogg o mp3.


transcode -i /dev/dvd -x dvd -T 1,-1 -a 0 -y wav -s 0 -m audio.wav


-s 0 es para no amplificar el volumen del audio y evitar saturación.
-T es para elegir un determinado título del DVD que nos dió lsdvd, en general debe ser el más largo el que nos interesa. En este caso era el 1.

Transcode creará un único archivo con el audio de todas las pistas del dvd. Ahora, queda pendiente separar cada pista y si se quiere convertirlas a mp3.

Para ello puede usarse un GUI como Audacity. Queda pendiente buscar alguna aplicación de consola que permitiera automatizarlo ya que la misma debiera detectar los niveles de audio bajo entre cada pista y eso podría fallar.
Continuar »

martes, 21 de junio de 2011

Cómo crear paquetes .DEB a partir de fuentes


Muchas veces precisamos instalar versiones actualizadas al máximo de ciertos programas o paquetes de software.
En este TIp se muestra brevemente cómo bajar el código fuente desde repositorios de Debian, compilarlo e instalarlo "Alla Debian".

Los desarrolladores y colaboradores Debian son sumamente cuidadosos de la estabilidad y seguridad. Por eso los ciclos ciclos de desarrollo suelen privilegiar estos factores por sobre otros.
A veces escucho decir "Debian no es buena porque los paquetes nunca están actualizados".
En realidad, ocorre que la versión estable (hoy Squeeze) mantiene paquetes congelados para proveer máxima seguridad. Pero las versiones de desarrollo y pruebas (Sid y Wheezy) respectivamente siempre tendrán paquetes más actualizados.
El Código Abierto nos permite descargar las fuentes (si quisiéramos o precisáramos, alterarlo), y compilar. El procedimiento suele estar especificado por el desarrollador y puede ser el conocido (configure && make) y luego make-install para instalar.
Pero esta vía tiene un inconveniente. Perdemos todo el poder del sistema de gestión de paquetes Debian (dpkg) con todas sus utilidades como aptitude, apt-get.
Pero Debian ofrece una maravilla para la compilación de softwares desde fuentes.

Para usarla debemos verificar en /etc/apt/sources.list tener la línea del repositorio.

1) Editar /etc/apt/sources.list

# Fuentes de Sid
deb-src http://ftp.us.debian.org/debian/ sid main contrib non-free

En este caso utilicé el de la versión en desarrollo (sid).

2) Actualizar base de repositorios

aptitude update

1 y 2) deben hacerse como root.

En este ejemplo voy a construir el navegador liviano midori:

3) Creamos un directorio y allí dentro ejecutamos:

apt-get source midori

4) Instalamos dependencias necesarias (como root)

apt-get build-dep midori

5) Entramos al directorio del código fuente, en este caso midori-0.3.6:

cd ./midori-0.3.6

6) Compilamos

dpkg-buildpackage -us -uc

Luego de unos minutos (horas a veces...) en el directorio de trabajo debemos tener un archivo .deb listo.

midori_0.3.6-1_i386.deb

7) Si deseamos instalar el paquete, como root debemos hacer:

dpkg -i midori_0.3.6-1_i386.deb

Y listo, otras de las maravillas de Debian.
Continuar »

miércoles, 1 de septiembre de 2010

Filtrar fácilmente contenido web inconveniente para niños

La web está llena de contenidos que resultan inconvenientes para niños pequeños. Y posiblemente la preocupación de muchos padres sea cómo brindar algo de seguridad a la hora de que los niños naveguen la web. Existe una solución muy simple. Se llama: FamilyShield de la empresa OpenDNS. Los usuarios de Linux pueden hacer un uso "avanzado" de esa aplicación, como se muestra en este artículo. También en las escuelas esto se vuelve un tema prioritario.

El consejo general y de más sentido común que todos los expertos dan es que los niños no queden por períodos más o menos prolongados navegando por la web o chateando sin la supervisión de un adulto.
Lo más revolucionario de la web hoy nos parece de sentido común: el hipervínculo. Es decir un "enlace" en el que cliqueando en él nos deriva a otro "lugar", otra página o sitio web. Eso trajo aparejado un riesgo, ya que el vínculo podría tener como destino un sitio malicioso que realice técnicas de robo de datos o identidad, etc. También puede tener como destino un sitio que no sea conveniente para niños menores.
Una solución para colaborar con que los padres tengan mayor control de lo que sus hijos chicos hacen con Internet consiste en restringir el acceso a sitios inconvenientes como los sitios de contenido XXX.
Existen diversas soluciones para este problema. Pero acaso una de las más simples sea la de utilizar el servicio FamilyShield, de la empresa OpenDNS ( http://www.opendns.com/familyshield/ ). Es gratuito y además no requiere registración.
¿En qué consiste? En un servicio de servidores DNS (de resolución de nombres de dominios) que contiene una lista negra y que no resuelve o bloquea el acceso a sitios inconvenientes para menores.
¿Cómo se configura? Muy fácilmente: sólo hay que reemplazar las direcciones de los servidores DNS que estemos utilizando por los servidores de FamiliShield, a saber:


208.67.222.123
208.67.220.123

Esta solución es válida para cualquier sistema operativo, y puede realizarse en PCs, en routers o en celulares inclusive.

¿Qué más pueden hacer los usuarios de Linux / GNU ?

Como siempre algo más: pueden agregarle algo de funcionalidad a esta solución.
Un agregado o "hack" puede ser el de crear políticas de seguridad diferenciadas por usuario del sistema.
Si tuviéramos un equipo dedicado que funcione como firewall esto es sencillo. Pero en muchos hogares la PC o bien está conectada directamente a Internet (cablemodem, ADSL, etc) o bien a través de un router.
En este último caso existe una solución muy simple.
Supongamos que los niños usan la computadora con sus respectivos usuarios, por ejemplo, "vale" y "viki". Linux tiene un firewall integrado en el propio núcleo del sistema: Iptables.
Sin entrar en demasiados detalles, ya que la documentación es muy abundante, además el kernel o núcleo tiene un módulo adicional para iptables llamado xt_owner ¿Y qué puede hacer por nosotros? Identificar el usuario que está generando tráfico de internet y con ello podremos aplicarle alguna regla.
En la práctica sería:
# modprobe ipt_owner

# iptables -t nat -I OUTPUT -p tcp --dport 53 --match owner --uid-owner 1004 -j DNAT --to 208.67.222.123
# iptables -t nat -I OUTPUT -p udp --dport 53 --match owner --uid-owner 1004 -j DNAT --to 208.67.222.123
# iptables -t nat -I OUTPUT -p tcp --dport 53 --match owner --uid-owner 1005 -j DNAT --to 208.67.222.123
# iptables -t nat -I OUTPUT -p udp --dport 53 --match owner --uid-owner 1005 -j DNAT --to 208.67.222.123
Estas reglas pueden ingresarse por línea de comandos, como superusuario o bien, agregarlo a un script que configure la seguridad con iptables. Lo prometemos para otro artículo en breve.
El valor de --uid-owner corresponde al uid (identificador de usuario en el sistema) y en Linux/GNU puede consultarse con # id viki o # id vale.

¿Qué hacen estas reglas de Iptables?

La "cadena" OUTPUT de la tabla nat (traducción de direcciones IP) sirve en este caso para alterar la dirección de destino de los paquetes que vayan dirigidos a los servidores dns, redirigiéndolos al servidor de FamilyShield (208.67.222.123). En este caso, la cadena OUTPUT se ocupa de los paquetes que se generan dentro del proprio firewall, es decir, la máquina de escritorio a donde hemos aplicado las reglas.
Entonces, los otros usuarios del sistema (que no sean niños) no tendrán restricciones y utilizarán los servidores dns sin filtrado, definidos en el archivo /etc/resolv.conf.

Creo que sin duda es una solución práctica, que evita el trabajo de colocar equipos dedicados o servidores proxy en una configuración hogareña, en una escuela o sitio público de acceso web.

Matías Gutiérrez Reto
Continuar »

jueves, 5 de agosto de 2010

SysAdmin TIP . Acceso ssh con claves (sin contraseña)

A veces necesitamos automatizar en scripts para realizar backups automáticos vía ssh (con scp). Para eso se puede usar el mecanismo de autentificación basada en claves criptográficas que brinda el protocolo ssh. Y además es posible no utilizar contraseñas para conseguir automatizarlo en un script.
Con este artículo inauguramos la sección de TIps técnicos en equiscéntrico.


Imaginemos el siguiente escenario:


Desde nuestra PC (admin.nixnitro.com) deseamos acceder por ssh sin usar contraseña al servidor (rh.nixnitro.com).

1) Primero se debe crear el par de claves criptográficas. Es decir las claves pública y privada

1.1)Loguearse en la estación (admin.nixnitro.com) con el usuario que se va a usar para conectar a servidor (usaremos como ejemplo: toto)
1.2)Generar las claves criptográficas con:

$ ssh-keygen -t rsa

Si no se desea usar contraseña simplemente digitar cuando la solicite.
Con esto se crearán dos archivos:

~/.ssh/id_rsa Clave Privada
~/.ssh/id_rsa.pub Clave Pública

2) La clave pública (id_rsa.pub) debe agregarse a la lista de claves autorizadas del servidor (en nuestro caso rh.nixnitro.com)

2.1) $ scp id_rsa.pub toto@rh.nixnitro.com:/home/toto/.ssh/
2.2) En el servidor rx.nixnitro.com:

$ cd /home/toto/.ssh/
$ cat id_rsa.pub >> ~/.ssh/authorized_keys

3) Probar. Ahora desde admin.nixnitro.com podremos podremos acceder al servidor remoto sin necesidad de pasarle contraseña.


$ ssh toto@rh.nixnitro.com


4) Se puede implementar copias o bacups simples, corriendo en el crontab de, por ejemplo el host admin.nixnitro.com:


tar -cvf - /home/directorio/a_copiar/ --exclude=/home/directorio/a_excluir/ | ssh toto@rx.nixnitro.com "cat > /home/toto/backup/backupadmin.tar"
Continuar »