Coreutils: Permisos de archivos

Se dice que GNU/Linux es un sistema muy seguro, que no hay virus y que es muy difícil de vulnerar, la realidad es que eso es mentira. Como cualquier sistema, GNU/Linux es un sistema que es tan seguro como las medidas que se tomen para administrarle y una de las medidas más importantes es la gestión del sistema de archivos.

Coreutils-04-wp

Antes de empezar, ya sé que algunos leen esto cada semana (sólo mi mamá, tal vez) y que esperaban la publicación el día lunes y hoy es martes. – Gabriel! Eres un flojo y te retrasaste! –  Pues no, la verdad es que quiero probar diferentes fechas para analizar cuando tienen más tiempo de leer estas publicaciones, dicho esto, comencemos.

Hola mundo! Hoy es martes y toca hablar de GNU Core Utilities.

La semana pasada hablamos de  Coreutils tac: Output de archivos completos (parte 2)  , un comando bastante inútil y parece que bastante impopular, así que esta semana quiero redimirme con ustedes y les hablaré de un tema extremadamente útil y quizás la médula espinal de la seguridad en GNU/Linux.

¿Qué son «archivos»?

Me podrían decir: «¿Por qué debe ser tan importante proteger mis archivos? digo mis documentos, fotografías y canciones son importantes, pero no creo que eso constituya la médula espinal de nada».  Y yo les diría que tienen razón, pero en sistemas basados en Unix, TODO ES UN ARCHIVO, a veces esto no es muy claro asi que lo repetiré, EN UNIX Y SUS DERIVADOS TODO ES UN ARCHIVO.

«Eso no tiene ningún sentido, mis dispositivos no pueden ser archivos, ¿cómo mi mouse va ser un archivo?»


En realidad, los dispositivos no son realmente archivos, sino representaciones de los mismos como archivos, de esta forma podemos acceder a un dispositivo y a sus propiedades de la misma forma en que lo haríamos con un archivo, ya sea la configuración de un servicio, los parámetros de ejecución de un comando o tus documentos, música y otros medios, ante los ojos del root# todos los archivos son iguales.

Cuando hablamos de permisos de archivos, podemos dividirlo en dos categorías: Permisos Básicos y Permisos Avanzados, hoy sólo hablaremos de los básicos y si no los aburro, la próxima semana revisaremos los «Avanzados».

Permisos Básicos

Grupos de permisos

Una de las propiedad que tienen los archivos en el sistema es que pertenecen a un usuario y a un grupo ( esto lo revisaremos a detalle en otro artículo) y la forma más sencilla de descubrir la anatomía básica de un archivo es con el comando «ls -l» (Tambén algún día revisaremos ls a detalle).


Intencionalmente separé el output del comando, para que mostrará 4 columnas, en realidad no existe esa separación, todo aparece junto, pero será más fácil para mi explicarlo así.

D:  Aquí se muestra la letra «d» si se trata de un directorio.

U:  (User) Aquí aparecen los permisos del propietario del archivo.

G: (Group) Aquí aparecen los permisos del grupo del archivo.

O: (Others) Aquí aparecen los permisos de acceso para el resto de los usuarios del sistema.

También el comando nos muestra el nombre del propietario y el grupo del archivo.

Tipos de permisos

Siguiendo el output del comando anterior, podemos ver que en las columnas O,G y A hay tres espacios en los que se pueden leer las letras r, w y x según corresponda, estos son los tipos de permisos.

r – read:  Afecta la capacidad del usuario para ver el contenido del archivo.

w – write: Afecta la capacidad del usuario para guardar o modificar el contenido del archivo o en caso de un directorio para crear nuevos archivos.

x – execute: Afecta la capacidad del usuario para ejecutar un archivo (un script por ejemplo) y en el caso de los directorios, se requiere el permiso de ejecución para poder ver el contenido del directorio.

 

This file is made available under the Creative Commons CC0 1.0 Universal Public Domain Dedication.This file is made available under the Creative Commons CC0 1.0 Universal Public Domain Dedication.

Entonces, lo que nos indica el output del comando es lo siguiente:

  • El usuario gabriel tiene permisos de lectura y escritura (rw) en todos los archivos.
  • El grupo gabriel tiene permiso de lectura (r) en todos los archivos.
  • El resto (others) tienen permiso de lectura (r) en todos los archivos.

NOTA: Algunas distribuciones por default crean un usuario para cada grupo para mantener privado el contenido de cada usuario, otras simplemente utilizan el grupo users.

¿Entonces cómo cambiar los permisos?

Para esto vamos a usar el comando chmod, a diferencia de los otros comando que hemos visto, no vamos a revisar cada opción, recuerda que el tema es sobre permisos y no sobre chmod.

Este es el ejemplo más común, en el directorio files, hay un archivo llamado «script», vamos a revisar su contenido.


!Vaya! ¡ Es un script super letal !… ok no, pero vamos a ejecutarlo :)


Wait… what? Permission denied? Me hackearon! a mi nadie me niega el permiso a ver, revisemos nuevamente sus permisos.


Aja! ahí está el detalle,  tengo permiso de lectura y escritura (rw) pero no de ejecución, ¿qué pasa si le agrego el permiso «x»?


A ver, a ver, a ver… por partes.

Explicando chmod

chmod   u+x    script

Esto significa  al propietario ( u )  agrégale ( + )  permiso de ejecutar  ( x )  el archivo script.

Es por eso que en el segundo comando:  «ls -l script», podemos ver que los permisos del propietario dicen (rwx).

Y finalmente en el tercer comando, ejecutamos el script sin problemas.

Pero es un script demasiado poderoso para que caiga en las manos equivocadas, vamos a impedir que alguien más lo vea.


chmod go-r script

Esto significa: al grupo ( g ) y a otros ( o ) remueves ( – ) el permiso de leer ( r ) el archivo script.

Y podemos ver que antes tenían permiso de lectura y ahora ya no.

Un ejemplo más, digamos que están trabajando con el archivo «ejemplo-104.txt» y quieren que todos en el sistema puedan leer y escribir el archivo, la mejor forma de hacer sería así:


chmod ugo+rw

Esto significa: al usuario ( u ), grupo ( g ) y otro ( o ) agrégale ( + ) permisos de lectura ( r ) y escritura ( w ) en el archivo ejemplo-104.txt

¿Siguen conmigo?

Creo que ya se van entendiendo la cosa, cuando se trate de aplicarle un permiso a todos, simplemente se puede escribir a en lugar de ugo, de forma que el comando «chmod a-w ejemplo-104.txt» removerá el permiso de escritura a todos, incluso al propietario.

De igual modo pueden asignar diferentes permisos a cada grupo, por ejemplo


En este último ejemplo ejecutamos lo siguiente.

Al usuario ( u ) asignarle ( = ) los siguientes permisos: lectura ( r ), escritura ( w )  y ejecución ( x );  Al grupo ( g ) asignar ( = ) los siguientes permisos: lectura ( r ) y escritura ( w ); A los demás ( o ) asignar  los siguientes permisos: lectura ( r ).

Cuando se utiliza la opción de asignación ( = ) va a dejar únicamente los permisos que fueron declarados; De forma que si un archivo tenía permiso de ejecución y definimos «chmod a=rw archivo», va a asignar a todos, permisos rw y eliminar el de ejecución.

Referencias en formato octal

Otra forma de expresar los permisos de archivos, es utilizando un formato octal, quizás mucho más popular, funciona como una opción de asignación y utiliza una representación numérica para cada permiso:

r = 4;   w = 2;   x = 1

se definen 3 dígitos, cada dígito representa uno de los grupos  Usuario, Grupo y Otros (Siempre en ese orden)

De forma que podemos escribir algo así:


«chmod 741 ejemplo-01.txt» Significa:  Asignarle al usuario permisos 7, Asignar al grupo permisos 4 y asignarle a otros permisos 1.

What? ¿cómo es que eso tiene más sentido?

Calma!, todo tendrá sentido.

Octal Binario Permisos
0 000
1 001 –x
2 010 -w-
3 011 -wx
4 100 r–
5 101 r-x
6 110 rx-
7 111 rwx

Entonces… decir «chmod 741 archivo»  es equivalente a decir  «chmod u=rwx,g=r,o=x archivo» , sólo que es mucho más cómodo, es por eso que es un método mucho más popular.

Multiusuario

Oye Gabriel, está muy padre todo esto para un sistema empresarial con cientos de usuarios y diferentes grupos, pero nada de esto es para mi, nadie más usa mi computadora, no hay más usuarios aparte de mi.

De los creadores de "No nos afecta el dólar porque estamos en México"

De los creadores de «No nos afecta el dólar porque estamos en México»

Bien, parece un argumento válido, pero en realidad, aunque no compartas tu sistema con ningún otro usuario, hay un decena de usuarios «de sistema»


Estos son todos los usuarios que existen en mi laptop y salvo por el usuario de mi esposa y el mío, todos los demás usuarios los utiliza el demonio muahahahaha (ok,no… referencia aquí) …  Muchos servicios (o demonios) se ejecutan utilizando un usuario propio, de forma en caso de ser vulnerado de alguna forma, tiene acceso limitado sólo a ciertos archivos en los que tiene permisos.

 

El sistema de permisos de archivos, está ahí para dar una capa de seguridad a nuestros sistema, pero algunas personas sólo quieren ver el mundo arder:

63923425

 

CONCURSO

Bien, ya que la semana pasada no me creyeron que había premio, les voy a dar otra oportunidad de ganarse una playera oficial del Gultij Edición Primavera-Verano 2016 xD.

Las bases será muy sencillas, el que postee en los comentarios del grupo de facebook, el mejor meme de «chmod 777» seleccionado por David Jarillo, Ricardo Rosales, Octavio Alvarez, Hiram Kampokalas y yo, se llevará la playera del Gultij.

Gultoj Primavera-Verano 2016

Gultij Primavera-Verano 2016

CONCLUSIÓN

Pues una vez más aquí termina el artículo de hoy, por favor dejenme saber qué estamos haciendo bien, qué estamos haciendo mal, si te interesa ayudarnos en las actividades, siempre buscamos gente que nos apoye.

En los próximos días vamos a anunciar la siguiente reunión que será el Sábado 27 de Agosto, en el Intercomunidades, los esperamos a todos.

Hasta la próxima semana.

 

One Response

  1. alex 12/Ago/2016

Leave a Reply