Permisos, propiedad y atributos
Cuando hacemos un ls -l y vamos a la parte de los permisos encontraremos algo como esto:
Modelo UGO
El modelo UGO viene de User, Group y Others, que es como un archivo en Linux gestiona los permisos sobre un archivo. Si tu UID (identificador) es igual al UID del user o perteneces al GID, entonces tendrás los permisos que tiene designado alguno de ellos, y si no recibirás los permisos del archivo que pertenecen a otros.
- User: usuario que es el dueño del archivo.
- Group: grupo o el equipo que tiene ciertos permisos sobre el archivo.
- Other: otros.
Linux, a la hora de evaluar los permisos, va en un orden de prioridad: primero evalúa al propietario, luego al grupo y por último a la trinidad de otros. Una vez que encuentra a cual perteneces, se detiene, no evalúa los demás y solo te da los permisos correspondientes al que perteneces sin importar si en group o others tienes mas permisos.
La relacion del usuario con el archivo determina que conjunto de permisos se te aplica.
La Trinidad de los Permisos (rwx)
En Linux los permisos son representados usando estos (no son los únicos, hay permisos especiales):
- read: que se traduce como leer, y lo que nos permite es leer archivos (lo que tiene anotado dentro del archivo), y en caso de un directorio ver la lista de elementos como archivos o subdirectorios.
Como dato, en Linux un directorio es un archivo que dentro tiene los punteros o datos de sus subdirectorios o archivos que este contiene.
- write: que se traduce como escribir. Este permiso en un archivo te permite modificar el contenido del archivo, mientras que en un directorio te permite eliminar, renombrar y crear archivos o subdirectorios dentro del directorio. Algo importante a mencionar es que, para eliminar un archivo dentro de un directorio, es necesario tener el permiso
wyxen el directorio.Como en Linux el directorio es un archivo que contiene los datos como el puntero nombre, puedes reescribirlo, incluso agregar más datos para crear archivos.
- execute: que se traduce como ejecutar, y este permiso en un archivo te permite ejecutar el archivo como si fuese un programa, binario o un script, mientras que en un directorio te permite entrar al directorio.
Es como el permiso necesario para tocar el directorio, así que sin este permiso, los permisos de rw no sirven para un directorio.
Estos permisos también pueden ser representados por:
| Permiso | Letra | Número |
|---|---|---|
| read | r | 4 |
| write | w | 2 |
| execute | x | 1 |
Notación Octal vs. Notación Simbólica
En Linux se tienen dos formas de manipular los permisos: una es la notación octal y otra la notación simbólica.
Notación Simbólica
Esta notación tiene esta estructura: <A quien> <qué se va a hacer> <el permiso>:
- A quien: puede ser representado con
upara usuario,gpara grupo,opara otros o por últimoapara todos. - Qué se va a hacer: se representa usando
+para agregar un permiso,-para quitar o=para asignar tal cual le pasas los permisos. - El permiso: representamos con
rpara lectura,wpara escritura oxpara ejecución. (en caso de que se necesite representar ninguno, se debe dejar vacío).
Ejemplos:
u+xle suma el permiso de ejecución al propietario del archivo.
g-wle quita el permiso de escritura al grupo.
o=rle asigna el permiso de lectura a los otros, pero reemplaza los permisos, así que queda comor--.
Notación Octal
Esta notación tiene esta estructura: <valor octal u><valor octal g><valor octal o>.
En la notación octal se usa la suma de los valores numéricos que tiene cada permiso:
| Permiso | Letra | Número |
|---|---|---|
| read | r | 4 |
| write | w | 2 |
| execute | x | 1 |
| Sin permiso | - | 0 |
Para encontrar el valor octal se suman los 3 permisos dependiendo de cuáles quieras agregar y el resultado es el valor octal que representa el conjunto de permisos:
| Permisos (rwx) | Suma | Valor octal |
|---|---|---|
| --- | 0+0+0 | 0 |
| —x | 0+0+1 | 1 |
| -w- | 0+2+0 | 2 |
| -wx | 0+2+1 | 3 |
| r— | 4+0+0 | 4 |
| r-x | 4+0+1 | 5 |
| rw- | 4+2+0 | 6 |
| rwx | 4+2+1 | 7 |
Ejemplo: 755 significa 7 para el User (rwx), 5 para el Group (r-x) y 5 para Others (r-x), donde el primer dígito es el propietario, el segundo el grupo y el tercero los demás.
Herramientas de control
chmod (Change Mode)
Este comando significa cambiar modo, y lo que hace es alterar los permisos de un archivo (incluyendo directorios). Acepta tanto la notación octal como la simbólica.
- Sintaxis base:
chmod [banderas] [permisos] [archivo/directorio]. - Ejemplo con notación octal(le damos todos los permisos a al propietario, y los permisos de lectura y ejecucion a los demas):
chmod 755 test.sh. - Ejemplo con notación simbólica(le damos al usuario los permisos de lectura y ejecución, y al grupo los permisos de lectura y ejecución):
chmod u+rx,g+x archivo.sho tambienchmod u=rx,g=rx archivo.sh(simplemente reemplazando los permisos actuales).
chown (Change Owner)
Este comando significa cambiar propietario, y eso es justo lo que hace: cambia al propietario o dueño del archivo o directorio a alguien más. También da la opción de cambiar el grupo del archivo.
Este comando está limitado al usuario root.
- Sintaxis base:
chown [banderas] [nuevo_dueño]:[nuevo_grupo] [archivo/directorio]. - Ejemplo básico solo cambiando propietario:
chown cypher hola.txt. - Ejemplo cambiando propietario y grupo:
chown cypher:inf reporte.txt.
chgrp (Change Group)
Este comando significa cambiar grupo, y solo se usa para cambiar el grupo de un archivo o directorio.
Está limitado: solo puede ser usado si el usuario es el propietario, pertenece al grupo de destino, y si no pertenece al destino no puede, pero esta limitacion desaparece si el usuario es root.
- Sintaxis básica:
chgrp [banderas] [nuevo_grupo] [archivo]. - Ejemplo básico:
chgrp inges report.txt.
Bandera de recursividad -R
Esta bandera es usable por los 3 comandos anteriores y sirve para seleccionar directorios y sus archivos de forma recursiva, es decir, a sus subdirectorios y archivos. Normalmente se pone dentro de un directorio.
Permisos especiales
Estos permisos se pueden agregar con chmod +ElPermiso archivo o como ejemplo chmod 2755 archivo.sh, donde el primer dígito es el permiso especial.
Si se ve una s minúscula, el permiso especial está activo y también el permiso de ejecución está activo. Si se ve una S mayúscula, el permiso especial está activo pero el permiso de ejecución está apagado. Lo mismo aplica para t y T en el Sticky Bit.
Donde cada permiso especial sigue estas tablas:
| Permiso especial | Letra en ls -l | Valor octal |
|---|---|---|
| SUID | s / S en la parte de usuario | 4 |
| SGID | s / S en la parte de grupo | 2 |
| Sticky Bit | t / T en la parte de otros | 1 |
que a la hora de asignarlos a un archivo o directorio se suman los valores octales:
| Permisos especiales | Valor octal |
|---|---|
| SUID + SGID | 4 + 2 = 6 |
| SUID + Sticky Bit | 4 + 1 = 5 |
| SGID + Sticky Bit | 2 + 1 = 3 |
| SUID + SGID + Sticky Bit | 4 + 2 + 1 = 7 |
SUID
Se refiere a Set User ID. Este permiso permite ejecutar un archivo como si fueras el dueño del archivo; es decir, al ejecutarlo, el proceso cree que quien lo ejecutó es el dueño, que la mayoría de las veces puede ser el usuario root.
Al listar con ls -la, este permiso se representa con una S o s en la trinidad de permisos del usuario, y en el sistema octal se representa como 4.
SGID
Se refiere a Set Group ID. Este permiso hace que, al ejecutar un archivo, tengas los permisos del grupo al que pertenece el archivo.
En un directorio que tiene el SGID, todos los archivos dentro heredan el grupo del directorio padre; es decir, heredan la pertenencia al grupo.
Al listar con ls -la, este permiso se representa con una S o s en la trinidad de permisos del grupo, y en el sistema octal se representa como 2.
Sticky Bit
Este permiso controla quién puede borrar un archivo; y si está en un directorio, los archivos dentro heredan este permiso.
Significa que solo el dueño del directorio o el usuario root pueden eliminarlo.
Al listar con ls -la, aparece con una t en la trinidad de permisos de otros, y en el sistema octal se representa con el número 1.