Cargando...
Entradas del mes November, 2007
  1. Duplicity nos permite realizar backups de nuestros directorios produciendo un fichero encriptado en formato tar y subiendo este a un servidor de ficheros local o remoto.

    He seguido unos pasos de una guía que vi de no se donde para montar este programa que está de puta madre, he hecho un par de cosillas con él y ahora lo tengo puesto en el cron para que haga las copias incrementales de mis máquinas.
    Os recomiendo su uso, aquí os pongo lo hecho.

    Para instalarlo:

    # aptitude install duplicity

    Este programa es como el rsync, pero lo bueno que tiene es que no tenemos ningún fichero de configuración

    Otras caracteristicas:

    * backup incremental
    * usa librsync para realizar backup de solo lo que es necesario (uso eficiente del ancho de banda)
    * permite acceso remoto como scp
    * no es necesario instalar duplicity en la maquina remota, basta con un servidor scp)
    * encriptacion GPG y firma para proteger los datos salvados

    Para usarlo, simplemente ejecuta algo como:

    duplicity datos scp://manuel@server/copias

    realiza un backup del directorio “datos” en un servidor remoto scp (server) al
    que te conectas como el usuario “manuel” y dejando el backup en la carpeta /copias

    Para un backup local:

    duplicity datos file:///var/backup/datos

    El directorio destino debe existir, duplicity no lo crea. Si no tienes planeado emplear encriptación GPG, asegurate de añadir –no-encryption en la linea de comandos:

    # duplicity --no-encryption /home/jose/Desktop/SQLITE file:///home/jose/Desktop/BACKUP01
    No signatures found, switching to full backup.
    ————–[ Backup Statistics ]————–
    StartTime 1191147865.88 (Sun Sep 30 12:24:25 2007)
    EndTime 1191147866.67 (Sun Sep 30 12:24:26 2007)
    ElapsedTime 0.79 (0.79 seconds)
    SourceFiles 14
    SourceFileSize 2564610 (2.45 MB)
    NewFiles 14
    NewFileSize 2564610 (2.45 MB)
    DeletedFiles 0
    ChangedFiles 0
    ChangedFileSize 0 (0 bytes)
    ChangedDeltaSize 0 (0 bytes)
    DeltaEntries 14
    RawDeltaSize 2552322 (2.43 MB)
    TotalDestinationSizeChange 2375997 (2.27 MB)
    Errors 0
    ————————————————-

    Algunos ejemplos que saco de la documentación:

    • Comando básico para realizar un backup de /home/me on en el sistema local a /usr/backup en el sistema remoto: duplicity /home/me scp://uname@other.host//usr/backup
    • Si el comando se ejecuta repetidamente, la primera sesión será un backup completo, los siguientes serán incrementales: La opción –full se usa para forzar un backup completo. El comando siguiente excluye al directorio /tmp: duplicity --full --exclude /tmp /home/me scp://uname@other.host//usr/backup
    • Backup, escribiendo los ficheros mediante ftp usando como password mypassword: FTP_PASSWORD=mypassword duplicity /home/me ftp://uname@other.host/ftp_dir
    • Comando Básico de restauración, restaurá el directorio /home/me del backup al directorio restored_dir: duplicity scp://uid@other.host//usr/backup restored_dir
  2. He encontrado un tema muy interesante realizado por Nestor os pongo aquí su trabajo.

    Vamos a configurar un servidor de archivos o FTP, para permitir a usuarios transferir archivos desde y hacia nuestro server. En este caso elegimos ProFTPd, el cual es uno de los más usados actualmente, ya que es muy escalable y flexible; además de que permite integrarse con varios servicios, entre ellos Mysql, que es la base de datos que amos a usar en este caso para configurar para manejar todo lo relacionado con autentificación de usuarios, manejo de recursos y asignación de quotas de espacio en disco.

    FTP viene de File Transfer Protocol, que es el protocolo que maneja la transferencia de archivos y todo lo relacionado con esto por defecto, trabaja utilizando los puertos 21 y 20 para datos y control respectivamente. Y tiene 2 modos de funcionamiento, como FTP Pasivo o Activo:

    • Modo Activo: en este caso se establece una conexión por el puerto 20 para negociar los parámetros de conexión y luego se hace todo el tráfico de datos por el puerto 21.
    • Modo Pasivo: este caso es similar al anterior, pero con la diferencia de que una vez que se negocia la conexión, el FTP server envía un paquete al cliente indicándole un puerto aleatorio entre 1024 y 5000 para establecer la conexión. Si bien esto es más seguro, es un poco más difícil de utilizar si tenemos el FTP detrás de un firewall, como en nuestro caso, pero simplemente tenemos que permitir un rango de puertos y listop.

    Bien, vamos por parte, en este caso utilizaremos Debian Etch Stable 4.1 para hacer la configuración, en este caso como nosotros teniamos instalada una base de datos Mysql decidimos aprovecharla para manejar la gestión de usuarios y no usar otro método de autentificación (existen varios), asi que primero instalamos los paquetes básicos:

    apt-get install mysql-server mysql-client proftpd proftpd-mysql

    Se nos van a preguntar un par de opciones de configuración de los servicios, en una parte se nos va a preguntar como queremos correr ProFTPd desde inet, y elegimos en modo Stand Alone.

    Una vez hecho esto, verificamos que mysql esté escuchando en el puerto tcp 2713 y únicamente para conexiones locales, esto lo podemos hacer con el comando netstat.

    Ahora para el manejo de permisos de los archivos del filesystem, vamos a crear un usuario y un grupo para que se mapeen los permisos a los directorios y archivos que vamos a utilizar para transferencia en el equipo.

    groupadd -d 2001 ftpgroup

    useradd -u 2001 -s /bin/false -d /bin/null -c “Usuario para el manejo de ProFTPd” -g ftpgroup ftpuser

    Simplemente creamos un gropo y un usuario perteneciente al mismo, sin shell y son el GID y UID 2001.

    Ahora vamos a crear la base de datos para el uso del FTP, en MySql, nos logueamos como root:

    mysql -u root -p

    Y creamos la instancia de la base de datos y establecemos los permisos para manejarla:

    create database ftp;
    GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO ‘proftpd’@'localhost’ IDENTIFIED BY ‘password’;
    GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO ‘proftpd’@'localhost.localdomain’ IDENTIFIED BY ‘password’;
    FLUSH PRIVILEGES;

    Esto crea la base, le da permisos a un usuario local para accederla y aplica los privilegios. Debemos campiar ‘password’ por la contraseña que elijamos para esto.

    Ahora vamos a trabajar con esa base de datos, creando las tablas necesarias para su uso:

    USE ftp;

    Y creamos las tablas necesarias:

    CREATE TABLE ftpgroup (
    groupname varchar(16) NOT NULL default ”,
    gid smallint(6) NOT NULL default ‘5500′,
    members varchar(16) NOT NULL default ”,
    KEY groupname (groupname)
    ) TYPE=MyISAM COMMENT=’ProFTP group table’;

    CREATE TABLE ftpquotalimits (
    name varchar(30) default NULL,
    quota_type enum(’user’,'group’,'class’,'all’) NOT NULL default ‘user’,
    per_session enum(’false’,'true’) NOT NULL default ‘false’,
    limit_type enum(’soft’,'hard’) NOT NULL default ’soft’,
    bytes_in_avail int(10) unsigned NOT NULL default ‘0′,
    bytes_out_avail int(10) unsigned NOT NULL default ‘0′,
    bytes_xfer_avail int(10) unsigned NOT NULL default ‘0′,
    files_in_avail int(10) unsigned NOT NULL default ‘0′,
    files_out_avail int(10) unsigned NOT NULL default ‘0′,
    files_xfer_avail int(10) unsigned NOT NULL default ‘0′
    ) TYPE=MyISAM;

    CREATE TABLE ftpquotatallies (
    name varchar(30) NOT NULL default ”,
    quota_type enum(’user’,'group’,'class’,'all’) NOT NULL default ‘user’,
    bytes_in_used int(10) unsigned NOT NULL default ‘0′,
    bytes_out_used int(10) unsigned NOT NULL default ‘0′,
    bytes_xfer_used int(10) unsigned NOT NULL default ‘0′,
    files_in_used int(10) unsigned NOT NULL default ‘0′,
    files_out_used int(10) unsigned NOT NULL default ‘0′,
    files_xfer_used int(10) unsigned NOT NULL default ‘0′
    ) TYPE=MyISAM;

    CREATE TABLE ftpuser (
    id int(10) unsigned NOT NULL auto_increment,
    userid varchar(32) NOT NULL default ”,
    passwd varchar(32) NOT NULL default ”,
    uid smallint(6) NOT NULL default ‘5500′,
    gid smallint(6) NOT NULL default ‘5500′,
    homedir varchar(255) NOT NULL default ”,
    shell varchar(16) NOT NULL default ‘/sbin/nologin’,
    count int(11) NOT NULL default ‘0′,
    accessed datetime NOT NULL default ‘0000-00-00 00:00:00′,
    modified datetime NOT NULL default ‘0000-00-00 00:00:00′,
    PRIMARY KEY (id),
    UNIQUE KEY userid (userid)
    ) TYPE=MyISAM COMMENT=’ProFTP user table’;

    Y salimos de Mysql:

    quit;

    Ahora vamos a configurar proftpd para que se maneje con MySQL, editamos el archivo /etc/proftpd/proftpd.conf

    Cambiamos la línea UseIpv6 a off, para que no utilice este protocolo, solo utilizaremos Ipv4. Y agregamos la siguientes líneas al final del archivo:

    [...]
    DefaultRoot ~
    # The passwords in MySQL are encrypted using CRYPT
    SQLAuthTypes            Plaintext Crypt
    SQLAuthenticate         users groups
    # used to connect to the database
    # databasename@host database_user user_password
    SQLConnectInfo  ftp@localhost proftpd password
    # Here we tell ProFTPd the names of the database columns in the "usertable"
    # we want it to interact with. Match the names with those in the db
    SQLUserInfo     ftpuser userid passwd uid gid homedir shell
    # Here we tell ProFTPd the names of the database columns in the "grouptable"
    # we want it to interact with. Again the names match with those in the db
    SQLGroupInfo    ftpgroup groupname gid members
    # set min UID and GID - otherwise these are 999 each
    SQLMinID        500
    # create a user's home directory on demand if it doesn't exist
    SQLHomedirOnDemand on
    # Update count every time user logs in
    SQLLog PASS updatecount
    SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser
    # Update modified everytime user uploads or deletes a file
    SQLLog  STOR,DELE modified
    SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser
    # User quotas
    # ===========
    QuotaEngine on
    QuotaDirectoryTally on
    QuotaDisplayUnits Mb
    QuotaShowQuotas on
    SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM ftpquotalimits WHERE name = '%{0}' AND quota_type = '%{1}'"
    SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = '%{0}' AND quota_type = '%{1}'"
    SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" ftpquotatallies
    SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftpquotatallies
    QuotaLimitTable sql:/get-quota-limit
    QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally
    RootLogin off
    RequireValidShell off
    [...]

    Simplemente le estamos diciendo que vamos a usar las tablas de la base de datos para manejo de usuarios, autentificación de los mismos y manejo de cuotas, debemos cambiar el password del usuario en esta configuración por el que ya utilizamos cuando creamos la base de datos en Mysql y asignamos permisos.

    Ahora simplemente editamos el archivo /etc/proftpd/modules.conf

    Y comentamos la línea LoadModule mod_sql_postgres.c (ponemos un caracter ‘#’ al principio). De esta forma solamente decimos que use el módulo de mysql para conectarse a la base de datos.

    Bien simplemente ahora queda llenar las tablas de la base con los valores por defecto y crear un usuario de prueba, para esto volvemos a entrar a MySql, entramos a la base de datos de ftp y ejecutamos el siguiente query:

    INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES (’ftpgroup’, 2001, ‘ftpuser’);

    INSERT INTO `ftpquotalimits` (`name`, `quota_type`, `per_session`,
    `limit_type`, `bytes_in_avail`, `bytes_out_avail`, `bytes_xfer_avail`,
    `files_in_avail`, `files_out_avail`, `files_xfer_avail`) VALUES
    (’exampleuser’, ‘user’, ‘true’, ‘hard’, 15728640, 0, 0, 0, 0, 0);

    INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`,
    `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES (1,
    ‘exampleuser’, ’secret’, 2001, 2001, ‘/home/www.example.com’,
    ‘/sbin/nologin’, 0, ”, ”);

    Y salimos, esto lo que hace fue asociar el usuario ftp al grupo, y crear un usuario de prueba (exampleuser en este caso, con un directorio de trabajo en /home/www.example.com).

    Y listo, ya tenemos todo configurado.

    Ahora para añadir usuarios y quotas vamos a ver como son las estructuras de las tablas:

    • Tabla ftpuser: los campos que nos interesan son:

    userid: el nombre de usuario FTP

    password: la contraseña del usuario

    uid: el USER ID del usuario (debería ser 2001 que fue el que usamos cuando creamos el usuario)

    gid: el GROUP IP del usuario (también debería ser 2001 en este caso)

    homedir: el directorio de trabajo donde el usuario gestionará los archivos.

    • Tabla ftpquotalimimits: esto dejo que lo miren y evaluen tranquilos, establecen los limites de transferencia por sesión o en total del usuario asi como sus limites, basta con agregar un usuario con el campo user acá para que este pueda trabajar.

    Para el manejo de esto quizás es conviente que instalen PhpMyAdmin o alguna herramienta para administrar MySQL via web por ejemplo, a mi me ayudó bastante. Bueno espero les haya servido.

    Referencias:

    http://www.howtoforge.com/proftpd_mysql_virtual_hosting_debian_etch

  3. Pongo un video muy interesante, es indispensable no dejar una consola con el usuario root logado porque puede llegar el “simpatico de turno” y hacer esto.

  4. Soy un desastre para las contraseñas, sobre todo si no las uso mucho o son muy largas, era cuestión de tiempo perder la de la base de datos.
    Bien pues hay un modo muy sencillo con el que podemos recuperarla en un minuto.
    Hagamos lo siguiente:

    Creamos un fichero de texto y dentro meteremos la siguiente línea
    echo “SET PASSWORD FOR ‘root’@'localhost’ = PASSWORD(’MyNewPassword’);” > /basura/init.my

    Paramos la base de datos con:
    # /etc/init.d/mysql stop

    Ejecutamos el comando de mysql que recupera la clave (la base de datos debe estar parada previmente):

    mysqld_safe –init-file=/basura/init.my

    Una vez ejecutado, tan solo queda arrancar, y listo.

  5. Estos dos scripts son muy importantes para administradores que trabajan normalmente con servidores de correo, auque también se puede usar para otras cosas.

    Primero creamos un fichero con todos los usuarios:
    Manuel
    Carlos
    Jose
    Pedro
    Paco

    Guardar el fichero con todos los nombres que tengamos que usar (yo he puesto a mis compañeros jejeje), y creamos un script con el siguiente contenido:
    #!/bin/sh
    for i in `more lista_usuarios `
    do
    echo $i
    adduser $i
    done

    Ahora un chmod 755 lista_usuarios.

    Ya podemos lanzar el script con ./generar_usuarios

    Ahora tenemos el problema de los passwords, tenemos que hacer de modo automático que todos los usuarios tengan un password que luego ellos mismos cambiarán cuando accedan, para ello vamos a usar un script como el siguiente:

    #!/bin/sh
    for i in `more lista_usuarios `
    do
    echo $i
    echo $i”123″ | passwd –-stdin “$i”
    done
    echo “Terminado !!”

    Guardar, ejecutar y listo.

  6. Si queremos que cuando el pc arranque haga directamente un chequeo o simplemente queremos que lo haga cada menos veces, porque sea un sistema crítico, pues podemos modificar el número de veces que se ha de montar el sistema para que lo haga así:

    tune2fs -c <número de veces> /dev/partición

  7. hardware
    He leido una guía interesantísima de un usuario de linux llamado Federíco. En esta guía podemos ver como se maneja el hardware desde el sistema operativo. Es realmente útil para poder comprender el funcionamiento de nuestros sistemas.
    Aquí os pongo el enlace para que todos le echeis un vistazo. No tiene desperdicio. Yo adjunto aquí la parte que más me ha interesado.

    Udev - Hotplug

    Ahora bien, los programas de usuario final no acceden directamente a los dispositivos en /sys. Aquí es donde entra Udev. Udev es el encargado de crear los dispositivos en el tradicional directorio /dev. Por ejemplo /dev/hda para un disco duro IDE. Anteriormente al kernel 2.6 el manejo de dispositivos en este directorio era muy complicado. Había que crear un nodo de para todo dispositivo posible, por eso /dev llegaba a tener miles de entradas. Con Udev este problema se soluciona, ya que se encarga de leer la información de /sys y crear un nodo para cada dispositivo conectado.

    Básicamente las funciones de Udev se dividen en:

    Creación de dispositivos y nombrado

    Udev dispone de reglas de nombrado y renombrado de dispositivo bajo /dev. De manera que al conectarse un dispositivo Udev puede seguir reglas personalizables para dar un nombre específico a cada dispositivo. Así por ejemplo si el kernel indica que se ha conectado una unidad grabadora de cd’s, el dispositivo se puede crear como /dev/cdrw y no necesariamente, por ejemplo /dev/hdc. Además Udev puede gestionar nombres de manera estática. Por ejemplo las reglas de Udev permiten que los nombres de las interfaces de red se mantengan después de reiniciar el equipo aunque se quite una interfaz de red. Algo que no pasaba en sistemas anteriores en los que las interfaces de red se confundían si se quitaban placas, etc. No solo eso, sino que otra funcionalidad de Udev permite crear links simbólicos para los nombres de las unidades. Por ejemplo el nodo para un reproductor ipod puede ser creado como /dev/sda1, pero además se le puede crear un link simbólico con un nombre más representativo como /dev/ipod1. Incluso en base al número de serie del dispositivo las reglas pueden indicar que se reserve ese nombre solamente para ese dispositivo. Por último Udev también gestiona los permisos y el propietario con los que debe crearse el dispositivo.

    Carga de módulos.

    Esta función en realidad la hace Hotplug; sin embargo desde la versión 0.59 de Udev, Hotplug se integró dentro de Udev. También en base a reglas cada vez que un dispositivo es encontrado o conectado, Udev-Hotplug lee la información que el kernel entrega en /sys y determina el modelo del dispositivo, y en base a ello carga el módulo o driver apropiado en el kernel, para que este último pueda acceder al dispositivo.

    Ejecución de programas

    Por último Udev-Hotplug puede ejecutar programas específicos al detectarse o conectarse un dispositivo. Algunos programas son lanzados para configurar el hardware, actualizar el firmware del dispositivo, etc. No todos los dispositivos necesitan que se ejecute un programa para que funcionen, solo los que cumplen con las reglas que maneja Udev-Hotplug y que por supuesto son personalizables.

  8. Para tener un mayor control de nuestra red, ahora podemos añadir en un fichero de configuración una relación entre mac y nombre de interfaz. Esto puede solucionar todo tipo de problemas a quien a veces se le cambian las interfaces de nombre cuando reinicia la máquina (hay algunos casos).

    Hay dos soluciones:

    Primera solución:
    El comando ifrename para por darles un nombre más descriptivo:

    ifrename -i eth1 -n wlan0

    (Se pierde con cada reinicio del sistema)

    Segunda solución:
    Hay un fichero, el /etc/iftab del estilo del /etc/fstab con un modo de configuración así de sencillo,

    eth0 mac XX:XX:XX:XX:XX:XX
    wlan0 mac YY:YY:YY:YY:YY:YY

    Con este fichero obligamos a un interface según su mac a un nombre concreto.

  9. Todos tenemos alguna chorrada montada como por ejemplo este blog, un foro o algo del estilo y seguro que también os han entrado robots y se han dado de alta automáticamente. Si usais una verificación mediante captcha no habrá esos problemas, pero los captcha son un poco feos para mi gusto y voy a poner aquí una chisterada para que se eviten esos robots.

    En el formulario de alta podemos poner un campo para poder ser rellenado por el usuario, pero este campo lo vamos a poner oculto y lo llamaremos control. Si llega un usuario a darse de alta, como es lógico al estar oculto no puede verlo y no lo rellenará, pero si por un casual se rellena, ya sabremos que no se trata de un usuario y sí de un robot; ahora solo tenemos que denegar a este bicho que quiere colarse en nuestro lugar.

    Chisterada comentada por F. Ayllón.

  10. Imagino que a los que tengáis blogs, o webs en general os habrá pasado que al mirar los logs, una parte nada despreciable del ancho de banda consumido por el servidor web corresponde al “robo de imágenes” o hotlinking por parte de otras web donde insertan un “” con un link a una de nuestras imagenes.

    Últimamente me pasa con foros y sobre todo, con eBay. Gente que vende un Mac de segunda mano, por poner un ejemplo real, imagino que buscando imagenes en google, encuentra una foto de algún post que he hecho y la inserta directamente.

    Para solucionar esto, podemos usar mod_rewrite de Apache.

    Creamos un un archivo .htaccess en el directorio con las imágenes que nos interese evitar hotlinking con el siguiente contenido:

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} .*jpg$|.*gif$|.*png$ [NC]
    RewriteCond %{HTTP_REFERER} !^$

    RewriteCond %{HTTP_REFERER} !gra2.com [NC]
    RewriteCond %{HTTP_REFERER} !www.gra2.com [NC]
    RewriteCond %{HTTP_REFERER} !newton.gra2.com [NC]
    RewriteCond %{HTTP_REFERER} !www.uptimed.com [NC]
    RewriteCond %{HTTP_REFERER} !uptimed.com [NC]
    RewriteCond %{HTTP_REFERER} !google. [NC]
    RewriteCond %{HTTP_REFERER} !search?q=cache [NC]

    RewriteRule (.*) /forbidden.jpg

    En REQUEST_FILENAME indicamos las extensiones de imágenes (u otro tipo de archivos) que nos interese proteger.

    Con las condiciones de HTTP_REFERER, en este caso, bloqueamos el acceso a las extensiones indicadas a no ser que el dominio donde está enlazada la imagen sea uno de los nuestros, o por ejemplo, Google o su caché.

    Por último, con RewriteRule, los redireccionamos a un archivo en nuestro servidor que nos interese (puede ser otra imagen, donde podemos indicar que no se permite hacer hotlinking, un archivo vacío, etcétera.) By daniel.

Creado con la plantilla ExtJS traducida por Ayuda Wordpress.