Etiquetas

importado (41) programación (34) desahogo (30) linux (28) cine y TV (22) humor (21) software libre (19) internet (17) música (13) móviles (12) videojuegos (8) English (7) libros (6) vodafone (6) google (5) java (5) libreoffice (3) openoffice (3) consumismo (2) desarrollo con qt en nokia 5800 (2) economía (2) nokia (2) qt (2) c++ (1) ciencia (1)
Mostrando entradas con la etiqueta linux. Mostrar todas las entradas
Mostrando entradas con la etiqueta linux. Mostrar todas las entradas

1/27/2011

Primera versión estable de LibreOffice lanzada

LibreOffice, el fork de OpenOffice.org, ha lanzado su primera versión estable, la 3.3.

La lista de mejoras (en inglés) tiene partes interesantes como la carga de archivos SVG, mejoras en el uso de archivos RTF y de WordPerfect, compatibilidad con los archivos de Microsoft Works...




1/20/2011

Convertir videos para móviles, DVD, etc. en Ubuntu

Muchas veces nos descargamos un video de internet (como Sintel) y descubrimos que no lo reproduce un dispositivo en el que queremos visualizarlo. Por ejemplo, nuestro reproductor de sobremesa, la consola PSP, el iPod ó un móvil como el iPhone o modelos de Nokia.

En Ubuntu podemos instalar Arista Transcoder para resolverlo fácilmente.

10/18/2010

9/28/2010

LibreOffice, el fork de OpenOffice.org

Según acabo de leer, han hecho un fork de OpenOffice.org que se llama temporalmente LibreOffice (en tanto se aclara si Oracle aceptará cederles el nombre).

Lo que me parece interesante es la lista de miembros de la fundación que dirigirá el desarrollo. Entre ellos hay desarrolladores como Michael Meeks, sobrado de talento pero frenado por la política cerrada de desarrollo de OpenOffice.org. ¿Será esto una repetición de forks que acabaron tomando el relevo del código original, como paso con EGCS y X.org?

Entre tanto echaré algún vistacillo al repositorio y a las listas de correo. También hay un feed con las últimas actualizaciones del proyecto.

9/12/2008

Desarrollo multiplataforma y VMWare


Es una maravilla esto de que ahora un Windows 2000 tire en una máquina virtual de 512 MB de RAM, instalado en portátil con 2 GB de RAM. Encima, la optimización de recursos de VMWare es cada vez más salvaje.

Para usuarios de Ubuntu interesados, hay instrucciones de instalación del VMWare Server bastante resultonas. Y funcionan con la versión 1.0.7 también.

8/02/2007

Llamadas al sistema en el núcleo 2.6 de linux (escrito en octubre del 2005)

Esta mañana hemos realizado en clase de Diseño de Sistemas Operativos la práctica 2, de creación de llamadas de sistema en el núcleo (sin usar módulos).

Aunque el guión estaba preparado para un núcleo 2.4, hemos logrado adaptarlo para el 2.6.13.4 con unos cambios mínimos.

En primer lugar, hay que introducir la entrada de la llamada al sistema en la lista. Anteriormente se introducía en este archivo:

/usr/src/linux/arch/i386/kernel/entry.S


Pero ahora se han separado las entradas de llamadas al sistema en un archivo distinto, que es incluído en el anterior. El nuevo archivo es éste:

/usr/src/linux/arch/i386/kernel/syscall_table.S


La nueva llamada al sistema se introduce al final de la lista, con una entrada así:

.long sys_nueva_llamada /* 375 */


El comentario es el número de la llamada al sistema. Es opcional, pero se recomienda incluirlo cada 5 llamadas por legibilidad del código.

Una vez introducida en la tabla de llamadas, debemos introducir su prototipo en la cabecera unistd.h . En mi caso, lo añadí únicamente al unistd.h de la arquitectura i386, localizado en /usr/src/linux/include/asm-i386/unistd.h. El prototipo se incluye con esta entrada, nuevamente al final de la lista y siempre con cuidado de asignarle un número nuevo, no usado:

#define __NR_nueva_llamada 375


Justo debajo debería aparecer una línea que indica el número de llamadas al sistema en la lista. Debemos incrementar ese número tantas veces como llamadas nuevas hayamos introducido, o podrían darse problemas una vez compilado el núcleo:

#define NR_syscalls 376


Ahora que la nueva llamada consta en el sistema, podemos introducir el cuerpo de la llamada. Esto podemos hacerlo al final del archivo /usr/src/linux/kernel/sys.c . Por ejemplo:

asmlinkage long sys_nueva_llamada(void){
printk("Esta llamada es nueva\n");
return 0;
}


Ya sólo queda recompilar e instalar el núcleo con los cambios y hacer un programa que pruebe que nuestra llamada funciona.

Antes de ese paso, nos encontramos con problemas ya que el código estaba preparado para el núcleo 2.4, mientras que no era compatible con el 2.6.13. Por ejemplo, el puntero p_pptr (que apunta al padre de un proceso en la estructura task_struct) ahora es llamado parent.

También fue necesario cambiar la función verify_area (deprecada en el 2.6) por access_ok . Los parámetros son los mismos, pero el resultado es justo el contrario (mientras que verify_area devuelve 0 cuando se puede acceder al area de memoria indicada, access_ok devuelve 0 cuando no se puede acceder.

11/20/2006

Depuradores de OpenGL bajo linux

NVidia sacó hace poco una versión para linux del NVPerfKit, que permite depurar y optimizar aplicaciones OpenGL. Por desgracia requiere una tarjeta gráfica NVidia igual o mejor que la Geforce 3.

Las alternativas para usuarios de otras tarjetas son BuGLe y el básico (y diría que abandonado) GLTrace.

11/12/2006

Linux en la Playstation 3 (PS3) - documentación

Parece que Sony no mentía cuando dijo que Linux podría usarse en la PS3. Acaban de liberar el código y la documentación necesarios para hacer que linux arranque en la consola.

No olvidemos que anteriormente se anunció la disponibilidad de la distribución Yellow Dog Linux para la consola, que saldrá después del lanzamiento. Con esta nueva aportación, deberían poder adaptarse otras distribuciones (en la documentación viene Fedora 5 de ejemplo).

Por lo que he podido ver (en la documentación y los parches al núcleo), se tiene acceso a la CPU, lector de BD/DVD/CD, disco duro, hardware de sonido, puertos USB, controlador estándar de la PS3 y funciones básicas de video (cambio de modo de video, configuración de retrazo vertical y lectura/escritura en framebuffer).

No se aclara nada respecto a la aceleración 3D, que podría depender de un anuncio posterior por parte de nVidia.

10/26/2006

Ubuntu Edgy Eft en la calle

Nueva versión de Ubuntu en la calle. El apt-get dist-upgrade me descarga a una media de 40 kbytes/s , así que creo que algo de éxito está teniendo.

Entre las mejoras, también incluye el recién lanzado Firefox 2.0. Todo un record.

10/08/2006

Usando valgrind para optimizar el uso de la caché

Valgrind es una herramienta muy usada para comprobar los fallos de memoria en un programa, con la herramienta memcheck. Pero no se habla mucho de la herramienta que incluye para comprobar fallos de caché, cachegrind.

El aprovechamiento de la memoría caché es muy importante, ya que su velocidad es muy superior a la de la memoria RAM. Por desgracia, esa velocidad es inversamente proporcional a su tamaño, y si un dato no se encuentra en la caché hay que traerlo de memoria principal, incurriendo en una gran penalización de tiempo. Si hay bucles de por medio, dicha penalización se multiplica.

La herramienta cachegrind permite comprobar esos fallos de caché, configurando incluso su tamaño (muy interesante para simular arquitecturas con otros tamaños de caché). Ésta es la forma de usarla:

$ valgrind --tool=cachegrind --D1=16384,2,128 --L2=65536,2,128 programa


  • En primer lugar "--tool=cachegrind" indica que usaremos la herramienta de simulación de caché.

  • A continuación se especifican los tamaños, asociatividad y tamaño de vía de las memorias caché (si no se especifican se usarán los de la máquina). En primer lugar está la de nivel uno, dividida en datos e instrucciones (D1 e I1, aquí no especificada), y luego la caché de nivel 2 L2 (que es única para datos e instrucciones). Para cada una de ellas se indican, en orden, tamaño en bytes (debe ser potencia de 2), asociatividad (es decir, número de operaciones de lectura/escritura simultáneas) y tamaño de la línea caché (número de bytes que pasan en cada transferencia).

  • Finalmente, el programa a comprobar.



He hecho este programa simple que no es nada óptimo a la hora de acceder a memoria:

matriz.c

#define N 512

int main(int argc, char **argv){
double matriz[N][N];
int i, j;

for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
matriz[j][i] = matriz[j][i] * 2.0;
}



El problema es que el contador j es el que más cambia, y se usa para indicar las columnas de la matriz. En C, el compilador guarda los datos de las filas de forma contigua en memoria, y las columnas suelen estar lo suficientemente alejadas unas de otras como para que no quepan en caché varias columnas.

Con valgrind vamos a simular el efecto que esto tendría en una caché de nivel 2 de 16 Kbytes y líneas caché de 512 bytes (igual al tamaño de fila de la matriz), que sería este comando:

$ valgrind --tool=cachegrind --L2=16384,2,512 ./matriz

Estos son los resultados:


=9666== Copyright (C) 2000-2005, and GNU GPL'd, by Julian Seward et al.
==9666== For more details, rerun with: -v
==9666==
--9666-- warning: Pentium 4 with 12 KB micro-op instruction trace cache
--9666-- Simulating a 16 KB I-cache with 32 B lines
==9666==
==9666== I refs: 4,346,532
==9666== I1 misses: 959
==9666== L2i misses: 172
==9666== I1 miss rate: 0.02%
==9666== L2i miss rate: 0.00%
==9666==
==9666== D refs: 2,171,229 (1,887,833 rd + 283,396 wr)
==9666== D1 misses: 263,896 ( 263,701 rd + 195 wr)
==9666== L2d misses: 262,953 ( 262,896 rd + 57 wr)
==9666== D1 miss rate: 12.1% ( 13.9% + 0.0% )
==9666== L2d miss rate: 12.1% ( 13.9% + 0.0% )
==9666==
==9666== L2 refs: 264,855 ( 264,660 rd + 195 wr)
==9666== L2 misses: 263,125 ( 263,068 rd + 57 wr)
==9666== L2 miss rate: 4.0% ( 4.2% + 0.0% )


La tasa de fallos en la caché de nivel 2 de datos (L2d miss rate) es del 12,1%, todas ellas en la lectura (más de 260.000 fallos de lectura con un número parecido de peticiones).

Es decir, si el bucle tiene 512*512=262144 iteraciones, estamos obteniendo al menos un fallo de caché en cada acceso a la matriz debido a que procesamos el dato de una fila y la desechamos para pasar después a la fila siguiente. Tras cierto número de filas procesadas, la caché está tan llena que sobreescribe los datos de la primera fila para introducir la nueva. En la siguiente iteración del bucle en que cambia el valor de i (proceso del segundo elemento de todas las filas), los datos se han eliminado y hay que volver a captarlos.

Si en el programa intercambiamos los contadores así:

matriz[i][j] = matriz[i][j] * 2.0;

El acceso será ahora por filas, pasando a la siguiente cuando se haya procesado toda la fila actual. Es decir, primero trabajaremos con posiciones de memoria contiguas y por tanto cuando la caché se llene se librará de datos que no se volverán a necesitar. Veamos el resultado con valgrind:


==9667== Copyright (C) 2000-2005, and GNU GPL'd, by Julian Seward et al.
==9667== For more details, rerun with: -v
==9667==
--9667-- warning: Pentium 4 with 12 KB micro-op instruction trace cache
--9667-- Simulating a 16 KB I-cache with 32 B lines
==9667==
==9667== I refs: 4,346,542
==9667== I1 misses: 960
==9667== L2i misses: 171
==9667== I1 miss rate: 0.02%
==9667== L2i miss rate: 0.00%
==9667==
==9667== D refs: 2,171,230 (1,887,834 rd + 283,396 wr)
==9667== D1 misses: 34,525 ( 34,330 rd + 195 wr)
==9667== L2d misses: 4,912 ( 4,856 rd + 56 wr)
==9667== D1 miss rate: 1.5% ( 1.8% + 0.0% )
==9667== L2d miss rate: 0.2% ( 0.2% + 0.0% )
==9667==
==9667== L2 refs: 35,485 ( 35,290 rd + 195 wr)
==9667== L2 misses: 5,083 ( 5,027 rd + 56 wr)
==9667== L2 miss rate: 0.0% ( 0.0% + 0.0% )


Mucho mejor, ahora la tasa de fallos es de 0,2%. Ahora sólo hay unas 35.000 referencias a la caché de nivel 2 (ya que la caché de nivel 1 trabaja con una fila completamente captada antes de pasar a la siguiente no captada), y unos 5.000 fallos de caché de nivel 2.

Nota: el programa está compilado usando gcc con opciones de depuración y ninguna optimización..

La diferencia de 260.000 a 5.000 es muy importante si tenemos en cuenta que la caché de nivel 2 suele ser 10 veces más rápida que la memoria RAM.

Con esto espero que haya explicado bien la importancia de un correcto uso de la caché para aumentar la velocidad de proceso y cómo valgrind puede ayudar a lograrlo.

Estos conceptos los estudié en mayor profundidad en la asignatura de Ingeniería de Computadores, y me hubiese venido bien saber por entonces de la existencia de cachegrind.

10/06/2006

GParted, redimensionando particiones

Mi partición de Windows en el portátil era mínima. Hasta ahora había tirado de VMware para ejecutar Windows desde Linux. Pero tener dos sistemas operativos ejecutándose con 512 MB de RAM no da mucho de sí (la máquina virtual de Windows renqueaba).

Así que decidí enmendar el error básico que hice al instalar linux. La partición / la creé de 10 GB y aparte creé una /home de 20, dejando sólo 10 para Windows. Tener una partición / en un ordenador casero (no un servidor ni nada parecido) de más de 6 GB es un desperdicio.

Al final usé el LiveCD de GParted para quitarle 4 GB a la partición / y ampliar la de Windows para aprovechar ese espacio. El LiveCD es una maravilla, en menos de 30 MB incluye un entorno XFCE mínimo (de hecho eché de menos algún Solitario para entretenerme) y las utilidades necesarias para gestionar un gran número de sistemas de archivo distintos.

Lo único "malo" es que es algo paranoico, así que la operación más complicada que hice (que implicaba reducir tamaño de / y desplazar el comienzo de la partición a la derecha) se alargó más de lo debido por las operaciones de simulacro en sólo lectura y las continuas comprobaciones del sistema de archivos tras cada alteración.

Aun así, ha funcionado y ya puedo instalar unas cuantas herramientas sobre las que ya he escrito antes.

Un par de consejos antes de usarlo:

  • Aseguraos de que os habéis bajado la imagen ISO correctamente antes de grabarla.

  • Guardad los datos importantes de las particiones que se modificarán, no hay garantías de que todo salga bien.

  • Es mejor hacer cada operación una por una (pulsando "aplicar cambios") en lugar de hacer todas del tirón, de esa manera es más posible encontrar fallos de programación.

  • Tras alterar particiones NTFS, en el siguiente arranque de Windows se detectarán inconsistencias y ofrecerá comprobar el sistema de archivos. No canceléis esa operación, es completamente normal.

6/30/2006

Y por esto falla tanto mi diario

El admin actual es un personaje curioso. Adora Windows y prefirió instalar FreeBSD antes que Linux en el servidor de Unia, a pesar de que no había administrado nunca un sistema UNIX.

Pero está claro que las viejas costumbres nunca se pierden:
(22:00:46) Yo: ehhh, qué le pasa ahora al mysql?

(22:07:13) Admin: ya tira

(22:07:22) Admin: es que he borrao antes una carpet<

6/02/2006

Placa P4S61 de ASRock y bloqueos en Ubuntu

Actualizando de Breezy a Dapper un Pentium 4 con la placa ASRock P4S61, me encontré con que muchas aplicaciones “reventaban” tras algo de tiempo de uso. A veces hasta se bloqueaba el sistema entero. Y mirando la salida de dmesg me encontré con algún que otro problema en el núcleo a la hora de alojar memoria.

Tras pasarle el memtest86 vi que no era un fallo de hardware. Así que recordando la de problemas que ha dado esta placa, se me ocurrió desactivar el Hyperthreading (que en la breezy venía desactivado por defecto). Así que añadí “noht” a las opciones del núcleo en el archivo menu.lst. Mano de santo (de momento).

Actualización: no tan mano de santo, la cosa todavía petardeaba. Añadiendo “nosmp nopreempt noapic” ya tira. Cruzaré los dedos.

3/23/2006

Mejora de wireless en la UAL

Por fin está funcionando la nueva infraestructura de la red inalámbrica de la UAL. Se usa encriptación WPA en lugar de WEP + VPN y hay instrucciones para varios sistemas, entre ellos linux.

Agradecimientos a Jose Antonio por la noticia.

P.D.: recordad que si usáis un portátil centrino, en la llamada a wpa_supplicant hay que cambiar “-D ipw” por “-D wext” si usáis un núcleo superior al 2.6.12.

3/01/2006

“Banear” por IP con iptables

A veces, por mucho que tengas bien protegidas las cuentas de tu servidor (contraseñas seguras, nombres de usuario que no corresponden a entradas de diccionario…) no deja de mosquear el encontrarte líneas como estas en el /var/log/auth.log:

Mar  1 19:54:44 servidor sshd[7599]: Invalid user aaron from...
Mar  1 19:54:48 servidor sshd[7601]: Invalid user abdon from...
Mar  1 19:54:53 servidor sshd[7603]: Invalid user abel from...
Mar  1 19:54:58 servidor sshd[7605]: Invalid user abelardo from...
Mar  1 19:55:03 servidor sshd[7607]: Invalid user abrahan from...
Mar  1 19:55:07 servidor sshd[7609]: Invalid user absalon from...
 
Así que nada, como todavía estaba el piratilla tirando de diccionario tras varios minutos de intentos con logins más comunes (como test-y-lo-que-sea), qué menos que darle una idea de lo mucho que lo apreciamos.

Así pues, creé estos dos simples, pero útiles scripts:
ipban.sh

#!/bin/sh
iptables -A INPUT -s $1 -j DROP
 
ipunban.sh Por si las moscas
#!/bin/sh
iptables -D INPUT -s $1 -j DROP
 
Los resultados:

Mar  1 20:02:28 servidor sshd[7904]: Failed password for invalid user daciano from...
Mar  1 20:04:28 servidor sshd[7908]: fatal: Timeout before authentication for...

Un tontucio gastando ancho de banda y recursos de CPU menos.

12/17/2005

Ubuntu, ahora en el portátil

Como ya comenté antes, la distribución Debian inestable ha sido más inestable de lo normal últimamente. Tras migrar el ordenador de sobremesa a Ubuntu, me encontré con el dilema de actualizar el núcleo en el portátil. Ya actualicé al 2.6.14 y descubrí que wpasupplicant se llevaba a palos con la versión del driver de mi tarjeta wireless que metieron en dicho núcleo, anulando así la posibilidad de usar WPA en el router inalámbrico de mi casa. Además, había otra actualización del núcleo que igual arreglaba dicho fallo, pero cualquiera se fía visto que en el sobremesa se cepilló las imágenes de arranque. Así que decidí pasarme a Ubuntu.

Pero no fue tan fácil como en el caso anterior. Ahora mi home no estaba en una partición separada. ¿Solución? Hacer copia del home y el directorio del root:

$ tar czvf /tmp/backup-home.tar.gz /home

$ tar czvf /tmp/root.tar.gz /root


Luego copiarlos al sobremesa, por red, en mi caso usando transferencia por ssh. Más que nada por no abrir otros servicios, y porque ssh necesita que cada paquete se transmita sin errores para desencriptarlo. Usa bastante más CPU que una transmisión por FTP, pero resulta más difícil que se produzcan errores. En todo caso se puede comprobar la integridad con el comando md5sum en los archivos antes y después de ser transferidos (el resultado debe coincidir).

Así pues, instalé Ubuntu en el portátil, esta vez creando el /home en una partición separada para evitar complicaciones en posibles cambios en el futuro. A primera vista lo veo igual que Debian Sid, pero al menos incluye paquetes de GNOME más actualizados (2.12). Por desgracia la versión de Mono que incluye está desactualizada (1.1.8, en Debian Sid estaba la 1.1.10), por lo que tendré que buscarme la vida para usar una versión reciente. O esperar a abril, y podré actualizar tranquilamente a Dapper Drake, la próxima versión estable.

Por cierto, salvo que de verdad necesitéis ahorrar batería como posesos, parece buena idea desactivar laptop-mode. Por lo que dice el README, la operación de desacelerar el disco duro puede acortar mucho su vida. En mi caso, prefiero que me dure menos la batería antes que llevarme sorpresas desagradables con mis datos.

12/07/2005

Aptitude y El Principito

Descubierto en el diario de George Wright:

$ aptitude -v moo

Realmente no hay ningún huevo de pascua en este programa.

$ aptitude -vv moo

¿No le he dicho ya que no hay ningún huevo de pascua en este programa?

$ aptitude -vvv moo

¡Deje de hacer eso!

$ aptitude -vvvv moo

Vale, vale, si le doy un huevo de pascua, ¿se irá?


$ aptitude -vvvvv moo

De acuerdo, usted gana.

 
                               /----\
                       -------/      \
                      /               \
                     /                |
   -----------------/                  --------\
   ----------------------------------------------

¿Contento?

$ aptitude -vvvvvv moo

¿Qué es? Es un elefante que está siendo devorado por una serpiente, por supuesto.

$ aptitude -vvvvvvv moo

¿Qué es? Es un elefante que está siendo devorado por una serpiente, por supuesto.

11/20/2005

Ubuntu y filtrar spam en evolution con bogofilter

Hace una semana que una actualización de Debian inestable (Sid) fulminó el núcleo instalado en el PC de casa (seguramente por algún bug en yaird, el nuevo gestor de imágenes de arranque que sustituye a mkinitrd). Por suerte, mi /home estaba en una partición aparte en otro disco duro, así que podía reinstalar sin preocuparme por perder los datos importantes.

Como estaba algo harto de que las actualizaciones de núcleo fuesen como una ruleta rusa, decidí instalar Ubuntu, que es bastante más estable (y con lanzamientos de nuevas versiones cada seis meses). Por desgracia sólo tenía los CDs de Warty, unas dos versiones por debajo de Breezy, la última versión estable. Así que realicé la instalación mínima (introducir “custom” en el arranque del CD de instalación - en Hoary y Breezy se usa “server” en lugar de “custom”) e hice el típico procedimiento de editar el /etc/apt/sources.list y cambiar “warty” por “hoary”. Luego un apt-get dist-upgrade y reiniciar. Mismo procedimiento cambiando “hoary” por “breezy”. Menos de 300 MB de descarga. Muchos menos (quizás ninguno) si hubiese tenido un CD de Breezy a mano.

Una vez instalado el sistema base de la última versión, se usa el apt-get a saco para poner lo que hace falta (básicamente, el paquete ubuntu-desktop). Hice un par de ajustes como instalar Epiphany (mi navegador favorito) y restaurar las cuentas de usuario (no tendría que haberlo hecho de haberme acordado de copiar el directorio /etc anterior).

El problema de Evolution (el gestor de correo que uso) en Ubuntu es que para filtrar correo basura (spam) necesita el paquete spamassassin, y éste no se instala por defecto. Pero aun después de instalar ese paquete, el cliente spamc y activar el daemon, el filtrado de spam de Evolution no funcionaba. Ojeando los foros de Ubuntu, parece que no soy el único al que le pasa, pero todavía no han encontrado el problema.

Actualización: aunque no está documentado, en Ubuntu no tener instalado el paquete evolution-plugins desactiva la detección con spamassassin. Es necesario instalar ese paquete y entrar y salir de la sesión para que funcione.

Por suerte, buscando en el google, he encontrado un buen artículo que explica cómo configurar Evolution para usar el sistema antispam bogofilter (que se instala con ubuntu) en lugar de spamassassin. Lo malo es que requiere intervención manual para que los spams no detectados se añadan a las reglas de filtrado. Pero por lo demás, parece tirar bien.

10/28/2005

Llamadas al sistema en el núcleo 2.6 de linux

Esta mañana hemos realizado en clase de Diseño de Sistemas Operativos la práctica 2, de creación de llamadas de sistema en el núcleo (sin usar módulos).

Aunque el guión estaba preparado para un núcleo 2.4, hemos logrado adaptarlo para el 2.6.13.4 con unos cambios mínimos.

En primer lugar, hay que introducir la entrada de la llamada al sistema en la lista. Anteriormente se introducía en este archivo:
/usr/src/linux/arch/i386/kernel/entry.S

Pero ahora se han separado las entradas de llamadas al sistema en un archivo distinto, que es incluído en el anterior. El nuevo archivo es éste:
/usr/src/linux/arch/i386/kernel/syscall_table.S

La nueva llamada al sistema se introduce al final de la lista, con una entrada así:
.long sys_nueva_llamada /* 375 */

El comentario es el número de la llamada al sistema. Es opcional, pero se recomienda incluirlo cada 5 llamadas por legibilidad del código.

Una vez introducida en la tabla de llamadas, debemos introducir su prototipo en la cabecera unistd.h . En mi caso, lo añadí únicamente al unistd.h de la arquitectura i386, localizado en /usr/src/linux/include/asm-i386/unistd.h. El prototipo se incluye con esta entrada, nuevamente al final de la lista y siempre con cuidado de asignarle un número nuevo, no usado:
#define __NR_nueva_llamada 375

Justo debajo debería aparecer una línea que indica el número de llamadas al sistema en la lista. Debemos incrementar ese número tantas veces como llamadas nuevas hayamos introducido, o podrían darse problemas una vez compilado el núcleo:
#define NR_syscalls 376

Ahora que la nueva llamada consta en el sistema, podemos introducir el cuerpo de la llamada. Esto podemos hacerlo al final del archivo /usr/src/linux/kernel/sys.c . Por ejemplo:

asmlinkage long sys_nueva_llamada(void){

printk("Esta llamada es nueva\n");

return 0;

}

Ya sólo queda recompilar e instalar el núcleo con los cambios y hacer un programa que pruebe que nuestra llamada funciona.

Antes de ese paso, nos encontramos con problemas ya que el código estaba preparado para el núcleo 2.4, mientras que no era compatible con el 2.6.13. Por ejemplo, el puntero p_pptr (que apunta al padre de un proceso en la estructura task_struct) ahora es llamado parent.

También fue necesario cambiar la función verify_area (deprecada en el 2.6) por access_ok . Los parámetros son los mismos, pero el resultado es justo el contrario (mientras que verify_area devuelve 0 cuando se puede acceder al area de memoria indicada, access_ok devuelve 0 cuando no se puede acceder.

7/16/2005

Ataques a SSH

Últimamente parece que se han puesto de moda los scripts que hacen ataques por fuerza bruta (adivinación de contraseñas) a servidores SSH.

Para comprobar si alguien está intentándolo con vuestra máquina, buscad en el archivo /var/log/auth.log entradas del tipo sshd[4376]: Illegal user root from ::ffff:256.266.190.220.
La mejor manera de protegerse ante estos pesados es la siguiente:
  • Evitad que se pueda acceder como root remotamente por SSH. En el archivo /etc/ssh/sshd_config (o el correspondiente a distribuciones que no sean Debian) comprobad que hay una línea que reza PermitRootLogin no. No perderéis nada, con un simple comando su podéis acceder remotamente como usuarios y conseguir privilegios de root introduciendo la contraseña.
  • No uséis cuentas con los siguientes nombres de usuario: admin, test, testing, public, user, guest, staff, backup, etc. En general procurad elegir nombres de usuario difíciles de imaginar por desconocidos (por ejemplo el nombre propio seguido de las dos últimas cifras de tu DNI). Al usar ataques por diccionarios, las primeras cuentas que se prueban son aquellas cuyo nombre ha funcionado antes.
  • Elegid bien las contraseñas. Mezclad siempre cifras y letras, con más de 6 caracteres (recomiendo un mínimo de 8 ). Así será más difícil que den con la contraseña a base de prueba y error.
Si se siguen estos pasos, es difícil que logren hacerse con una cuenta. En mi caso llevo un mega de registro llenito de intentos de acceso fallidos. Con nombres de usuario tan rocambolescos como “myrhodesiaiscom”.