[MANUAL] chmod - modificar permisos en Linux - Parte 1


destapeman

FUCK PUSSYS, YES BADASS
Moderador
Paladín de Nodo
Jinete de Nodo
Burgués de Nodo
Noderador
Nodero
Noder
Buenas tardes Noders,

Otro post educativo para la comunidad donde os enseñaré la importancia de saber utilizar la herramienta chmod y lo crítico que puede ser para un host, infraestructura, servicio... el tener una mala configuración de permisos.

Antes de nada veamos que es chmod:
  • Para ello ejecutaremos
    Bash:
    man chmod
    • Nos indica con ese (1) que se trata de un comando, a parte del descriptivo "User Commands" que vemos en el encabezado. Para un archivo de configuración por ejemplo nos aparecería como (5):
      1675880820802.png
    • Vemos que la descripción del nombre nos da un pequeño resumen de lo que hace el comando, modifica los permisos en modo bit.
    • 1675880864909.png
    • Y en la sinopsis del comando, la nomenclatura para poder utilizarlo:
    • 1675880970140.png

Vista la primera parte del man, nos ha quedado claro que chmod es un comando, con el que vamos a poder modificar los permisos de ficheros, directorios y todo lo que se nos ocurra y, la nomenclatura para poder utilizarlo... bueno, eso todavía no, ya que nos indica que podemos cambiarlo del modo "simbólico" o del modo octal, vamos a entrar en detalles:

MODO SIMBÓLICO


El formato del modo simbólico es [ugoa...][[+-=][perms...]...] donde perms es cero o más letras del conjunto rwxXst, o una sola letra del conjunto ugo. Se pueden dar múltiples modos simbólicos, separados por comas.

¿Qué es ugoa?

Las letras ugoa controlan el acceso de los usuarios al archivo que se modificará:
  • El usuario propietario (u).
  • Otros usuarios del grupo del archivo (g).
  • Resto de usuarios que no pertenezcan al grupo del archivo (o).
  • Todos los usuarios (a).
Si no se indica ninguno equivale a poner (a) por defecto, pero los bits definidos en la máscara de usuario no se ven afectados.

¿Cómo funcionan los operadores?

Los operadores sirven para añadir o quitar permisos a los usuarios seleccionados en el anterior punto:
  • El operador + hace que los bits de permisos del archivo seleccionado, se añada a los bits de permisos del archivo.
  • El operador - hace que se eliminen.
  • El operador = hace que se añadan y que se eliminen los permisos no especificados.
Excepto los bits de ID de usuario y grupo establecidos NO MENCIONADOS de un directorio/archivo, no se ven afectados.

¿Qué es rwxXst?

Las letras rwxXst son los permisos persé que queramos modificar, quitar o añadir a los usuarios seleccionados previamente:
  • Permisos de lectura (r).
  • Permisos de escritura (w).
  • Permisos de ejecución (o buscar en directorios) (x).
  • Permisos de ejecución/búsqueda sólo si el archivo es un directorio o ya tiene permiso de ejecución para algún usuario (X).
  • Establecer el ID de usuario o grupo en ejecución (s).
  • Indicador de borrado restringido o sticky bit (quien puede eliminar el archivo/directorio) (t).

En lugar de una o varias de estas letras, se puede especificar exactamente una de las letras ugo: los permisos concedidos al usuario propietario del archivo (u), los permisos concedidos a otros usuarios miembros del grupo del archivo (g) y los permisos concedidos a usuarios que no se encuentren en ninguna de las dos categorías anteriores (o).

Veamos unos ejemplos básicos:

  • Primero vamos a crear un archivo con contenido, para ello utilizaré la forma más sencilla y correcta de crearlo, que es usando redirecciones:
  • Bash:
    echo "echo test" > test.sh
  • 1675881171050.png
Aquí vemos que los permisos por defecto que se nos asignan a la hora de crear el archivo son de lectura y escritura para el usuario propietario, que vemos en la tercera columna para el usuario usuario; permisos de lectura para el grupo del usuario propietario, que vemos en la cuarta columna para el grupo usuario y permisos de lectura también para el resto de usuarios.

Vamos a hacer una prueba simple para confirmar lo que os he dicho, según lo visto anterior, cualquier usuario podría leer lo que pone en el archivo test.sh pero solo el usuario usuario podría modificar su contenido.
  • Para ello primero vamos a comprobar que podemos leer el contenido de test.sh con el usuario usuario y pepe. Con el comando cat podemos leer por pantalla el contenido del archivo:
  • 1675883986417.png
  • Y como esperábamos, podemos leer el contenido del archivo, pero ¿podremos escribir sobre él con ambos usuarios?
  • 1675884160048.png
  • Como vimos anteriormente, se cumple lo que dije. Actualmente solo el usuario propietario del archivo tiene permisos para escribir sobre el mismo, de la misma forma que tampoco podremos ejecutarlo ya que NO tenemos actualmente permisos de ejecución.
  • 1675884306479.png
  • Ahora que tenemos claro los permisos con los que cuenta el archivo test.sh, vamos a modificarlos, por ejemplo para que el usuario propietario pueda ejecutar el script:
  • Bash:
    chmod u+x test.sh
  • 1675884929590.png
  • Se le añade la x al grupo de bits del propietario y confirmamos que se ejecuta el script. Pepe por el contrario sigue sin poder ejecutar el script.
  • 1675885061380.png
  • Lo siguiente que probaré, será a darle permisos al grupo del propietario, ya que pepe está dentro del grupo usuario (grupo que tiene el usuario usuario) por lo que dando permisos al grupo del propietario, pepe podría modificar y ejecutar el script. Ejecutaré el siguiente comando para ello:
  • Bash:
    chmod g+wx test.sh
  • 1675885401749.png
  • Comprobamos ahora que pepe puede modificar y ejecutar el archivo:
  • 1675885494315.png

Pepe y usuario pertenecen al mismo departamento, por eso queremos que ambos puedan ejecutar, leer y modificar el archivo pero el resto de usuario no, ¿por qué un usuario de contabilidad debería de poder leer o escribir sobre un programa al que no debería de estar autorizado?

  • Para ello vamos a removerle todos los permisos al resto de usuarios:
  • Bash:
    chmod o-r test.sh
    ## aquí por ejemplo, sabemos que no tiene ningún permiso más allá de lectura para el grupo de usuarios "o" pero si por ejemplo contase con más permisos, habría que añadirlos
  • 1675885785876.png

Como se ha quedado un post bastante largo hasta aquí, el modo octal lo haré en otro post, no tardaré mucho en subirlo porque tengo el texto más menos desarrollado.

Tened en cuenta el peligro que tiene un mal uso de este comando, si os pasáis dando permisos a un archivo podéis encontraros con una brecha de seguridad muy gorda. Habéis visto que con el comando echo que es un comando que no necesita permisos de administrador, podéis modificar el contenido de un archivo si tenéis permisos para ello. Si por ejemplo un atacante ve un archivo con permisos de ejecución y lectura para cualquier usuario, podría sobrescribir el contenido de ese fichero añadiendo las órdenes que quisiese con echo y descargarse documentación sensible si el propietario del dichero por ejemplo es root o joderos parte del sistema borrando binarios haciendo la administración del servidor imposible o realizar conexiones maliciosas a sitios peligrosos... en fin... lo que se os pueda ocurrir.

Un saludo.
 

Adjuntos

  • 1675881060038.png
    1675881060038.png
    23,7 KB · Visitas: 4

LinceCrypt

Tu lince confiable
Noderador
Nodero
Noder
Buenas tardes Noders,

Otro post educativo para la comunidad donde os enseñaré la importancia de saber utilizar la herramienta chmod y lo crítico que puede ser para un host, infraestructura, servicio... el tener una mala configuración de permisos.

Antes de nada veamos que es chmod:
  • Para ello ejecutaremos
    Bash:
    man chmod
    • Nos indica con ese (1) que se trata de un comando, a parte del descriptivo "User Commands" que vemos en el encabezado. Para un archivo de configuración por ejemplo nos aparecería como (5):Ver el archivo adjunto 22426
    • Vemos que la descripción del nombre nos da un pequeño resumen de lo que hace el comando, modifica los permisos en modo bit.
    • Ver el archivo adjunto 22427
    • Y en la sinopsis del comando, la nomenclatura para poder utilizarlo:
    • Ver el archivo adjunto 22428

Vista la primera parte del man, nos ha quedado claro que chmod es un comando, con el que vamos a poder modificar los permisos de ficheros, directorios y todo lo que se nos ocurra y, la nomenclatura para poder utilizarlo... bueno, eso todavía no, ya que nos indica que podemos cambiarlo del modo "simbólico" o del modo octal, vamos a entrar en detalles:

MODO SIMBÓLICO


El formato del modo simbólico es [ugoa...][[+-=][perms...]...] donde perms es cero o más letras del conjunto rwxXst, o una sola letra del conjunto ugo. Se pueden dar múltiples modos simbólicos, separados por comas.

¿Qué es ugoa?

Las letras ugoa controlan el acceso de los usuarios al archivo que se modificará:
  • El usuario propietario (u).
  • Otros usuarios del grupo del archivo (g).
  • Resto de usuarios que no pertenezcan al grupo del archivo (o).
  • Todos los usuarios (a).
Si no se indica ninguno equivale a poner (a) por defecto, pero los bits definidos en la máscara de usuario no se ven afectados.

¿Cómo funcionan los operadores?

Los operadores sirven para añadir o quitar permisos a los usuarios seleccionados en el anterior punto:
  • El operador + hace que los bits de permisos del archivo seleccionado, se añada a los bits de permisos del archivo.
  • El operador - hace que se eliminen.
  • El operador = hace que se añadan y que se eliminen los permisos no especificados.
Excepto los bits de ID de usuario y grupo establecidos NO MENCIONADOS de un directorio/archivo, no se ven afectados.

¿Qué es rwxXst?

Las letras rwxXst son los permisos persé que queramos modificar, quitar o añadir a los usuarios seleccionados previamente:
  • Permisos de lectura (r).
  • Permisos de escritura (w).
  • Permisos de ejecución (o buscar en directorios) (x).
  • Permisos de ejecución/búsqueda sólo si el archivo es un directorio o ya tiene permiso de ejecución para algún usuario (X).
  • Establecer el ID de usuario o grupo en ejecución (s).
  • Indicador de borrado restringido o sticky bit (quien puede eliminar el archivo/directorio) (t).

En lugar de una o varias de estas letras, se puede especificar exactamente una de las letras ugo: los permisos concedidos al usuario propietario del archivo (u), los permisos concedidos a otros usuarios miembros del grupo del archivo (g) y los permisos concedidos a usuarios que no se encuentren en ninguna de las dos categorías anteriores (o).

Veamos unos ejemplos básicos:

  • Primero vamos a crear un archivo con contenido, para ello utilizaré la forma más sencilla y correcta de crearlo, que es usando redirecciones:
  • Bash:
    echo "echo test" > test.sh
  • Ver el archivo adjunto 22430
Aquí vemos que los permisos por defecto que se nos asignan a la hora de crear el archivo son de lectura y escritura para el usuario propietario, que vemos en la tercera columna para el usuario usuario; permisos de lectura para el grupo del usuario propietario, que vemos en la cuarta columna para el grupo usuario y permisos de lectura también para el resto de usuarios.

Vamos a hacer una prueba simple para confirmar lo que os he dicho, según lo visto anterior, cualquier usuario podría leer lo que pone en el archivo test.sh pero solo el usuario usuario podría modificar su contenido.
  • Para ello primero vamos a comprobar que podemos leer el contenido de test.sh con el usuario usuario y pepe. Con el comando cat podemos leer por pantalla el contenido del archivo:
  • Ver el archivo adjunto 22432
  • Y como esperábamos, podemos leer el contenido del archivo, pero ¿podremos escribir sobre él con ambos usuarios?
  • Ver el archivo adjunto 22433
  • Como vimos anteriormente, se cumple lo que dije. Actualmente solo el usuario propietario del archivo tiene permisos para escribir sobre el mismo, de la misma forma que tampoco podremos ejecutarlo ya que NO tenemos actualmente permisos de ejecución.
  • Ver el archivo adjunto 22434
  • Ahora que tenemos claro los permisos con los que cuenta el archivo test.sh, vamos a modificarlos, por ejemplo para que el usuario propietario pueda ejecutar el script:
  • Bash:
    chmod u+x test.sh
  • Ver el archivo adjunto 22435
  • Se le añade la x al grupo de bits del propietario y confirmamos que se ejecuta el script. Pepe por el contrario sigue sin poder ejecutar el script.
  • Ver el archivo adjunto 22436
  • Lo siguiente que probaré, será a darle permisos al grupo del propietario, ya que pepe está dentro del grupo usuario (grupo que tiene el usuario usuario) por lo que dando permisos al grupo del propietario, pepe podría modificar y ejecutar el script. Ejecutaré el siguiente comando para ello:
  • Bash:
    chmod g+wx test.sh
  • Ver el archivo adjunto 22437
  • Comprobamos ahora que pepe puede modificar y ejecutar el archivo:
  • Ver el archivo adjunto 22438

Pepe y usuario pertenecen al mismo departamento, por eso queremos que ambos puedan ejecutar, leer y modificar el archivo pero el resto de usuario no, ¿por qué un usuario de contabilidad debería de poder leer o escribir sobre un programa al que no debería de estar autorizado?

  • Para ello vamos a removerle todos los permisos al resto de usuarios:
  • Bash:
    chmod o-r test.sh
    ## aquí por ejemplo, sabemos que no tiene ningún permiso más allá de lectura para el grupo de usuarios "o" pero si por ejemplo contase con más permisos, habría que añadirlos
  • Ver el archivo adjunto 22439

Como se ha quedado un post bastante largo hasta aquí, el modo octal lo haré en otro post, no tardaré mucho en subirlo porque tengo el texto más menos desarrollado.

Tened en cuenta el peligro que tiene un mal uso de este comando, si os pasáis dando permisos a un archivo podéis encontraros con una brecha de seguridad muy gorda. Habéis visto que con el comando echo que es un comando que no necesita permisos de administrador, podéis modificar el contenido de un archivo si tenéis permisos para ello. Si por ejemplo un atacante ve un archivo con permisos de ejecución y lectura para cualquier usuario, podría sobrescribir el contenido de ese fichero añadiendo las órdenes que quisiese con echo y descargarse documentación sensible si el propietario del dichero por ejemplo es root o joderos parte del sistema borrando binarios haciendo la administración del servidor imposible o realizar conexiones maliciosas a sitios peligrosos... en fin... lo que se os pueda ocurrir.

Un saludo.
me encanta, 10/10
 
  • Maravilloso
Reacciones : destapeman

krpe

🖕𝐋𝐆𝐓𝐁𝐈 𝐒𝐥𝐚𝐲𝐞𝐫🖕
Noderador
Nodero
Noder
sudo chmod -R 777 lo unico que necesito saber xddd
 
  • Hahaha
Reacciones : destapeman

krpe

🖕𝐋𝐆𝐓𝐁𝐈 𝐒𝐥𝐚𝐲𝐞𝐫🖕
Noderador
Nodero
Noder
quizas podrias haber mostrado lo de los permiosos con el ls para ver las letras rwx y enseñar lo que significan para modificar mejor
 

destapeman

FUCK PUSSYS, YES BADASS
Moderador
Paladín de Nodo
Jinete de Nodo
Burgués de Nodo
Noderador
Nodero
Noder
quizas podrias haber mostrado lo de los permiosos con el ls para ver las letras rwx y enseñar lo que significan para modificar mejor
tenía pensado hacerlo en otro post enseñando la potencia de ls, que ya se me ha quedado un post largo como para añadir eso xD pero gracias por el aporte.