Cómo leer y cambiar permisos en la terminal de Linux
Linux se considera un sistema operativo muy seguro por la manera en que maneja los permisos dentro del sistema. Administrarlos desde la terminal de Linux es una habilidad esencial.
A diferencia de Windows por ejemplo, todo archivo dentro de un sistema GNU/Linux posee una serie de permisos que revisaremos a continuación.
Como ver los permisos de archivos y directorios en la terminal de Linux
ls -la es el comando de “lista larga completa” que sirve para ver los permisos de directorios y archivos en la terminal de Linux.
Los permisos están visibles en diferentes notaciones como muestra este artículo de Wikipedia.
Una referencia que se puede usar para visualizar el valor de los permisos es la calculadora chmod, y para ilustrarlo de mejor manera, te mostraré de forma práctica usando la terminal en línea de pruebas que nos ofrece gratuitamente YourPersonalServer.Com
A continuación te comparto la novena lección de este Curso Gratis: Comandos Básicos de Linux donde explico todo lo referente a estos temas:
Si prefieres seguir las instrucciones escritas, sigue leyendo porque describiré en las líneas de abajo todo lo que muestro en el video de esta lección.
Crear archivos con diferentes usuarios en la terminal de Linux
Será necesario crear dos usuarios y en este ejercicio los he llamado de la misma forma que hice en la lección anterior, es decir, crearemos los usuarios rosa y andres.
Para ello, ejecutas los comandos respectivos, de la misma forma que te mostré en la lección anterior:
adduser andres
adduser rosa
Ahora, desde la sesión de cada usuario y usando su directorio de inicio como base, vamos a crear un archivo de nota para cada uno.
Creando el archivo de práctico para el usuario rosa
Para el caso del usuario rosa:
su rosa
cd
nano notarosa
# introducir cualquier contenido
# guardar y salir con "Control O" y "Control X" respectivamente
Ahora, si enlisto el contenido de mi directorio actual, que es el directorio de inicio del usuario rosa, me debe aparecer como resultado el nombre del archivo que acabo de crear llamado notarosa:
ls
Habiendo confirmado que nuestro archivo recién creado está donde queremos, regresamos ahora a la sesión del usuario root para continuar con el ejercicio.
exit
Creando el archivo de práctico para el usuario andres
Ahora, lo mismo para el usuario andres:
su andres
cd
nano notaandres
# introducir cualquier contenido
# guardar y salir con "Control O" y "Control X" respectivamente
Ahora, si enlisto el contenido de mi directorio actual, que es el directorio de inicio del usuario andres, me debe aparecer como resultado el nombre del archivo que acabo de crear llamado notaandres:
ls
Habiendo confirmado que nuestro archivo recién creado está donde queremos, regresamos ahora a la sesión del usuario root para continuar con con el ejercicio.
exit
Verificando todo con el comando tree
Ahora que ya hemos creado los archivos con diferentes usuarios, podemos ilustrarlos en la terminal de Linux mediante el comando tree.
Nota Importante: si comenzaste con una sesión fresca en la terminal de pruebas, es porbable que el comando tree no esté instalado en tu terminal todavía, por lo que puedes instalarla fácilmente como indico en esta parte del video.
apt install tree
clear
tree /home
Demostración práctica de los permisos de archivos en la terminal de Linux
Primero, cambiemos al usuario de rosa y movamos nuestro cursor hacia su directorio de inicio mediante los siguientes comandos:
su rosa
cd
Confirmamos que estamos en el directorio de inicio de rosa porque el resultado al siguiente comando debería ser /home/rosa:
pwd
Ahora bien, le vamos a decir ahora a nuestra terminal que abra un archivo que tu y Yo sabemos que se encuentra ubicado en el directorio /home/andres llamado notaandres usando el siguiente comando:
nano /home/andres/notaandres
Error por permiso denegado
Una vez abierto el archivo, agrega un texto adicional como muestro en esta parte del video.
Al momento de intentar guardar los cambios, notarás que en la base de la pantalla te aparece un error como se muestra en la siguiente imagen:
La razón por la que aparece ese error es porque ahora mismo, conectado con el usuario rosa dentro de la terminal, no tengo permisos para editar ese archivo que he abierto del usuario andres.
Para salir de ese error en nano, simplemente hay que salir con la combinación de teclas “Control X” y al momento de responder la confirmación de sí se quieren guardar los cambios, debes elegir la letra N de NO para descartar los cambios realizados y regresar a la terminal.
Una vez de vuelta en la terminal, la forma en que puedo ver los permisos que tiene ese archivo específicamente es mediante el comando ls con las opciones -la.
Por lo tanto, ejecutando el siguiente comando podremos mostrar todo el contenido y permisos del directorio /home/andres:
ls -la /home/andres
¿Cómo leer los permisos dentro de la terminal de Linux?
Partes de un permiso
Los permisos dentro de la terminal de Linux están compuestos por 3 partes, y la lectura, expresión, y establecimiento de los mismos se puede hacer para cada una de estas tres partes:
–> Primera Parte – Permisos del usuario: son los permisos asignados al usuario dueño del archivo o directorio en cuestión.
–> Segunda Parte – Permisos del grupo: son los permisos asignados a los usuarios que pertenecen al grupo dueño del archivo o directorios en cuestión.
–> Tercera Parte – Permisos del resto (otros): son los permisos asignados a cualquier usuario que no sea ni el dueño, ni integrante del grupo al que pertenece el archivo o directorio en cuestión.
Orden de lectura de los permisos en la terminal de Linux
Es importante para tu sanidad mental, que la lectura de los permisos dentro de la terminal de Linux siempre la hagas en el mismo orden.
Independientemente de la notación con que se expresen, el orden de expresión y lectura no varía.
El orden de lectura es igual al orden descrito anteriormente:
–> Primero: permisos del usuario.
–> Segundo: permisos del grupo.
–> Tercero: permisos del resto (otros).
Parámetros de los permisos en la terminal de Linux
Antes de describir lo que sigue en esta lección, haré un breve resumen de donde venimos, para recapitular:
–> Cada permiso se divide en 3 partes
–> Las 3 partes siempre se leen en el mismo orden
Ahora bien, cada una de esas 3 partes tiene en su interior 3 parámetros que se pueden cambiar a conveniencia, y esos parámetros son:
–> Lectura
–> Escritura
–> Ejecución
Resumiendo
Todo lo expresado anteriormente, podríamos decir que los permisos en la terminal de Linux se leen, expresan, y establecen de la siguiente manera y en el siguiente orden:
–> Permisos del Usuario:
–> Lectura
–> Escritura
–> Ejecución
–> Permisos del Grupo:
–> Lectura
–> Escritura
–> Ejecución
–> Permisos del resto (otros):
–> Lectura
–> Escritura
–> Ejecución
Ya sabes el orden y composición de los permisos de archivos y directorios en la terminal de Linux.
Es momento de revisar las dos notaciones con las que normalmente verás los permisos expresados en tu carrera como administrador de sistemas Linux.
Diferentes notaciones de permisos en la terminal de Linux
Existen 2 maneras en la que los permisos de archivos y directorios se pueden expresar dentro de la terminal de Linux, y estas son:
–> Notación Simbólica: basada en los símbolos de cada permiso dentro de la terminal de Linux.
–> Notación Octal: basada en los valores octales de cada permiso.
Definición de Notación Simbólica
Conforme a la definición que nos ofrece Wikipedia:
La notación simbólica permite representar permisos en una serie de 10 caracteres.
El primer carácter indica el tipo de archivo:
'-'
archivo regular
'd'
directorio
l'
enlace simbólicoCada uno de los tres caracteres representa los permisos de lectura, escritura y ejecución respectivamente:
'r'
si el bit de lectura está asignado,'-'
en caso contrario.
'w'
si el bit de escritura está asignado,'-'
en caso contrario.
'x'
si el bit de ejecución está asignado,'-'
en caso contrario.
Los 10 caracteres indicados en la definición de Wikipedia se pueden apreciar en la siguiente captura de pantalla dentro de la terminal de pruebas gratis de YourPersonalServer.Com:
Ahora bien, existe otra forma de expresar, leer, y establecer permisos dentro de la terminal de Linux, y eso justamente es lo que te voy a mostar a continuación.
Definición de Notación Octal
Conforme a la definición de Wikipedia:
La notación octal consiste en un valor de tres o cuatro dígitos en base 8.
Con la notación octal de tres dígitos, cada número representa un componente distinto del conjunto de permisos: clase de usuario, clase de grupo y clase del resto respectivamente.
Cada uno de estos dígitos es la suma de los bits que lo componen (véase también sistema de numeración binario).
El peso de cada bit en un dígito es el siguiente:
– Lectura suma 4 al total.
– Escritura suma 2 al total.
– Ejecución suma 1 al total.
Y una de las cosas que a mí en lo personal me gusta más de la notación octal, es lo siguiente (en palabras de Wikipedia):
Estos valores nunca producen una combinación ambigua: cada suma representa un conjunto específico de permisos.
He aquí los ejemplos de la sección Notación simbólica de más arriba en su notación octal:
"-rwxr-xr-x"
se representa como755
en notación octal de tres dígitos.
"-rw-rw-r--"
se representa como664
en notación octal de tres dígitos.
"-r-x------"
se representa como500
en notación octal de tres dígitos.
Ahora que han quedado definidos los dos tipos de notaciones, es importante también conocer sus diferencias, potenciales ventajas y desventajas.
Diferencias notables entre la notación simbólica y octal
Es importante notar que cada una de las dos notaciones que acabo de explicar en las líneas anteriores tienen diferencias que podrían considerarse como ventajas o desventajas, dependiendo desde el ángulo en que se vean.
Por ejemplo, la notación simbólica al momento de establecer permisos, permite al administrador establecer solamente uno o algunos de los 9 permisos que se pueden cambiar usando esta notación con el comando chmod.
Recuerda que son 3 permisos (lectura, escritura y ejecución) para el usuario, igual para el grupo, e igual para el resto (otros).
Ejemplo de ventajas
Entonces, si lo vemos desde el punto de vista de la flexibilidad, la notación simbólica representa ventajas significativas frente a la notación octal, porque te permite cambiar permisos de forma muy granular.
Ejemplo de desventajas
Sin embargo, si lo ves desde el punto de vista de la complejidad de tus comandos y la posibilidad de cometer errores, entonces la notación simbólica representa serias desventajas frente a la notación octal.
La razón por la que digo eso con total certeza, es porque debes especificar muy bien tus comandos.
Es muy fácil cometer un error empleando la notación simbólica cuando estás comenzando en la terminal, y no lo digo porque lo haya leído en una revista, sino porque me pasó en la vida real.
Por el contrario, cuando utilizas la notación octal, lees y estableces los 9 permisos en un solo comando mediante un valor numérico de 3 dígitos.
Con la práctica eventualmente terminarás calculando los permisos sin siquiera pensar en ello.
Es una notación muy confiable para trabajar cuando estás comenzando en la terminal de Linux, y lo único que necesitas para poder usarla es saber sumar 3 números de 1 dígito c/u.
Debes hallar tu estilo
Lo cierto es: cada administrador de sistemas opina y ve el mundo diferente, y tú debes conseguir la forma más cómoda para trabajar según tu propia visión del mundo.
Cambiar permisos mediante el comando chmod
A los permisos dentro de la terminal de Linux se les conoce también como modos, y el comando chmod precisamente significa “Change Mode”.
Traduciéndolo al español sería “Cambiar Modo”, o “Cambiar Permisos”.
Como indiqué anteriormente, el comando chmod puedes usarlo con la notación simbólica o con la notación octal para especificar cuál permiso quieres cambiar.
En el videotutorial de esta lección, Yo utilizo la notación octal para el ejercicio, sin embargo, en las siguientes líneas te describo otro ejercicio en 4 imágenes, para ilustrarte el uso de las dos notaciones.
Ejemplo práctico de cambio de permisos usando las dos notaciones
Para este ejemplo, crearemos un archivo llamado “archivo1” dentro de nuestra terminal de pruebas.
Mostraremos los permisos de ese archivo recién creado usando el comando ls -la:
touch archivo1
ls -la archivo1
Considerando que el entorno de pruebas que estamos usando no haya cambiado desde el momento en que redacté este artículo, el resultado que deberías obtener al comando ls -la es muy parecido a este (excepto por la fecha y hora):
-rw-r--r-- 1 root root 0 May 8 02:24 archivo1
Esto significa que el archivo recién creado tiene los siguientes permisos:
–> El usuario: puede leer y escribir sobre el archivo, no puede ejecutar.
–> El grupo: puede leer solamente, no pueden editarlo, ni ejecutarlo.
–> El resto (otros): pueden leer solamente, no pueden editarlo, ni ejecutarlo.
Ahora cambiarás los permisos de ese archivo recién creado para que queden de la siguiente manera:
–> El usuario: debe tener permiso para todo, es decir, debe poder leer, escribir, y ejecutar
–> El grupo: solo deben leer y escribir
–> El resto: solo deben leer y escribir
Usando la notación octal con el comando chmod
Para hacer estos cambios por medio de la notación octal, considerando el estado actual del archivo mostrado en las líneas anteriores, puedes usar el siguiente comando:
chmod 766 archivo1
Seguidamente, puedes ejecutar la lista larga sobre el archivo1 recién modificado para ver como cambiaron los permisos.
ls -la archivo1
Deberías obtener un resultado similar al de la siguiente imagen, a excepción de las fechas y horas:
El cambio ha quedado realizado conforme a los requerimientos planteados en el ejercicio, y con la siguiente imagen te explicaré más detalladamente lo que ha ocurrido en esa pantalla:
Usando la notación simbólica con el comando chmod
Para hacer estos cambios por medio de la notación simbólica, vale la pena comenzar de nuevo refrescando la terminal de pruebas.
Vuelve a crear el archivo1 con su respectiva consulta de permisos mediante el comando ls -la.
Una vez que lo tengas, y considerando el estado actual del archivo mostrado en las líneas anteriores, puedes usar el siguiente comando para hacer el mismo cambio por medio de la notación simbólica:
chmod u+x,go=wr archivo1
Seguidamente, puedes ejecutar de nuevo la lista larga sobre el archivo1 recién modificado para ver como cambiaron los permisos.
ls -la archivo1
Deberías obtener un resultado similar al de la siguiente imagen, a excepción de las fechas y horas:
El cambio ha quedado realizado conforme a los requrimientos planteados en el ejercicio, y con la siguiente imagen te explicaré más detalladamente lo que ha ocurrido en esa pantalla:
Ahora bien, considerando que ya viste en la práctica la utilización de las dos notaciones para el cambio de permisos, dime algo:
Después de dejarme tu comentario, echa un vistazo, a algunos de los permisos más utilizados en la terminal de Linux.
Permisos comunes en la terminal de Linux
Es importante destacar que los ejercicios anteriores son solo eso, algunos ejercicios ilustrativos.
En realidad, el permiso 766 no es un permiso que se otorgue comúnmente a archivos o directorios dentro de la terminal de Linux.
A continuación te enlistaré algunos permisos que se otorgan con frecuencia, para que te sirvan de referencia:
–> 755: para directorios dentro de un servidor web. Da permiso de todo al usuario dueño, y permite la lectura y ejecución al resto del mundo.
–> 644: a todos los archivos dentro de un servidor web. Permite leer y editar al usuario dueño, y permite nada más la lectura al resto del mundo.
–> 750: aplicado a scripts en ambientes compartidos. Permite todo al usuario dueño, permite solamente lectura y ejecución a los integrantes del grupo, no permite nada al resto del mundo.
–> 700: para archivos restringidos a un determinado usuario dentro del sistema. Permite todo solamente al usuario dueño, y nada al resto del mundo.
Claves para el éxito
–> El comando ls -la es tu amigo para visualizar los permisos de una serie de archivos y directorios en la terminal de Linux.
–> Es importante considerar el usuario con que se está trabajando en todo momento, ya que de esto depende los permisos que se otorgan cuando se crean archivos y directorios en la terminal de Linux.
–> Crear archivos como el usuario root no es lo mismo que crearlos con otro usuario, porque los permisos quedan asociados directamente con el usuario que los creó.
–> Es posible modificar permisos y pertenencias de archivos y directorios en la terminal de Linux, pero muy importante tener cuidado con esto, ya que puede abrir vulnerabilidades en el sistema.
En la próxima lección se divide en dos partes y con la primera te mostraré un ejemplo práctico de lo que puedes hacer con un VPS y la terminal de Linux.