#####################################
## HACKINDEX ##
## http://www.hackindex.org ##
#####################################
Titulo: La pantalla negra IV
Autor: Lokutus
Tema: Linux
La información incluída en este documento es expuesta en base a un interés educativo. HackIndex no se hace responsable del uso de dicha información.
El siguiente documento es propiedad de HackIndex y de su autor, pudiendo ser distribuído de forma totalmente libre y sobre cualquier tipo de soporte siempre y cuando se respete el formato original, se cite a A.H.E. como fuente, se incluya un enlace actualizado al documento o a la web del grupo: http://www.hackindex.org ; y se incluya este disclaimer en su totalidad y sin modificación alguna.
Queda extrictamente prohibida su distribución con fines lucrativos, cuando se altere su contenido sin consentimiento o cuando se incumpla cualquier otra condicion citada anteriormente en el presente disclaimer.
#####################################
Y una vez más entramos en nuestro sistema. Vamos a ver que tipos de ficheros tenemos.
| Linux Debian (Potatoe)Login: genaro password: [genaro]$_ |
Vimos en un capítulo anterior, que con la órden “cat”, podemos ver el contenido de un fichero.
| [genaro]$ cat fichero.txt Esto es el contenido de mi fichero [genaro]$ _ |
Pero vamos a cotillear otros ficheros, (si estas accediendo con un telnet no hagas la siguiente órden), por ejemplo, vamos a ver que tiene el fichero “less” por dentro.
| [genaro]$ cat /usr/bin/less dsfgvrtyv456v3ty 45 tg fgf f wf werv345v v 4345v2345v45v3 (pitido)sdf df sdfsd(pitido) df f wef wefwe(requetepitido) sdf sdf df sdfsdf [cosas muy raras]$ _ |
Hemos visto aparecer en la pantalla una sucesión de símbolos raros, pitidos, e incluso, se nos ha desconfigurado la consola.
Si tecleamos algo, las letras han sido cambiadas por símbolos semigráficos.
Para dejar la consola como estaba, se usa la órden “reset”, también se restaura solo cada vez que se rearranca el ordenador, aunque de todas formas, cada vez es más raro que se desconfigure el terminal.
Vamos a entrar en otra sesión. Linux, puede disponer en su consola de varias sesiones virtuales, por defecto hasta siete, pulsando la combinación de teclas “Alt + F2″, vamos a la sesión 2, para volver pues “Alt + F1″, podemos combinar “Alt ” con las teclas F1 hasta F6. F7 normalmente está reservada para XWindow, y para conmutar de X Window a modo texto, es necesario pulsar además la tecla “Control”.
| Linux Debian (Potatoe)Login: genaro password: [genaro]$ _ |
Cuando hemos volcado el fichero “less”, nos ha salido los símbolos raros, por que “less” no es un fichero para ser leido, no es un fichero de texto plano, y puede contener, y contiene carácteres que no son imprimibles en la salida estandar.
Para saber que tipo de fichero es un fichero determinado, tenemos la órden “file”.
| [genaro]$ file /usr/doc/FAQ/txt/Linux-FAQ /usr/doc/FAQ/txt/Linux-FAQ: English Text [genaro]$ file /usr/doc/FAQ/html/Linux-FAQ-1.html /usr/doc/FAQ/html/Linux-FAQ-1.html:HTML document text [genaro]$ file /usr/bin/less /usr/bin/less: ELF 32-bit LSB executable, Intel 80386, version 1,dynamically linked (uses shared libs), stripped [genaro] _ |
Del primer documento nos dice que es de texto, o sea, se puede volcar con “cat”, del segundo, que es html, también se puede volcar, aunque veremos el fuente en HTML, y no como lo veríamos con un navegador como el Linx. Y del tercero, nos dice que es un programa. Con este programa, podemos ver los otros dos ficheros.
El comando file, reconoce entre muchos tipos de ficheros, gif, jpeg, midi, y incluso ejecutables de otros sistemas operativos, y no se deja engañar por la extensión del fichero.
Los ficheros, además de crearlos con un editor de textos, se pueden copiar, mover, y borrar.
| [genaro]$ cp /usr/bin/less . [genaro]$ ls -l less -rwxr-xr-x 1 genaro users 81236 Mar 21 22:54 less [genaro]$ _ |
Con la órden anterior, “cp”, hemos copiado el fichero less a nuestro directorio de trabajo, y como esta copia es nuestra, el propietario del fichero es “genaro”, y el grupo propietario es “users”. Con el puntito, hemos indicado el directorio al que queremos copiar el fichero, puesto que “cp” no permite omitir el segundo parámetro y que se tome el directorio actual como destino.
Vamos a observar por un momento el programa “less” original.
| [genaro]$ ls -l /usr/bin/less -rwxr-xr-x 1 root root 81236 Aug 28 1999 /usr/bin/less |
El tamaño es el mismo, pero pertenece al usuario “root”, o sea, el superusuario, y su grupo propietario es “root”, la fecha de creación también a cambiado.
Si observamos los permisos del fichero,
| -rwxr-xr-x |
El propietario del fichero, o sea, root, es el único que puede escribir en less (rwx), el grupo propietario sólo puede leer y ejecutar como programa (r-x), y nosotros, los demás usuarios, igual, (r-x).
El primer carácter, indica tipo de fichero:
“-” Fichero ordinario, como programas, mpeg, mp3, txt, …
“d” Directorio, se accede a el con “cd”, “ls”, etc.
“c” Fichero de control de dispositivo en modo caracter.
“b” Fichero de control de dispositivo en modo bloque.
“s” Socket de tipo Unix.
“l” Enlace simbólico.
Si observamos nuestro fichero, tiene los mismos permisos, “-rwxr-xr-x”, pero como nosotros somos el propietario del fichero, podemos escribir en el, e incluso podemos borrarlo si queremos.
TIP: el usuario “root”, también puede acceder y escribir en nuestros ficheros aunque quitemos los permisos.
| [genaro]$ mkdir OtroDir [genaro]$ cd OtroDir [OtroDir]$ _ |
Creamos una carpeta nueva, y entramos en ella. Vamos a mover el fichero “less”
| [OtroDir]$ mv ../less . [OtroDir]$ ls -l -rwxr-xr-x 1 genaro users 81236 Mar 21 22:54 less [OtroDir]$ _ |
Si queremos borrarlo, usamos la órden rm
| [OtroDir]$ rm less [OtroDir]$ _ |
Nuestra copia de “less” ya no existe. Un poco de teoría:
¿Sabéis lo que es un inode?.
Supongamos que tenemos una partición vacía de cualquier sistema operativo tipo Unix, SCO, BSD, ext2fs …
En esa partición vacía, hay una o más zonas, en la que no podremos guardar nuestros datos, pues son para uso administrativo del sistema operativo, esa zona, se divide en partes o “cachitos”, llamados inodes, normalmente no suelen tener más de 100 octetos, aunque pueden ser de mayor tama$ntilde;o, dependiendo del sistema de ficheros.
Cuando creamos un fichero vacio, el sistema operativo, rellena de datos un inode, ¿y qué datos son esos?, el nombre del fichero, en qué sectores del disco duro están, su tamaño o longitud, la fecha de última modificación, etc.
Cuando escribimos datos en el fichero, el inode se actualiza, para reflejar los cambios.
Y ahora pregunto, ¿Qué impide que un fichero tenga dos inodes?, nada. El hecho de que un fichero tenga dos inodes, implica, el que está al mismo tiempo en dos sitios con dos nombres diferentes, o en un mismo directorio con dos nombres distintos.
Eso se llama hacer un enlace.
| [genaro]$ ln /usr/bin/less ./paginador [genaro]$ ls -l paginador -rwxr-xr-x 2 root root 81236 Aug 28 1999 paginador [genaro]$ ls -l /usr/bin/less -rwxr-xr-x 2 root root 81236 Aug 28 1999 /usr/bin/less [genaro]$ _ |
Fijaros en dos detalles, despues de los permisos, “-rwxr-xr-x” hay un número 2, donde antes había un “1″. Eso quiere decir, que ese número, es el número de inodes que tiene ese fichero. antes tenía un inode, y ahora uno.
¿Cual es el segundo detalle?, que el fichero “paginador” sigue perteneciendo a “root”, si no fuese así, sería un fallo de seguridad, pues para acceder a cualquier fichero, bastaría con hacer un enlace y podremos modificarlo a nuestro antojo.
Cuando usamos la orden rm para borrar un fichero, lo que hace es eliminar un inode, pero los demas inodes siguen existiendo, el fichero, bloque de datos del fichero, sólo se borra cuando no quedan más inodes.
Tick: repito, cuidado con “>”. Ver capítulo III
Es posible que al intentar hacer el enlace, aparezca un mensaje como el siguiente:
ln: no se puede crear un enlace duro de `./less’ a `/usr/bin/less’: Enlace cruzado entre dispositivos no permitido.
Eso es debido a que se está intentando hacer un enlace a un sistema de ficheros diferente. Por ejemplo:
| [genaro]$ df Filesystem 1k-blocks Used Available Use% Mounted on /dev/hda7 606405 188388 386692 33% / /dev/hda1 23300 2655 19442 12% /boot /dev/hda9 1756260 820291 845204 49% /home /dev/hda8 1554262 655666 818273 44% /usr /dev/hda6 85520 16686 64418 21% /var [genaro]$ _ |
Con la orden “df” vemos que particiones tenemos en el disco duro, nosotros estamos en el directorio “/home/genaro”, que está en la partición /dev/hda9 y la órden “less” está en el directorio “/usr/bin” que está en la partición /dev/hda8
A este tipo de enlace se le llama enlace duro. También se pueden hacer enlaces duros, aunque muchos unices no lo permiten, y en muchos sistemas operativos, sólo está permitido a “root” y está fuertemente desaconsejado, eso es debido a que muchas aplicaciones como las utilidades de backup, y todas aquellas que exploren el disco duro para hacer o buscar algo, podrían entrar en un bucle infinito, y terminarían fallando.
Otro tipo de enlaces, son los enlaces simbólicos, estos enlaces son de alguna forma similares a los accesos directos de Windows, o mejor dicho, los accesos directos de Windows son como los enlaces simbólicos de Unix.
Si haceis analizado alguna vez un acceso directo de Windows, en realidad es un fichero PIF, o sea, un fichero que contiene el nombre de otro fichero.
Los enlaces simbólicos son un fichero con el nombre de otro fichero, y tratado de forma especial por el sistema operativo para que lo trate como si fuera el fichero al que apunta.
Para crear un enlace simbólico
| [genaro]$ ln -s /usr/bin/less ./pag-simbolico [genaro]$ ls -l pag-simbolico lrwxrwxrwx 1 genaro users 13 Mar 22 00:24 pag-simbolico->/usr/bin/less [genaro]$ _ |
Observe como el fichero tiene ahora la letra “l” como primer caracter, la “l” indica enlace simbólico.
Por último nos queda por ver los dispositivos controladores. Están todos en el directorio /dev
Existen dos tipos, de caracter y de bloque. Los dispositivos de bloque, tienen soporte de buffer y se accede mediante grandes bloques de datos al mismo tiempo, un ejemplo, son las particiones del disco duro, y el propio disco duro.
/dev/hda Primer disco duro IDE
/dev/hda1 Primera partición del primer disco duro
/dev/sdb Segundo disco SCSI
Si volcaramos con la órden cat un fichero a uno de estos ficheros, escribiríamos directamente a estos ficheros, y por lo tanto, machacaríamos algo, como la tabla de particiones, o el superbloque de una partición linux, o el arranque de un Windows. Por ese motivo, sólo “root” o programas con permisos de root, puede acceder a estos ficheros.
Los ficheros de caracter, como su nombre indica, se accede a ellos caracter a caracter.
/dev/modem por ejemplo, suele ser un enlace simbólico a un dispositivo de caracter
| [genaro]$ ls -l /dev/modem lrwxrwxrwx 1 root root 10 Dec 22 01:05 /dev/modem ->/dev/ttyS1 [genaro]$ ls -l /dev/ttyS1 crw——- 1 root tty 4, 65 Mar 21 22:11 /dev/ttyS1 [genaro]$_ |
Los programas que acceden al modem, lo hacen como si fuera un fichero convencional, (para los que conozcan el lenguaje “C” fopen(), fread(), fwrite(), fclose(), fprintf(), etc.).
| [genaro]$ tty /dev/tty2 [genaro]$_ |
La órden anterior, “tty”, nos dice cual es el controlador de dispositivo de nuestra sesión. /dev/tty
Si el usuario “root” estuviera conectado mediante un telnet, podría hacer una gamberrada tal y como
| [root] # echo “Tonto el que lo lea” > /dev/tty2 |
Y en mi pantalla aparecería ese mensaje.
Tick: En las academias, donde todo el mundo consigue por ingeniería social el password de root, es muy posible que cuando la gente se aburre, no se pueda trabajar debido a que todo el mundo envíe mensajitos usando este método.
También es común gamberradas más gordas volcando ficheros de todo tipo.
Como ejercicio de la semana, os propongo a los que tengais tarjeta de sonido y micrófono, que grabeis un fichero de sonido desde el micrófono.
| cat /dev/audio > grabación.raw |
Y posteriormente lo envieis a los altavoces
| cat /grabacion.raw > /dev/audio |
No me acuerdo como se cortaba la grabación, ¿control + “c”?
Loading...