Permisos para usuarios unix



@eduardo_gpg

Número de visitas 1160

Tiempo de lectura 5 min

19 Febrero 2021

Los sistemas operativos Unix son, desde mi punto de vista, los mejores sistemas multi usuarios que puedan existir hoy en día. 😎

Utilizando algún sistema operativo basado en unix (Por ejemplo Ubuntu, Fedora, Red Hat, Debía etc... ) múltiples usuarios, al mismo tiempo, podrán acceder y hacer uso de una misma computadora de forma completamente independiente.

Esto nos viene de maravilla, principalmente, cuando nos encontramos trabajando con servidores remotos, y deseamos que múltiples usuarios realicen múltiples tareas sobre un mismo equipo. Utilizando el protocolo SSH (Secure SHell) esto es bastante sencillo, basta con autenticarnos con el servidor, y listo, ya podremos hacer uso de él. Esto, por supuesto, de forma completamente independiente, sin la necesidad de depender qué otros usuarios estén, o no conectados al servidor. 🤓

Con todo esto en mente, uno pudiera preguntarse: ¿Tener múltiples usuarios conectados a un mismo equipo, no puede ocasionar problemas de seguridad? 😱 Pues déjame decirte que unix es lo suficientemente robusto para que esto no sea así. No importa la cantidad de usuarios conectados de forma concurrente, lo que importa son los permisos que estos puedan tener.

El tema de permisos en unix es algo, que si bien no es tan fácil de comprender, su nivel de complejidad tampoco debería ser impedimentos para no conocerlo, utilizarlo o sacarle el máximo provecho.

Es por ello que en esta ocasión me gustaría habláramos sobre cómo Unix maneja los permisos para los usuarios dentro del sistema operativo. Es un port muy interesante, así que te invito a que te quedes.

Sin más introducción, comencemos.

Lectura, escritura y ejecución.

En Unix, el accesos para archivos o directorios los podemos dividir en 3 apartados:

  • Lectura
  • Escritura
  • Ejecución

El acceso a los archivo y directorios queda estrictamente limitado a todos los usuarios que cumplan con los permisos. Si quieres conocer si tu usuario puede realizar alguna de estas acciones para un archivo o directorio, puedes apoyarte del comando ls más la bandera -l (Opcionalmente puedes colocar el nombre de un archivo en concreto).

Ejemplo:

ls -l manage.py

En mi caso la salida es la siguiente:

-rw-rw-r-- 1 eduardo eduardo 624 Feb  1 00:17 manage.py

Los primeros 10 caracteres de la salida son conocidos como file attributes, o atributos del archivo (Por su traducción al español). Este listado puede comprender de los siguientes caracteres:

  • r: Permite la lectura del archivo.
  • w: Permite la escritura sobre el archivo.
  • x: Permite la ejecución del archivo.
  • d: Hace referencia a un directorio (Posible primer carácter).
  • l: Un Link simbólico (Posible primer carácter).
  • -: Hace referencia a un archivo, o indica que que el usuario no posee permisos de escritura, lectura o ejecución (Posible primer carácter).

De los 10 primeros caracteres de la salida, el primero nos indica si el elemento es directorio, link o archivo. En mi caso un archivo, ya que el carácter es un guión (-).

-rw-rw-r--

NOTA: Los permisos para re-nombrar o eliminar un archivo no recaen sobre el archivo perse, si no sobre los atributos del directorio.

Esto nos deja con 9 caracteres restantes. Si son 3 los tipos de permisos (rwx), ¿Por qué sobran 7 caracteres? Bueno, esto tiene que ver mucho con el tema de propietarios en Unix. Verás, para un sistema operativos unix, todos los directorios y archivos se les hez asignado a 3 tipos de usuarios:

  • user: El propietario del archivo. Regularmente el usuario quien creo el archivo.
  • group: Usuario del algún grupo. Ya que los permisos de un grupo son aplicados a todos sus usuarios, es necesario validar sobre el grupo.
  • others: Cualquier otro usuarios que: No sea el propietario del archivo y que no se encuentre dentro de algún grupo.

Si quieres conocer si tu usuario pertenece a algún grupo, puede ejecutar el comando id:

$ id
uid=1000(eduardo) gid=1000(eduardo) groups=1000(eduardo),27(sudo)

Nota: Por default todos los usuarios creados se les hez asignado un identificador único (udi) y son asignados a un grupo (gid). Para Ubuntu el contador comienza en 1000.

Los permisos de lectura, escritura y ejecución se aplican para cada uno de los usuarios, dando como resultado los 9 caracteres restantes.

| User| Group| Other| | --- | ----------- | | rwx| rwx | rwx |


Modificación de los permisos

Para modificar los permisos de un archivo o directorio, será necesario hacer uso del comando chmod. Es importante mencionar que, solo el propietario de archivo o directorio podrá modificar sus permisos.

Es posible modificar los permisos de 2 formas distintas. Esto mediante:

  • Representación del número octal.
  • Representación simbólica.

Para este post nos concentraremos en explicar la representación octal, ya que es la más común de utilizar. 🤯

Se denomina representación octal al sistema numérico base 8 donde son utilizados los dígitos que comprenden del 0 al 7. A su vez, estos dígitos serán representados por un grupo de 3 dígitos binarios. 🤓🤓🤓

Aquí una tabla con la representación octal, su binario y los permisos a los que hace referencia.

| Representación Octal | Binario | Permisos | | ----------- | ----------- | | 0 | 000 | --- | | 1 | 001 | --x | | 2 | 010 | -w- | | 3 | 011 | -wx | | 4 | 100 | r-- | | 5 | 101 | r-x | | 6 | 110 | rw- | | 7 | 111 | rwx |

Cómo puedes observar, cada uno de los dígitos representa los permisos para un archivo o directorio (ninguno (-), lectura (r), escritura(w) y ejecución (x)).

Con esto en mente, para nosotros poder modificar los permisos de un archivo, e indicar que los 3 tipos de usuarios tengan todos los permisos posibles (lectura, escritura y ejecución), el comando quedaría de la siguiente manera.

$ chmod 777 upload.py

Una vez hecho esto, los permisos de lectura (r), escritura(w) y ejecución (x) se encuentran asignados a los 3 tipos de usuarios (user, group, other).

$ ls -l upload.py 
-rwxrwxrwx@ 1 eduardo  staff  476 Sep 27 16:37 upload.py

Si queremos que: Solo el propietario (user) posea todos los permisos (lectura, escritura y ejecución), debemos ejecutar:

$ chmod 700 upload.py
$ ls -l upload.py 
-rwx------@ 1 eduardo  staff  476 Sep 27 16:37 upload.py

Si deseamos que: El propietario tenga todos los permisos (Lectura, escritura y ejecución), y los otros únicamente permisos de lectura, el comando quedaría de la siguiente manera.

$ chmod 702 upload.py
$ ls -l upload.py 
-rwx----w-@ 1 eduardo  staff  476 Sep 27 16:37 upload.py

Recuerda, el orden es importante (User, group, other).

  • Del indice 1 al indice 3 -> User
  • Del indice 4 al indice 6 -> Group
  • Del indice 7 al indice 9 -> Other

El indicé 0 denotar archivo, directorio o link. 😋

Si aun no te queda del todo claro, no te preocupes, es un tema complicado.

Aquí un par más de ejemplos.

<table> <thead> <tr> <th>File attributes</th> <th>Descripción</th> </tr> </thead> <tbody> <tr> <td>-rwx------</td> <td>Archivo con permisos de lectura, escritura y ejecución para el usuario propietario</td> </tr> <tr> <td>-rw-------</td> <td>Archivo con permisos de lectura y escritura para el usuario propietario</td> </tr> <tr> <td>-rw-r--r-</td> <td>Archivo con permisos de lectura y escritura para el usuario propietario. Permisos de lectura para miembros del grupo y otros</td> </tr> <tr> <td>lrwxrwxrwx</td> <td>Link simbólico con permisos de lectura, escritura y ejecución para el propietario, miembros del grupo y otros</td> </tr> <tr> <td>drwxr-x---</td> <td>Directorio con permisos de lectura, escritura y ejecución para el propietario. El propietario puede crear, eliminar o renombrar archivos dentro del directorio. Miembros del grupo únicamente pueden acceder.</td> </tr> <tr> <td>lrw-rw----</td> <td>Link simbólico. El propietario y miembros del grupo tienen permisos de lectura y escritura.</td> </tr> <tr> <td>-rw-rw-rw</td> <td>Archivo donde los permisos de lectura y escritura son permitidos para los 3 tipos de usuarios</td> </tr> </tbody> </table>


Ejercicios

Se que el tema es algo complejo, por ello te comparto un par de ejercicios para que puedas practicar. 🍺

  • Dado un archivo en el sistema. Modifica los permisos para que solo el usuario propietario pueda modificarlo.
  • Dado un archivo en el sistema. Modifica los permisos para que solo miembros del grupo y otros puedan ejecutarlo.
  • Dado un archivo en el sistema. Modifica los permisos para que los 3 tipos de usuarios puedan leer y escribir en él.
  • Dado un directorio en el sistema. Modifica sus permisos para que solo los propietarios tengan acceso a él.

¿El contenido te resulto de ayuda?

Para poder dejar tu opinión es necesario ser un usuario autenticado. Login

Más Tips y Ejercicios 🐍

Adquiere una subscripción PyWombat por tan solo $3 USD. al mes.

Conoce los beneficios de ser usuario premium:
Niveles desbloqueados: Ten accesos a todos los niveles de ejercicios. 🔓
Nuevo límite: Incrementa tu límite de ejercicios por semana. 🚀
Contenido único: Recibe semanalmente recursos exclusivos de Python (Videos, Artículos y Capitulos del libro PyWombat, comienza como desarrollador Python. 🐍