Artículo realizado por
Pedro Ferrera "BaDBoY"




Capítulo 2.
Manejando Linux, entendiendo Unix

n esta unidad aprenderéis:




Si estáis aquí se supone que sabéis:

� Qué es LINUX ?

LINUX es la versión del sistema operativo multiusuario UNIX para PC. Se trata de un SO de dominio público y totalmente gratuito que se distribuye por Internet y por revistas. Consultad el primer capítulo del curso introductorio al Linux en la revista Macedonia para obtener más información acerca de qué es Linux y cómo conseguirlo. Así mismo, en la próxima lección obtendrás información más técnica sobre Linux así como algunos de sus bugs más conocidos.

En este capítulo vamos a tratar a partir del Linux los comandos más básicos de los sistemas UNIX en general, el sistema de ficheros y de directorios, el sistema multiusuario de UNIX...

Consigue Linux y empieza a leer este capítulo.

Iniciarse en el entorno Linux

Antes que nada, espero que hayáis pensado en instalarlos el programa LILO a no ser que queráis usar vuestro PC exclusivamente con Linux. El programa LILO viene con muchas distribuciones de Linux y sirve para poder elegir, cuando arranca el ordenador, entre Windows y Linux.

Después de teclear la palabra Linux en el prompt del LILO veremos el sistema de arranque de este sistema, cómo nos va detectando cada dispositivo, etc...

Finalmente aparecerá el prompt de inicio

"

Welcome to Linux 2.0.1

Host Login:

"

(Host es el host que hemos asignado a nuestro ordenador)

Cuando instalamos Linux entramos como root, porque por defecto la cuenta de root ya está creada. Así que solo tenemos que entrar como root y ya estamos dentro, no nos pedirá ningún password. Una vez dentro, vamos a establecer un password para que nadie más que nosotros pueda entrar como root. No seais lamers y buscad un password realmente difícil de desencriptar, que no sea una palabra sola sino que sea una serie de letras y números que no tengan sentido. Un buen root pone siempre un password de este tipo ya que los hackers suelen utilizar programas de desencriptación asociados a diccionarios (palabras agrupadas según temas) para desencriptar el password, pero todo esto lo explicaré más adelante.

Solo teneis que teclear:

# passwd root

Y a continuación introducir el password que hayáis pensado. Más adelante vamos a ver cómo crear más cuentas y todo lo relacionado con el entorno multiusuario que es Linux.

Ahora echad un vistazo a lo que tenéis delante. Sí, es como un MS-DOS pero con colores (depende de la distribución). Las últimas distribuciones incluyen, además, un entorno gráfico muy parecido a Windows 95, llamado X-Windows, que no voy a explicar cómo instalar porque no es de vital importancia para hackear.

Sistema de ficheros y directorios

Antes que nada tenemos que entender cómo son los ficheros en Linux y en UNIX en general. Pueden tener extensiones más extensas a tres caracteres, que es el máximo en MS-DOS y en Windows. Con un listado detallado (más adelante veremos cómo hacerlo) obtenemos una información así:

                                                              *   1        2        3

(.)nombre del fichero.(extensión) bytes _ _ _ _ | _ _ _ | _ _ _

Si aparece el punto delante del nombre del fichero es que es un fichero oculto.

* - aquí puede haber una D, que nos indicaría que se trata de un directorio, no de un fichero

  1. En estas tres casillas aparecen los accesos que tiene el owner sobre este fichero. El owner de un fichero es el que lo ha creado y el que puede cambiar los accesos de éste. Los accesos de un fichero son:

  2. R - Si aparece una R es que se puede leer

    W - Se puede escribir, alterar, modificar

    X - Si es ejecutable, se puede ejecutar

    De este modo, si en las tres casillas del owner hay una R, una W y una X es que el propietario de este fichero tiene todos los accesos sobre éste, cosa que es normal.

  3. Los accesos que tienen que pertenecen al mismo grupo que el owner. En sistemas UNIX los usuarios pueden clasificarse por grupos por el root.

  4. Los accesos que tiene cualquier usuario del sistema sobre el fichero.

Es importante que adquiráis la costumbre de interpretar los accesos de cada fichero que queráis examinar. Cuando estéis hackeando tendréis que conocer siempre vuestras posibilidades sobre un fichero determinado.

En cuanto al sistema de directorios, es parecido al de MS-DOS. Los directorios pueden variar de un sistema UNIX a otro, pero todos tiene estos:

/usr/ - es donde están las cuentas de inicio de cada usuario

/adm/ - directorio exclusivo para el admin del sistema

/root/ - directorio de inicio para el admin del sistema

Comandos más utilizados para manejar ficheros

- Cp - Este comando sirve para hacer copias de un fichero. Y esta es su sintaxis:

cp (fichero a copiar) (fichero destino)

Así, si queremos hacer una copia de un fichero llamado "hacking.13886" a uno que simplemente se llame "138" haremos:

# cp hacking.13886 138

El fichero a copiar sigue intacto, solamente hemos hecho una copia sin borrar el fichero original.

- Rm - Este comando sirve para eliminar uno o más ficheros. Esta es su síntaxi:

rm (fichero a eliminar1) (fichero a eliminar2) (etc)

También podemos elliminar directorios con este comando. Con rm (directorio) eliminamos un directorio suponiendo que esté vacío. Si añadimos la opción -r podemos eliminar directorios llenos, incluso con subdirectorios.

- Cat - Este comando nos permite ver el contenido de un fichero sin editarlo. En un terminal sencillo (que no sea X-Windows), si el contenido es muy largo solo vamos a ver el final de este fichero. Podemos ver el contenido de varios ficheros a la vez, ya que su sintaxis es:

cat (fichero a ver1) (fichero a ver2) (etc)

- Mv - Con este comando podemos mover el contenido de un directorio a otro directorio. Podemos hacer lo mismo con dos ficheros, pero el fichero de inicio queda eliminado al mover todo su contenido al fichero de destino.

mv (directorio/fichero inicio) (directorio/fichero destino)

- Chmod - Nos permite cambiar los accesos de un archivo. Su síntaxis es algo complicada:

chmod (tipo de acceso)+(acceso) (fichero)

Tipo de acceso: Aquí tenemos que escribir una letra, que nos servirá para especificar si queremos cambiar los accesos para todos los usuarios, para el owner, o para los del grupo:

(a)ll, accesos para todos

(o)wner, accesos para el owner

(g)roup, accesos para el grupo

Acceso: Aquí tenemos que especificar cualquiera de estos tres accesos: R, W, X, que como ya sabéis son de lectura, de escritura y de ejecución respectivamente.

Ejemplo: Si queremos cambiar el acceso del fichero host.equiv para que todos los usuarios puedan modificarlo (algo que no debéis hacer nunca) haríamos:

# chmod a+w host.equiv

- Find - Es un buen buscador presente en casi todos los sistemas UNIX que nos permite encontrar cualquier fichero. Esta es su sintaxis:

find . -name (razón de búsqueda)* -print

Naturalmente es un programa complejo y se puede usar de muchas maneras pero esta es la manera en que yo lo uso casi siempre. La razón de búsqueda es simplemente un trozo del nombre de un fichero o el nombre del fichero. Por ejemplo, si sabemos que hay un fichero que se llama lilo pero no sabemos como acaba y tampoco donde está, pondremos:

# find . -name lilo* -print

Nos encontrará varios ficheros con su ruta completa y decidiremos cuál es el que estábamos buscando, que en este caso sería lilo.conf

/etc/lilo.conf

- File - Este comando, en cualquier sistema UNIX nos permite obtener información básica acerca de un fichero, no el contenido del mismo. Podemos ver en pantalla la información de varios ficheros a la vez ya que su síntaxis es:

file (fichero1) (fichero2) (etc)

Comandos más utilizados para moverse por los directorios

- Pwd - Si escribimos pwd en el prompt, obtenemos la ruta completa del directorio en el que estamos. Si simplemente sale una / es que evidentemente estamos en la raíz.

# pwd

/usr/

- Ls - Hace un listado de los ficheros del directorio activo. Si sólo escribimos Ls, veremos los ficheros que son visibles. Con ls -a veremos el listado de todos los ficheros. Con ls -l veremos, además todos los detalles de un fichero (excepto el contenido del mismo).

Atención: En un sistema UNIX, hay ficheros visibles y ficheros ocultos. Los ficheros ocultos llevan delante un punto (.), esto es muy importante y debes aprenderlo. Haz siempre un listado con los parámetros -la para ver todos los detalles del directorio.

- Cd - En Linux podemos desplazarnos por los directorios igual que en MS-DOS, con el comando CD. Hay unas ligeras diferencias. Cuando queremos cambiar al directorio anterior en vez de escribir

# cd..

Unknow command

Tenemos que escribir:

# cd ..

#

Eso es, con un espacio entre los dos puntos y el comando CD.

En muchos sistemas UNIX, si simplemente tecleamos CD nos movemos al directorio de inicio.

# cd

# pwd

/root

- Mkdir - Con este comando podemos crear directorios. Funciona como el comando md de MS-DOS.

Entorno multiusuario UNIX

Cuando decimos que UNIX es un sistema multiusuario nos referimos a que es un sistema diseñado para que pueda ser usado por usuarios distintos. Así, un sistema UNIX puede ser utilizado para que varios usuarios remotos (Internet) o locales (LAN, Ethernet) puedan conectarse a él y puedan estar dentro del sistema simultáneamente. Esto ya nos supone un problema, pues si nos paramos a pensar, en teoría cualquier usuario que pudiese conectar con el sistema podría hacer cualquier tarea, cualquier acción como la haría el propietario del sistema; en definitiva este usuario podría manejar a su antojo el ordenador, algo que sin duda el propietario del mismo no está dispuesto a permitir. Por eso se crean una serie de accesos, de prioridades, para hacer más fácil la convivencia entre los diferentes usuarios de un sistema UNIX (Más adelante aprenderemos a cambiar nuestro acceso para hacer lo que precisamente el propietario del sistema no quiere que hagamos, manejarlo como lo haría él).

Así pues, dentro de un sistema UNIX hay que diferenciar dos clases de usuarios:

1 - El usuario ordinario. Un usuario ordinario entra en el sistema gracias a una cuenta predefinida por el root, que consta de login y password, en un directorio de inicio. El login es el nombre por el cual los otros usuarios pueden identificarlo. El directorio de inicio es donde puede escribir o borrar ficheros, crear o borrar directorios, ejecutar programas... Este tipo de usuario puede ejecutar programas hechos por él ya sea en shell o en C y programas genéricos que cualquiera pueda ejecutar como es el ejemplo de un editor de texto. Generalmente no puede moverse de su directorio de inicio, lo que lo restringe de otras áreas del sistema. Cada usuario ordinario tiene en su directorio un archivo llamado .profile que es como un AUTOEXEC.BAT de MS-DOS, contiene comandos que, cuando hace un login al sistema, se ejecutan. Esto es importante que lo sepas porque se pueden crear caballos de troya en archivos .profile.

El ejemplo de este tipo de usuario puede ser el del típico estudiante universitario que se conecta a un sistema UNIX para escribir documentos relacionados con su carrera, o si es un estudiante de informática para aprender el entorno UNIX y saber programar dentro de él, etc...

El directorio de inicio es visible por el root como /usr/login, donde login es el nombre del usuario, es decir, su login.

Podemos saber si somos un usuario ordinario si tenemos como prompt el signo:

$

Es decir, si antes de escribir un comando tenemos este signo.

Al escribir who nos debe salir nuestro login.

$ who

juan178

$

2 - El usuario root o, en su defecto, el usuario con acceso de root. También llamado superusuario, es el usuario que tiene acceso a todo el sistema sin restricción alguna. En un principio solo el propietario del sistema puede acceder como root a su propio sistema, pero los hackers basan muchas veces sus ataques en intentar conseguir accesos de root a partir de una cuenta ordinaria. Es decir, que en cualquier sistema UNIX se puede llegar a conseguir acceso de root si se es lo suficientemente hábil. El principal problema de los sistemas UNIX desde mi punto de vista es que el root, como cualquier usuario tiene su propia cuenta. De esta manera podemos llegar a alterarla o incluso a crear otra cuenta con acceso de root. Más adelante veremos todo esto.

Sabremos si somos root si tenemos como prompt este signo:

#

Y si aún no nos lo creemos podemos escribir el comando who.

# who

root

#

Las cuentas, el fichero passwd

Ahora ya sabes que hay dos tipos de usuarios bien distinguidos en un sistema UNIX. Si un usuario puede entrar en un sistema es porque tiene una cuenta, esto lo entendemos, ahora bien � Cómo sabe el sistema qué usuarios pueden entrar y cuáles no ? A través del fichero passwd. Localicémoslo. El fichero passwd se encuentra, en la mayoría de sistemas UNIX en el directorio /etc. Es sólo modificable por el root, pero leíble por todos los usuarios. Eso es un gran fallo ya que se puede aprovechar muchas veces para desencriptar contraseñas, algo que vamos a ver en el capítulo 4.

El fichero passwd contiene las cuentas del sistema, es decir, contiene la información de todos los usuarios que pueden hacer login al sistema, independientemente de su acceso (ordinario o root).

Es interesante que empieces a meterte en sistemas que acepten cuentas anónimas (por ejemplo, FTP's) para que veas cómo es el fichero passwd. La mayoría de FTP's dejan acceder como anonymous al sistema, sin ningún password. Consulta el final de esta unidad para hacer este ejercicio.

Sabemos, pues, que el fichero password lleva las cuentas de todos los usuarios del sistema. Cada linea del fichero es una cuenta, y en esta linea hay representados estos elementos:

En otra unidad veremos muchas más cosas sobre el fichero passwd, y aprenderemos a crackearlo y a aprovecharlo.

Desde nuestro LINUX podemos crear cuentas, con el comando adduser. Simplemente hay que teclear adduser y ir contestando a las preguntas que va haciendo.

Ejercicios para LINUX

Ahora, conviene que vayas practicando con tu LINUX. Te recomiendo que hagas estos ejercicios:

1 - Crea directorios y ficheros. Por ejemplo, puedes empezar por crear un directorio con tu nombre y empezar a escribir un diario de tus experiencias como hacker.

Para editar o crear ficheros puedes usar el editor "vi". Simplemente tienes que escribir "vi" y el nombre de fichero que quieras crear/editar. Inicialmente, con la letra A empiezas a escribir. Con ESC activas el modo de no-escribir con el que puede borrar líneas apretando dos veces la tecla R, con ":wq" salvas lo que has escrito y con ":q!" quitas sin salvar.

Pero mejor aprende a usar el editor ED, porque el Vi no está en todos los sistemas UNIX.

2 - Configura tu Linux para el acceso a Internet. Esto puedes conseguirlo buscando información al respeto. Consulta el curso de Linux de Macedonia, o busca por Internet, seguro que encontrarás programas o información para hacerlo.

3 - Haz sesiones en FTP's. Esto lo puedes hacer escribiendo FTP y el host de la máquina en la que quieres entrar. Muchos FTP's aceptan usuarios anónimos, así que no hay problema. Busca y bájate el archivo passwd y empieza a mirártelo.

4 - Curiosea sanamente en tu LINUX. Esto quiere decir que no toques algo si no sabes lo que es, simplemente dedícate a moverte por los directorios y a observar qué hay. Siempre con mucho cuidado.

5 - Crea cuentas, con el comando adduser.

Haz lo que quieras en tu LINUX siempre que vayas con cuidado. El curso de LINUX de la revista Macedonia no debes dejar de consultarlo nunca. Por mi parte, nos vemos en la próxima unidad. La próxima será una unidad teórica sobre sistemas UNIX (analizaré cada tipo y explicaré sus fallos de seguridad). Podéis enviarme e-mails si tenéis dudas sobre esta lección.

� Nos vemos !



�De vuelta al Aula!