Latinoamérica
de.novatoanovato@gmail.com

Comando -chmod-

Dedicado al nuevo usuario de software libre

Comando -chmod-

Comando chmod

El comando chmod, cuyo nombre proviene del ingles change mode, que significa cambiar modo. Éste comando es un programa asociado a los sistemas operativos del tipo UNIX que permite gestionar los permisos asociados a ficheros o directorios.

Objetivo de éste artículo

EL objetivo de este artículo es el de enseñarle al lector a gestionar los permisos de accesos a archivos y directorios por medio del comando chmod. En esta entrada aprenderá ¿Que es un permiso?¿Cuales son los tipos de permisos?¿Cómo consultar permisos de archivos y directorios?¿Cómo gestionar permisos de archivos y directorios? y los tipos de notaciones que podemos utilizar para la gestión de permisos sobre un elemento ya sea por notación simbólica y por notación octal.

Contenido

¿Qué es un usuario?

Según la RAE, un usuario es «aquel que usa algo». Pero en informática es un poco más complejo.

En informática, un usuario es un individuo que utiliza una computadora, sistema operativo, servicio, etc. Aunque en cada sistema existen múltiples usuarios: Algunos son usuarios pertenecientes al propio sistema operativo (Usuario root), otros a aplicaciones del sistema (ejecutan servicios de aplicaciones), y otros pertenecientes a usuarios físicos. Un usuario puede ser tanto una persona como una máquina, un programa.

Es función del sistema operativo gestionar las actividades de dichos usuarios de modo que no interfieran unos con otros. Además se utilizan para clasificar los diferentes privilegios que poseerá para interactuar con el dispositivo, sus archivos, directorios y con los programas de aplicaciones instalados.

¿Qué es un grupo de usuarios?

Un grupo es una recopilación de usuarios que pueden compartir permisos sobre archivos, directorios y otros recursos del sistema. Siendo el mismo sistema quien utiliza las configuraciones de grupos para gestionar de forma masiva los privilegios, asignados o negados, que los usuarios poseen sobre los diferentes recursos del sistema informático.

La pertenencia a grupos facilita la administración de la seguridad y accesos de los usuarios, evitando administrarlos de forma individual para cada usuario en particular. Un usuario puede pertenecer a diferentes grupos a la vez, cada grupo otorgará o le negará al usuario privilegios sobre los elementos que componen el sistema informático.

¿Qué son los permisos?

En GNU/Linux todos los archivos, directorios y aplicaciones cuentan con distintos niveles de privilegios de accesos para otorgar o negar diferentes tipos de permisos a los diferentes tipos de usuarios del sistema. Si bien este artículo se basa en la gestión de permisos, es necesario que entendamos los diferentes niveles de permisos de propietarios y que los distingamos muy bien de los tipos de permisos.

Niveles de permisos

Como ya sabemos que es un usuario y que es un grupo de usuarios, necesitamos entender que en GNU/Linux estos se utilizan para establecer diferentes niveles de privilegios.

Estos son:

Permisos del propietario (Usuario)

El propietario de un archivo o directorio es aquel usuario que lo crea, sin importar en que directorio o dispositivo, siempre y cuando cuente con los permisos sobre la directorio donde se encuentra trabajando.

Cuando hablamos de un usuario en GNU/Linux, este tendrá la potestad de crear los archivos que quiera dentro de su directorio /home por defecto y sera su propietario. Es decir, que si otro usuario pretende acceder a ellos, por default, no podrá hacerlo.

Permisos del grupo (Grupos de usuarios)

Cada tipo de usuario del sistema pertenece a un grupo. Cuando se gestionan los premisos de un grupo, se le están asignando esos  permisos a todos los usuarios que pertenecen a el.

De esta forma es mucho mas simple gestionar permisos, ya que no tendríamos que administrar individualmente los permisos de cada usuario, sino que los podremos hacer a través de los diferentes grupos.

Permisos del resto de usuarios (Others u otros)

Un usuario que no es propietario de un archivo o directorio y que no pertenece a un grupo que cuente con privilegios sobre este, pertenece al resto de los usuarios y puede conseguir diferentes tipos permisos por medio de este nivel.

Tipos de permisos

Existen tres tipos básicos de permisos que pueden ser gestionados para un archivo, directorio o aplicación.

Permisos de lectura

Lectura (R) por reading en Inglés. Los usuario que posean permisos de lectura sobre un archivo puede visualizar su contenido. Así mismo, si el usuario goza de permisos de lectura sobre un directorio será capaz ver el contenido del directorio.

Permiso de escritura

Escritura (W) por writing en Inglés. Cuando un usuario posee permisos de escritura sobre un archivo puede editar su contenido. Del mismo modo, si el usuario dispone de permisos de escritura sobre un directorio será capaz de crear ficheros y carpetas en ese directorio.

Permisos de ejecución

Ejecución (X) por execution en Inglés. Los permisos de ejecución se utilizan en aplicaciones y scripts. Si dispones de este permiso el usuario podrá ejecutar la aplicación/script. En cuanto a los directorios, si cuenta con este permiso, el usuario accederá a el.

¿Cómo consultar los niveles y tipos de permisos?

Una de las formas más simples de consultar los niveles de permisos (propietarios) y tipos de privilegios sobre archivos y directorios es haciendo uso del comando ls -l. Este nos listara el contenido completo de un directorio con sus tributos, ya sea que nos encontremos en el o que lo hayamos indicado mediante una ruta relativa o de la ruta absoluta.

Si quieres saber más sobre el comando ls le comparto el link de un artículo sobre él.

Trabajamos sobre un ejemplo para entender y describir los atributos listados de diferentes elementos:

En este caso me encuentro posicionado en un directorio nombrado como: Ejemplos chmod, donde ejecute el comando ls -l y obtuve la siguiente salida.

Dentro de este directorio visualizamos 3 elementos y una serie de columnas con información sobre cada uno de ellos. Señalaremos y describiremos las columnas necesarias para el desarrollo de este artículo.

Pero… ¿Cómo interpretamos esta información?

Columna tipos de permisos

Es la columna donde visualizamos los tipos de permisos sobre un elemento, recordemos que estos pueden ser lectura (r), escritura(w) y ejecución (x). Pero el primer caracter nos indica algo distinto en cuanto a permisos nos referimos, este indicara el tipo de archivo. Y a continuación el resto de los caracteres que informaran los permisos correspondientes al usuario, al grupo propietario al que pertenece y que tipo de acceso tendrán el resto de los usuarios del sistema sobre este. Desarrollemos ambos casos.

El primer carácter

Como dijimos anteriormente, el primer caracter no señala el tipo de elemento, el siguiente cuadro nos mostrara las correspondencia simbólica de los valores que puede tomar.

  • : es un archivo.
  • d: si es un directorio.
  • l: es un enlace o acceso directo.
  • b: Archivo de bloques especiales (Archivos especiales de dispositivo)
  • c: Archivo de caracteres especiales (Dispositivo tty, impresora…)
  • p: Archivo especial de cauce (pipe o tubería)

En la imagen del ejemplo, ¿Podrías identificar los tipo de elemento?¿Qué son?.

Los  caracteres restantes

A continuación del caracter que nos indica el tipo de archivo, nos encontramos con los permisos del elemento. Estos estan conformados por los nueve caracteres restantes y agrupados en grupos de tres. Donde nos indican los permisos de usuario, del grupo y del restos de los usuarios, respectivamente.

Donde cada caracter representa:

  • : Sin permiso
  • r: Permiso de lectura
  • w: Permiso de escritura
  • x: Permiso de ejecución

Estos permisos tiene acciones distintas para archivos y directorios, dado a que son elementos diferentes. Repasemos:

Permisos para archivos

Lectura: permite, fundamentalmente, visualizar el contenido del archivo.
Escritura: permite modificar el contenido del archivo.
Ejecución: permite ejecutar el archivo como si de un programa ejecutable se tratase.

Permisos para directorios

Lectura: Permite saber qué archivos y directorios contiene el directorio que tiene este permiso.
Escritura: permite crear archivos en el directorio, bien sean archivos ordinarios o nuevos directorios.
Ejecución: permite situarse sobre el directorio para poder examinar su contenido, copiar archivos de o hacia él.

Columna Usuario propietario

Esta columna nos indica el usuario propietario del archivo, si nos volvemos unos renglones hacia atrás, recordaremos que el usuario propietario es aquel que creo el elemento o recurso. No se debe confundir con el usuario que esta tomando la lectura sobre el recurso. Si cambio de login a otro usuario y hago una lectura sobre los mismo elementos, veras el mismo resultado.

Me logueé como usuario root y ejecute sobre el mismo directorio del ejemplo ls -l, donde me imprimió la siguiente salida:

Como veras, los recursos conservan sus atributos. Pertenecen al mismo usuario propietario.

Columna Grupo propietario

La columna de grupo propietario nos indica el grupo al que pertenece el usuario propietario al momento de crear el elemento. Al igual que en el caso anterior, estos son atributos le pertenecen a los elementos, indistinto del usuario que esta tomando la lectura.

Columna Nombre del archivo o directorio (elemento)

No hay mucho para explicar sobre esta columna. Nos brinda los nombre de los recursos que estamos listando.

Gestión de permisos con el comando chmod

Siento mucho la introducción, pero era necesario, para quienes no sepan, definir algunas cuestiones que hacen a la gestión de permisos. De esta forma quien aborde esta entrada entrara en contexto con el conocimiento necesario para aprender a utilizar el comando chmod. A continuación aprenderemos a administrar los diferentes privilegios de los distintos elementos y para los diferentes niveles de permisos con esta completa y muy utilizada herramienta.

Sintaxis

El comando chmod se corresponde con la siguiente sintaxis:

chmod [permisos] [elemento] [modificadores]

Permiso, elementos y modificadores

-Permisos: Son los nuevos permisos que vamos a aplicar sobre un elemento, estos pueden ser en notación octal o en notación simbólica.

-Elemento: Es la carpeta, archivo, programa o algún recurso sobre el que se van a aplicar los nuevos permisos.

-Modificadores: Es la forma en que se van a llevar a cabo los cambios de permisos.

Para que quede un poquito mas claro; si queremos modificar permisos de a una carpeta, pero también los queremos aplicar a su contenido, el modificador -R permite ejecutar este cambio de forma recursiva.

Tipos de notaciones para la gestión de permisos

Los permisos pueden ser modificados por medio de la notación octal o la notación simbólica, como se mencionó unos renglones mas arriba. A continuación analizaremos y aprenderemos a utilizar ambos casos.

Notación simbólica

Esta notación se caracteriza por permitirnos cambiar permisos de forma individual sin tener que trabajar sobre el resto de los permisos, especificando a que nivel va dirigido.

  • Nivel de permisos
    • u: usuario
    • g: grupo
    • o: otros
  • Modificador de operación
    • +: añadir permisos
    • -: quitar permisos
  • Permisos
    • r: lectura
    • w: escritura
    • x: ejecución

chmod [Nivel de permisos] [Modificador/es de operación] [Permiso/s] [Modificador/es] [Ruta] [Elemento]

Comprendamos los parámetros…

Nivel de permisos

En primer lugar necesitamos indicar el nivel de permisos donde el parámetro u se utiliza para afectar los permisos de usuarios sobre el elemento, g los del grupo y por último o para los permisos que afectarán a el resto de los usuarios del sistema.

Modificadores de operación

En segundo lugar debemos ingresar el modificador de operación, este parámetro es el que defina si los permisos que indiquemos a continuación se van a añadir (+) o quitar ().

Permisos

En tercer lugar es necesario señalar los permisos que van a ser afectados. Donde r son los permisos de lectura, w los permisos de escritura y x los de ejecución. En este caso podemos indicar uno solo o los tres simultáneamente.

Modificadores

En cuarto lugar podemos usar los modificadores que el comando chmod posee en su sintaxis, entre los que se encuentran:

  • c: Muestra un mensaje mencionando solamente aquellos ficheros cuyos permisos cambian realmente.
  • f: No muestra mensajes de error sobre ficheros cuyos permisos no se pueden cambiar.
  • v: Describe prolijamente la acción efectuada, o no, para cada fichero.
  • R: Cambia recursivamente los permisos de directorios y sus contenidos.

Ruta

En quinto lugar podemos hacer uso de rutas, ya sean relativas o absolutas, que indiquen la dirección del elemento que va a ser gestionado. En caso de que no se pase una ruta como parámetro, chmod entenderá que el elemento se encuentra en el mismo directorio que el prompt.

Elemento

Por ultimo ingresar como parámetro el elemento que sera afectado, no es mas que el nombre completo del recurso.

Gestión de permisos con notación simbólica

Pongamos el contexto sobre el que vamos a trabajar. Cree un directorio nombrado como Ejemplo chmod, en la ruta /home/cristian/. Por ende, la ruta del directorio es /home/cristian/'Ejemplos chmod'. Gestionaremos los permisos de los elementos que se encuentra en este directorio. Siendo estos…

ls -l

¿Puedes identificar el tipo de elemento haciendo uso del primer caracter? ¿Cuales son los permisos de cada uno de estos elementos?

Quitar permisos a un elemento: Con notación simbólica Utilizando el comando chmod

No encontramos en el directorio:

La imagen muestra una lista de elementos con sus respectivos atributos. Gestionemos los permisos del script Calculadora.py. Como observamos, cuenta con permisos de lectura, escritura y ejecución para todos los niveles (usuario propietario, grupo propietario y otros usuarios). Supongamos que queremos quitar todos los permisos para el nivel otros usuarios.

Usando notación simbólica, ejecutamos:

chmod o-rwx Calculadora.py

Donde el parámetro o indica que afectara el nivel de permisos otros usuarios, el modificador , señala que se quitaran privilegios, los permisos rwx serán los afectados y por ultimo ingresamos el nombre completo del elemento Calculadora.py.

Una vez ejecutado el comando, corroboramos con ls -l.

Observemos que el script Calculadora.py ya no cuenta con permisos de lectura, escritura y ejecución para el resto de los usuario del sistema que no sea el propietario o no pertenezcan al mismo grupo.

¿Cual es el grupo propietario de los elementos? ¿Pertenecen todos al mismo grupo propietario? ¿Porqué no se indico ninguna ruta para gestionar los permisos del elemento?

Quitar permisos a un elemento: Con notación simbólica y utilizando rutas con chmod

A menudo nos encontramos en una situación en la que el elemento sobre el que queremos hacer algún tipo de gestión se encuentra en un directorio diferente del que nos encontramos posicionados con el prompt. Cuando este caso se nos presenta podemos acudir a dos opciones: Movernos al directorio donde se encuentra el elemento a gestionar o hacerlo directamente desde el directorio donde nos encontramos haciendo uso de rutas. Estas rutas pueden ser indicadas de forma relativa o absoluta. Veamos.

Quitar permisos a un elemento por medio de rutas relativa

Pongámonos en contexto: Sea el directorio Ejemplos chmod ubicado en la ruta /home/cristian/'Ejemplos chmod' que como contenido posee los siguientes elemento con sus respectivos permisos:

Siendo nuestra ubicación con el prompt la ruta /home/cristian: Vamos a quitar los permisos de ejecución (x) al nivel grupo propietario del programa Calculadora.py alojado en la ruta /home/cristian/'Ejemplos chomd'/Calculadora.py desde nuestra posición actual con chmod usando la ruta relativa.

Si ejecutamos:

chmod g-x ./'Ejemplos chmod'/Calculadora.py

Y posteriormente consultamos los permisos con la linea ls -l ./'Ejemplos chmod' veremos que el programa Calculadora.py ya no cuenta con permisos de ejecución para el nivel de grupos propietarios.

Quitar permisos a un elemento por medio de rutas Absoluta

Pongámonos en contexto: Sea el directorio Ejemplos chmod ubicado en la ruta /home/cristian/'Ejemplos chmod' que como contenido posee los siguientes elemento con sus respectivos permisos:

 

Siendo nuestra ubicación con el prompt la ruta /home/cristian: Vamos a quitar los permisos de escritura (w) al nivel grupo propietario del programa Calculadora.py alojado en la ruta /home/cristian/Ejemplos\ chmod/Calculadora.py desde nuestra posición actual con chmod usando la ruta relativa.

Si ejecutamos:

chmod g-w /home/cristian/Ejemplos\ chmod/Calculadora.py

Y posteriormente consultamos los permisos con la linea ls -l /home/cristian/Ejemplos\ chmod/Calculadora.py veremos que el programa Calculadora.py ya no cuenta con permisos de escritura (w) para el nivel de grupos propietarios.

Añadir permisos a un elemento: Con notación simbólica y utilizando el comando chmod

Por medio de la siguiente imagen ¿Podrías identificar el contexto sobre el que vamos a trabajar?

Cuando ejemplificamos la quita de permisos, trabajamos sobre un fichero o archivo. En este caso vamos a realizar las modificaciones de permisos sobre un directorio para ver como afectan los permisos sobre estos.

Como vemos en la imagen, dentro del directorio Ejemplos chmod nos encontramos con un directorio llamado Carpeta de prueba. Ésta se encuentra sin permiso de escritura (w) para los niveles Grupo propietarios y Otros usuarios.

Para añadir a ambos niveles permiso de escritura (w) ejecutamos:

chmod g+w,o+w 'Carpeta de prueba'/

Donde g indica el nivel de permisos que va a ser afectado, + es el modificador de operación indicando que se van a añadir permisos y w el permiso que se va a añadir: g+w. ¿Puedes describir o+w?. Por ultimo nos encontramos con el elemento que va a ser afectado, en este caso, el directorio Carpeta de prueba.

Nótese que cuando modificamos varios niveles de permisos en una misma linea de ejecución, estos deben ser indicados con una separación por una coma (,).

g+w,o+w

Como vemos, los permisos fueron modificados correctamente.

Añadir permisos a un elemento: Con notación simbólica y utilizando rutas con chmod

Si nos encontramos en una situación en la que el elemento sobre el que queremos gestionar los permisos se encuentra en un directorio diferente del que nos encontramos posicionados con el prompt. Podemos recurrir a dos opciones: Movernos al directorio donde se encuentra el elemento a gestionar o hacerlo directamente desde el directorio donde nos encontramos haciendo uso de rutas relativa o absoluta. Ejemplifiquemos.

Añadir permisos a un elemento por medio de rutas relativa

 

Añadir permisos a un elemento por medio de rutas Absoluta

 

Como vemos, la gestión de permisos con notación simbólica es muy versátil, podemos indicar uno a varios permisos a la vez y a uno o a varios niveles de permisos de forma simultanea.

Notación octal

La asignación de permisos en octal, nos obliga a modificar todos los permisos simultáneamente. Para asignar permisos frecuentemente se utilizan 3 números del sistema octal (de 0 a 7) que se obtienen representación de su equivalente en binario. Veamos la siguiente tabla.

Siendo interpretado del sistema binario el «0» como la quita de un permiso y el «1» como la asignación de tal.

Es decir que si elijo el 4 en octal que en binario seria «1-0-0» estoy diciendo que le estoy agrando permisos de lectura pero le estoy quitando los permisos de escritura y los de ejecución.

De donde, pues de pende de la posición dentro de los 3 números  con los que esta sintaxis trabaja. Pero es fácil de interpretar que el primer numero corresponde al del usuario, el segundo al de grupo y el tercero al de otros.

Vemos el siguiente ejemplo:  «sudo chmod 740 archivo.txt», pero antes analicemos los permisos del archivo con el vamos a trabajar.

Observamos que tiene permisos de lectura y escritura para usuario, no tiene permisos habilitados para grupo y tiene permisos de lectura, escritura y ejecución para otros.

Si ejecutamos «sudo chmod 740 archivo.txt» le estamos diciendo que:

7 en octal, primera posición (usuario): 1-1-1 en binario habilita todos los permisos para el usuario
4 en octal, segunda posición (grupo): 1-0-0 en binario, habilita permisos de lectura únicamente.
0 en octal, tercera posición (otros): 0-0-0 en binario, deshabilita todos los permisos.

Dejándonos como resultados a «archivo.txt» con los siguientes permisos:

Permisos especiales

Existen una serie de permisos especiales en GNU/Linux, que, aunque no son habituales, es necesarios saberlos, por ejemplo, para trabajar en grupo sobre ciertos directorios o bien si deseamos sacarnos en algún momento los certificados de LPIC

Respecto a los exámenes de LPIC, justo estoy en ello, por eso los últimos artículos en la web son tan técnicos, ya que se tratan de áreas que salen en dichos exámenes y me sirven para refrescar conocimientos.

Sticky bit

Se trata de un permiso de acceso que puede ser asignado a ficheros y directorios en sistemas UNIX y similares. Aunque históricamente su fin eran otro, actualmente el sticky bit se utiliza sobre directorios.

Cuando se le asigna a un directorio, significa que los elementos que hay en ese directorio solo pueden ser renombrados o borrados por su propietario o bien por root. El resto de usuarios que tengan permisos de lectura y escritura, los podrán leer y modificar, pero no borrar.

El sticky bit comúnmente es utilizado para “/tmp”

Este tipo de permisos sobre un directorio se puede otorgar de varias maneras:

chmod +t /directorio
chmod -t /directorio

SUID

Cuando se activa el bit SUID sobre un fichero significa que el que lo ejecute va a tener los mismos permisos que el que creó el archivo. Esto es útil en algunas ocasiones, aunque hay que utilizarlo con cuidado, ya que puede acarrear problemas de seguridad

Para activarlo:

chmod 4775 fichero

Observamos que en la última línea le quitamos el servicio de ejecución al archivo y en los permisos se reemplaza la s minúscula por la S mayúsculas.

SGID

El bit SGID es lo mismo que SUID, pero a nivel de grupo. Esto es, todo archivo que tenga activo el SGID, al ser ejecutado, tendrás los privilegios del grupo al que pertenece.

Opción bastante útil si queremos configurar un directorio para colaborar diferentes usuarios. Si se aplica este bit al directorio, cualquier archivo creado en dicho directorio, tendrá asignado el grupo al que pertenece el directorio

Por ejemplo, si un usuario que tiene permiso de escritura en el directorio crea un archivo allí, ese archivo es un miembro del mismo grupo que el directorio y no el grupo del usuario. Como hemos dicho, esto es muy útil en la creación de directorios compartidos.

chmod g+s "directorio"

chmod 2555 "fichero"

Puedes unírtenos en el grupo de Facebook GNU/Linux Para Todos
Grupo en Telegram Novato en Linux

Espero sea de utilidad.
Saludos, Cristian.

 

Deja un comentario

Tu dirección de correo electrónico no será publicada.

dieciocho + trece =