Coreutils-04-wp

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?»

gabriel@gultij:~$ ls /dev/input/
by-id  by-path    mice  mouse0  mouse1

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).

gabriel@gultij:~/Documents/Gultij/Coreutils/files$ ls -l
total 16
D   U    G    O     Owner   Group   (Esta línea fue agregada para ilustrar)
d  rwx  r-x  r-x 2 gabriel gabriel 4096 Aug  8 11:49 directorio
-  rw-  r--  r-- 1 gabriel gabriel 245 Jul 27 17:48 ejemplo-101.txt
-  rw-  r--  r-- 1 gabriel gabriel 110 Jul 27 18:23 ejemplo-102.txt
-  rw-  r--  r-- 1 gabriel gabriel 664 Jul 27 18:45 ejemplo-103.txt
-  rw-  r--  r-- 1 gabriel gabriel 227 Jul 27 18:54 ejemplo-104.txt
-  rw-  r--  r-- 1 gabriel gabriel   31 Aug  8 13:06 script

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.

gabriel@gultij:~/Documents/Gultij/Coreutils/files$ cat script  
#!/bin/bash 
echo "No soy un Hola Mundo más, estoy hackeando al mundo, soy super hacker por que veo Mr. Robot.";

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

gabriel@gultij:~/Documents/Gultij/Coreutils/files$ ./script 
bash: ./script: Permission denied

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

gabriel@gultij:~/Documents/Gultij/Coreutils/files$ ls -l script  
-rw-r--r-- 1 gabriel gabriel 113 Aug  8 13:11 script

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»?

gabriel@gultij:~/Documents/Gultij/Coreutils/files$ chmod u+x script  
gabriel@gultij:~/Documents/Gultij/Coreutils/files$ ls -l script      
-rwxr--r-- 1 gabriel gabriel 113 Aug  8 13:11 script 
gabriel@gultij:~/Documents/Gultij/Coreutils/files$ ./script  
No soy un Hola Mundo más, estoy hackeando al mundo, soy super hacker por que veo Mr. Robot.

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.

gabriel@gultij:~/Documents/Gultij/Coreutils/files$ chmod go-r script   
gabriel@gultij:~/Documents/Gultij/Coreutils/files$ ls -l script  
-rwx------ 1 gabriel gabriel 113 Aug  8 13:11 script

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í:

gabriel@gultij:~/Documents/Gultij/Coreutils/files$ls -l ejemplo-104.txt  
-rw-r--r-- 1 gabriel gabriel 227 Jul 27 18:54 ejemplo-104.txt 

gabriel@gultij:~/Documents/Gultij/Coreutils/files$ chmod ugo+rw ejemplo-104.txt

gabriel@gultij:~/Documents/Gultij/Coreutils/files$ ls -l ejemplo-104.txt         
-rw-rw-rw- 1 gabriel gabriel 227 Jul 27 18:54 ejemplo-104.txt

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

gabriel@gultij:~/Documents/Gultij/Coreutils/files$ls chmod u=rwx,g=rw,o=r ejemplo-103.txt 
gabriel@gultij:~/Documents/Gultij/Coreutils/files$ ls -l ejemplo-103.txt  
-rwxrw-r-- 1 gabriel gabriel 664 Jul 27 18:45 ejemplo-103.txt

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í:

gabriel@gultij:~/Documents/Gultij/Coreutils/files$ls chmod 741 ejemplo-101.txt    
gabriel@gultij:~/Documents/Gultij/Coreutils/files$ ls -l ejemplo-101.txt  
-rwxr----x 1 gabriel gabriel 245 Jul 27 17:48 ejemplo-101.txt

«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»

gabriel@gultij:~/Documents/Gultij/Coreutils/files$ls cut -d: -f1 /etc/passwd 
root 
daemon 
bin 
sys 
sync 
games 
man 
lp 
mail 
news 
uucp 
proxy 
www-data 
backup 
list 
irc 
gnats 
nobody 
systemd-timesync 
systemd-network 
systemd-resolve 
systemd-bus-proxy 
Debian-exim 
messagebus 
statd 
avahi-autoipd 
gabriel 
avahi 
colord 
dnsmasq 
festival 
speech-dispatcher 
pulse 
rtkit 
saned 
usbmux 
hplip 
sshd 
mysql 
uuidd 
nm-openvpn 
_apt 
gloria 
postgres 
lightdm 
sddm 
Debian-snmp

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.

 

Esta entrada fue publicada en coreutils el por .

Acerca de Gabriel Covarrubias

Soy ingeniero en C4 Technologies, me uní al Gulij en 2013 y ya no sé cómo salir aquí xD, me gusta salir con mi perro Max que es una celebridad en redes sociales, uso Debian después de recorrer 416,000 distros diferentes a lo largo de 11 años .... y dice mi esposa que debo decir que soy felizmente casado :P.

Un pensamiento en “Coreutils: Permisos de archivos

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *