lunes, 2 de noviembre de 2020

TryHackMe: Aprendiendo Linux (cuarta parte)



Vuelvo a estar por aquí, esta vez con la cuarta entrega de la sala Aprende Linux, de TryHackMe. Había pensado hacerla en dos partes, porque es un poco larga, pero al final me he decidido a hacerlo de una sentada, así teneis algo con lo que entreteneros hoy.

Solo queda una entrega, la sección 6, así que después de esa entrega pasaremos a otro tema distinto de Linux, aunque seguramente también utilizaremos lo aprendido aquí, ya que normalmente las distros que se utilizan en el mundo del hacking ético son Linux.

Solo me queda agradeceros vuestras visitas, y espero que os esté gustando este pequeño tutorial sobre Linux.


Tarea 22: [Sección 5: Operaciones avanzadas con archivos] – Intro

Al igual que en Windows, los archivos son bastante complejos. Existen múltiples parámetros distintos que deben ser modificados para permitir que ciertos usuarios puedan leer, escribir o ejecutar ciertos archivos. Esta sección cubrirá la modificación de estos parámetros.

 

Tarea 23: [Sección 5: Operaciones avanzadas con archivos] – Un poco de trasfondo

Recuerda que ls tiene diferentes banderas que permiten ver la información acerca de distintos tipos de archivos.

 

Esta imagen tiene todos los atributos que cubriremos en esta sección. Nos interesan, principalmente, los tres marcados aquí:


Estos atributos son (en orden) los permisos de archivo, el propietario del archivo y el grupo en el que está el archivo en cuestión.

Las próximas tareas irán en la línea de cómo modificar estos atributos.

 

Tarea 24: [Sección 5: Operaciones avanzadas con archivos] – chmod

chmod permite configurar los distintos permisos de un archivo, y controlar quién puede leerlo. La sintaxis de este comando normalmente es chmod <permisos> <archivo>.

Lo interesante es cómo se configuran estos permisos. Se hace usando un número de tres dígitos, donde cada dígito controla un permiso específico. Es decir, el primer dígito controla los permisos para el usuario propietario, el segundo dígito controla los permisos para el grupo, y el tercer dígito controla los permisos para aquellos usuarios que no son el propietario del archivo ni forman parte del grupo.

Aquí os muestro los valores de los dígitos para poder leer, escribir o ejecutar un archivo, o hacer las tres cosas, y de forma matemática podréis calcular el resto de permisos.

Dígito

Significado

1

El archivo puede ser ejecutado

2

El archivo puede ser escrito

3

El archivo puede ser ejecutado y escrito

4

El archivo se puede leer

5

El archivo se puede leer y ejecutar

6

El archivo puede leerse y ejecutarse

7

El arhcivo puede leerse, escribirse y ejecutarse

 

La forma de calcular estos valores es la siguiente. El dígito 1 significa que el archivo puede ser ejecutado, el 2 significa que puede ser escrito y el 4 que puede ser leído. Se consiguen el resto de permisos sumando estos dígitos entre sí. Por ejemplo, 1+2 es 3, lo que significa que el archivo puede ser ejecutado y escrito. Veamos cómo trabaja esto en perspectiva:

Comando:

Significado:

chmod 341 archivo

El archivo puede ejecutarse y escribirse por el usuario propietario

El archivo puede leerse por los usuarios del grupo al que pertenece

El archivo puede ser ejecutado por cualquier otro usuario

chmod 777 archivo

El archivo puede ser leído, escrito y ejecutado por el propietario

El archivo puede ser leído, escrito y ejecutado por el grupo

El archivo puede ser leído, escrito y ejecutado por cualquier otro usuario

chmod 455 archivo

El archivo puede ser leído por el propietario

El archivo puede ser leído y ejecutado por el grupo

El archivo puede ser leído y ejecutado por cualquier otro usuario

 

ls nos provee de una forma para comprobar los permisos de los archivos en el directorio actual.


Recuerda que los permisos se dividen en tres secciones, usuario, grupo y cualquier otro usuario. Aquí ocurre lo mismo: empezando por el segundo carácter (el primero tiene otro significado), podemos ver que, en orden secuencial, la primera terna de caracteres controlan los permisos para el propietario, la segunda terna controla los permisos para el grupo y la tercera terna controla los permisos para los demás usuarios.


rw significa que puedes “leer y escribir”, lo que quiere decir que el propietario tiene permisos de lectura y escritura. Siguiendo esta lógica, podemos comprobar que los miembros del grupo y el resto de usuarios tienen solo permiso de lectura. Para convertir esto a números, los permisos de este archivo serían 644. Podemos comprobarlo cambiando los permisos.


Cuando intentamos cambiar los permisos a 644 no ocurre nada, porque los permisos ya son 644. Lo interesante viene cuando podemos escribir datos en .profile con echo mientras los permisos son 644, pero no podemos si los permisos son 544, porque hemos quitado los permisos de escritura. Siguiendo esta lógica, significa que podemos incluso bloquear nuestros propios permisos para escribir un archivo del que ya somos propietarios.

Nota: Es posible no darle permisos a alguien para un archivo, solo hemos de usar el dígito 0. 770 significa que todo aquél que no sea parte del grupo o no sea el propietario, no tiene permisos de ningún tipo.

  

Tarea 25: [Sección 5: Operaciones avanzadas con archivos] – chown

Recuerda que ls nos muestra nuestro nombre dos veces:


Estos atributos son el usuario y el grupo, respectivamente. Recuerda también que podemos editar los permisos para estos atributos, aunque también podemos cambiar los atributos en sí. Esto se hace usando el comando chown, el cual nos permite cambiar el propietario y el grupo a cualquier archivo. La sintaxis para este comando es chown usuario:grupo archivo. Por ejemplo, si queremos cambiar el propietario del archivo a shiba2 y el nombre del grupo también a shiba2, utilizamos chown shiba2:shiba2 archivo.

Nota: Solo puedes usar el comando chown si tú eres ese otro usuario, lo cual significa que la mejor manera de hacerlo es con el usuario root (administrador).


También puedes usarlo sin especificar el grupo. Esto es útil si lo único que quieres cambiar es el usuario, pero dejar el grupo igual.

 


Tarea 26: [Sección 5: Operaciones avanzadas con archivos] – rm

Tomémonos un descanso con el tema de los permisos y las matemáticas, y vamos a echar un vistazo a algo que podría destruir tu sistema Linux entero si se usa sin cuidado. rm, como ya debes haber supuesto, significa eliminar (remove), y eso es exactamente lo que hace.


Como puedes imaginar, es algo increíblemente peligroso, ya que puedes borrar algunos archivos importantes, y dejar tu sistema completamente inservible. Es importante señalar que necesitas tener permisos de escritura para el archivo para poder borrarlo, por lo que no podrás hacerlo si eres un usuario regular.


Tarea 27: [Sección 5: Operaciones avanzadas con archivos] – mv

mv te permite mover archivos de un sitio a otro. La sintaxis para este comando es mv <archivo> <destino>. Si queremos mover un archivo a nuestro directorio de usuario, habremos de escribir mv archivo ~.


Nota: También podemos usar mv para cambiar el nombre de un archivo, mv archivo ~/ghfds renombrará el archivo a ghfds.


 

Tarea 28: [Sección 5: Operaciones avanzadas con archivos] – cp

cp hace básicamente lo mismo que mv, con la salvedad de que crea un duplicado del archivo (lo copia). La sintaxis es la misma que en mv, cambiando el mv por cp, cp <archivo> <destino>.


 

Tarea 29: [Sección 5: Operaciones avanzadas con archivos] – cd && mkdir

En Windows existen las carpetas. Éstas te permiten almacenar múltiples archivos en un solo grupo, lo que hace más sencilla la organización y el acceso a los mismos. Linux tiene exactamente lo mismo, excepto que en este caso se llaman directorios.

Linux permite cambiar la dirección del directorio actual mediante el uso del comando cd. La sintaxis de este comando es cd <directorio>.


Se permite tanto el uso de rutas relativas como de rutas absolutas. En la línea de comandos hay una parte que nos muestra exactamente el directorio en el que estamos, así no nos perderemos nunca.

Esto nos lleva a mkdir. Ocasionalmente querrás crear un nuevo directorio para almacenar archivos dentro, y eso se hace usando mkdir. La sintaxis es mkdir <nombre del directorio>.


Nota: Como has podido comprobar, ls también nos muestra los directorios.

 

Tarea 30: [Sección 5: Operaciones avanzadas con archivos] – ln

ln es algo más complicado, porque tiene dos formas distintas de uso. Una de ellas es lo que llamamos “hard linking”, lo que duplica completamente un archivo, y enlaza el duplicado a la copia original. Esto quiere decir que todo lo que se haga en el enlazado, se lleva a cabo también en el original. La sintaxis es ln original destino.


Es importante tener mucho cuidado con este tipo de enlaces, ya que dependiendo de lo que estés haciendo, fácilmente puedes borrar datos de un archivo.

La otra forma de enlazar es con enlaces simbólicos (symlink). Mientras que con el hard link el archivo contenía los datos del original, en un enlace simbólico creamos tan solo una referencia. Es decir, el enlace simbólico actual no tiene ningún dato en él, es solo una referencia a otro archivo.

La sintaxis para un enlace simbólico es exactamente la misma, pero usaremos la bandera -s para crear el enlace simbólico, por lo que quedaría ln -s <archivo> <destino>.


ls incluso nos muestra que es un enlace simbólico, señalando con la flecha el archivo al que hace referencia. Es importante ver los permisos del enlace simbólico. Tiene permisos completos 777, lo cual significa que puedes ejecutar el enlace, pero como es tan solo una referencia, realmente tiene los mismos permisos que el archivo original.


 

Tarea 31: [Sección 5: Operaciones avanzadas con archivos] – find

find es un potente comando, aunque increíblemente simple. Permite hacer precisamente lo que dice, encontrar archivos. Esto se hace listando todos los archivos en el directorio actual, por lo que si ejecutamos find /tmp listará todos los archivos en /tmp.


Es importante darse cuenta de que find es recursivo, por lo que busca en todos los directorios que haya en el directorio indicado. Esto significa que, si ejecutamos el comando find /, se listarían todos los archivos en el sistema operativo. Otra cosa importante es que solo listará los archivos de los directorios sobre los que tienes permiso de acceso, lo que quiere decir que no puedes listar todos los archivos siendo cualquier usuario.

El verdadero poder de este comando viene de los parámetros que se le pueden pasar. Puedes usar find directorio -user usuario para listar todos los archivos propiedad de usuario; puedes usar find directorio -group grupo para listar todos los archivos propiedad de un grupo. La posibilidad de personalización del comando es su característica más poderosa.


Este es un comando del cual recomiendo leer bien la página de manual para aprender todas sus opciones. Es de un valor incalculable cuando trabajamos con archivos.

 

Tarea 32: [Sección 5: Operaciones avanzadas con archivos] – grep

Puedo decir sin reservas que grep es uno de los comandos más útiles a aprender. Nos permite encontrar datos dentro de datos. Cuando trabajamos con archivos largos, o con una salida larga, es sin duda la mejor manera de acotar la salida para encontrar de una forma más sencilla lo que andamos buscando. La sintaxis del comando es grep <cadena> <archivo>, aunque el archivo es opcional si estás usando tuberías.

Nota: Puedes realizar la búsqueda en varios archivos a la vez, lo cual quiere decir que puedes, teóricamente, hacer grep <cadena> <archivo1> <archivo2>.

Por ejemplo, digamos que sabes el nombre de un archivo llamado test1234, pero no sabes dónde está guardado en tu sistema. find se puede utilizar para listar todos los archivos del sistema operativo, y grep se utiliza para encontrar el archivo buscado.


¿Qué ocurre si tienes un montón de datos en un archivo, y quieres buscar la cadena hello en él, y la línea en la que se encuentra?


Estoy seguro de que puedes ver la utilidad de este comando. Cuando buscamos en logs un mensaje de error, cuando buscamos en archivos con gran cantidad de datos, cuando buscamos cada archivo dentro de un directorio buscando esa línea que necesitamos cambiar.

Otra cosa importante a destacar es que grep soporta expresiones regulares, por lo que la sintaxis se puede convertir en grep <expresión regular> <archivo>. Desafortunadamente, las expresiones regulares quedan fuera del temario de esta sala, pero te recomiendo encarecidamente que leas al respecto de ellas, ya que incrementarán el poder de tu uso de grep.

No hay comentarios:

Publicar un comentario